#ifndef _PACKET_H_ #define _PACKET_H_ #include #include #include #define IPPROTO_HIDE_EID 0xfd struct packet { union { #ifdef __USE_BSD struct ip ip; #else struct iphdr ip; #endif struct ip6_hdr ip6; } hdr; char payload[IP_MAXPACKET]; /* payload is this - header size, but OK */ }; // wrapper.c expects this name #define recv_pkt packet // It's all our code that uses this. 12 is much more than we need to // construct a wrapped packet at the moment. // // initial usage: // 0 - wrapping ip header, including enc_size // 1 - encrypted portion of payload, in scratch. // 2 - unencrypted portion of payload, in recv_pkt #define MAX_IOVS 12 struct rsp_data { int count; struct iovec iovs[MAX_IOVS]; unsigned char scratch[IP_MAXPACKET]; // somewhere easy to put results }; void compute_ip_checksum( struct iphdr* pkt ); int wrap_ipv4_packet(struct rlocs* reg, struct recv_pkt* pkt, struct rsp_data* out); int wrap_ipv6_packet(struct rlocs* reg, struct recv_pkt* pkt, struct rsp_data* out); int unwrap_ipv4_packet(struct rlocs* reg, struct recv_pkt* pkt, struct rsp_data* out); int unwrap_ipv6_packet(struct rlocs* reg, struct recv_pkt* pkt, struct rsp_data* out); #endif