diff options
author | Tobias Brunner <tobias@strongswan.org> | 2014-07-24 14:12:50 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2014-09-09 10:56:15 +0200 |
commit | f8613abc8a89e26ccf33298cbdf8a5e8c4009d1f (patch) | |
tree | dee63d6e1e53db931d0d3eee73603e05800f0a09 | |
parent | 25fcbab6789c9c8839d898a6527e0017dfac4322 (diff) | |
download | strongswan-f8613abc8a89e26ccf33298cbdf8a5e8c4009d1f.tar.bz2 strongswan-f8613abc8a89e26ccf33298cbdf8a5e8c4009d1f.tar.xz |
ip-packet: Define our own structs to handle TCP/UDP headers
-rw-r--r-- | src/libipsec/ip_packet.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/libipsec/ip_packet.c b/src/libipsec/ip_packet.c index f6e08c0cb..806526292 100644 --- a/src/libipsec/ip_packet.c +++ b/src/libipsec/ip_packet.c @@ -22,12 +22,37 @@ #include <sys/types.h> #include <netinet/in.h> #include <netinet/ip.h> -#include <netinet/udp.h> -#include <netinet/tcp.h> #ifdef HAVE_NETINET_IP6_H #include <netinet/ip6.h> #endif +/** + * TCP header, defined here because platforms disagree regarding member names + * and unfortunately Android does not define a variant with BSD names. + */ +struct tcphdr { + u_int16_t source; + u_int16_t dest; + u_int32_t seq; + u_int32_t ack_seq; + u_int16_t flags; + u_int16_t window; + u_int16_t check; + u_int16_t urg_ptr; +} __attribute__((packed)); + +/** + * UDP header, similar to the TCP header the system headers disagree on member + * names. Linux uses a union and on Android we could define __FAVOR_BSD to get + * the BSD member names, but this is simpler and more consistent with the above. + */ +struct udphdr { + u_int16_t source; + u_int16_t dest; + u_int16_t len; + u_int16_t check; +} __attribute__((packed)); + typedef struct private_ip_packet_t private_ip_packet_t; /** |