[PATCH 1/2 openggsn] gtp: fix wrong binary layout for struct gtp0_header in x86_64

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

pablo at gnumonks.org pablo at gnumonks.org
Thu Mar 20 14:33:59 UTC 2014


From: Pablo Neira Ayuso <pablo at gnumonks.org>

struct gtp0_header needs __attribute__((packed)) to make sure that
gcc doesn't add a hole of 4 bytes to align the 64-bits teid, resulting
in 24 bytes instead of 20 bytes. This was breaking gtpv0 in my gprs
testbed with my x86_64 laptop.

While at it, add also attribute packed to other headers just to
make sure that gcc doesn't pad the structures with holes.
---
If no objections, I'll push this to master.

 gtp/gtp.h |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/gtp/gtp.h b/gtp/gtp.h
index 54af96e..39a902f 100644
--- a/gtp/gtp.h
+++ b/gtp/gtp.h
@@ -161,7 +161,7 @@ struct gtp0_header {		/*    Descriptions from 3GPP 09.60 */
 	uint8_t spare2;		/* 11 Spare */
 	uint8_t spare3;		/* 12 Spare */
 	uint64_t tid;		/* 13 Tunnel ID */
-};				/* 20 */
+} __attribute__((packed));	/* 20 */
 
 struct gtp1_header_short {	/*    Descriptions from 3GPP 29060 */
 	uint8_t flags;		/* 01 bitfield, with typical values */
@@ -174,7 +174,7 @@ struct gtp1_header_short {	/*    Descriptions from 3GPP 29060 */
 	uint8_t type;		/* 02 Message type. T-PDU = 0xff */
 	uint16_t length;	/* 03 Length (of IP packet or signalling) */
 	uint32_t tei;		/* 05 - 08 Tunnel Endpoint ID */
-};
+} __attribute__((packed));
 
 struct gtp1_header_long {	/*    Descriptions from 3GPP 29060 */
 	uint8_t flags;		/* 01 bitfield, with typical values */
@@ -190,7 +190,7 @@ struct gtp1_header_long {	/*    Descriptions from 3GPP 29060 */
 	uint16_t seq;		/* 10 Sequence Number */
 	uint8_t npdu;		/* 11 N-PDU Number */
 	uint8_t next;		/* 12 Next extension header type. Empty = 0 */
-};
+} __attribute__((packed));
 
 struct gtp0_packet {
 	struct gtp0_header h;
-- 
1.7.10.4





More information about the OpenBSC mailing list