#define __USE_BSD
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#define __FAVOR_BSD
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <linux/netfilter.h>
#include <libnetfilter_queue/libnetfilter_queue.h>
#include <ruby.h>
#define ERR -1
#define OK 0
#define PKTSIZE 65535
#define TCP_P 0x6
#define UDP_P 0x11
VALUE pkt_array;
int callback(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg, struct nfq_data *nfa, void *data);
char *get_ruby_error(int err);
int error(char *str);
void sig_handler(int signum);
void IpChecksum(struct ip *ip);
void TcpChecksum(struct ip *ip);
void UdpChecksum(struct ip *ip);
int SumWords(u_int16_t *buf, int nwords);
struct nfq_handle *nfqh;
struct nfq_q_handle *qh;
struct nfnl_handle *nh;
char *my_script;
char *my_method;
struct pkt_t
{
char pkt[PKTSIZE];
long int pkt_count;
} pkt;