#ifndef NET_H #define NET_H #include #include #include #include #include "vars.h" #define inet_ntoa(addr) \ (addr) & 0xff, \ (addr>>8) & 0xff, \ (addr>>16) & 0xff, \ (addr>>24) & 0xff #define mac_ntoa(addr) \ addr[0], \ addr[1], \ addr[2], \ addr[3], \ addr[4], \ addr[5] #define SERVER 2 #define CLIENT 3 #define ERR_SERVER_UNAVAILABLE 11 #define LINK_HDR sizeof(struct ethhdr) #define ETH_P_ANEMONE 0x9000 #define WINDOWSIZE 10 typedef struct ethhdr ethhdr; typedef struct sk_buff sk_buff; typedef struct net_device net_device; typedef struct dst_entry dst_entry; typedef struct packet_type packet_type; extern timeval curr; extern packet_type anemone_ptype; extern struct net_device * NIC; extern char * nic; extern const int headers; extern int err_checksums, plog, frag_drops, if_drops; typedef struct Packet { list_head queue; Message m, * mp; sk_buff * skb; int serv_internal_time, rescheduled; timeval timestamp; bool success; atomic64_t retry, halflife; void * meta_back; } Packet; typedef struct Request { list_head list; u32 sequence, count, expected; sk_buff * fragments; } Request; int net_init(int (*recv) (sk_buff *)); void net_exit(void); bool valid_checksum(u8 *); sk_buff *next_fragment(int, sk_buff *); sk_buff *store_fragment(Request *, sk_buff *, int *); sk_buff *collect_fragment(sk_buff *, int *); sk_buff *reassemble(Request *); void free_request(Request *); void anemone_send(sk_buff *, u8 *); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) int anemone_recv(sk_buff *, net_device *, packet_type *, net_device *); #else int anemone_recv(sk_buff *, net_device *, packet_type *); #endif void print_payload(Packet *); bool localhost(u32); void inet_mac(char *, u8 *); u32 inet_addr(char *str); void route_localhost(sk_buff *); #endif