aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2014-07-24 14:12:50 +0200
committerTobias Brunner <tobias@strongswan.org>2014-09-09 10:56:15 +0200
commitf8613abc8a89e26ccf33298cbdf8a5e8c4009d1f (patch)
treedee63d6e1e53db931d0d3eee73603e05800f0a09
parent25fcbab6789c9c8839d898a6527e0017dfac4322 (diff)
downloadstrongswan-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.c29
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;
/**