*/
struct GNUNET_TUN_IPv4Header
{
-#if __BYTE_ORDER == __LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int header_length:4 GNUNET_PACKED;
unsigned int version:4 GNUNET_PACKED;
#elif __BYTE_ORDER == __BIG_ENDIAN
unsigned int version:4 GNUNET_PACKED;
unsigned int header_length:4 GNUNET_PACKED;
+#else
+ #error byteorder undefined
#endif
uint8_t diff_serv;
* Destination of the packet.
*/
struct in_addr destination_address GNUNET_PACKED;
-};
+} GNUNET_GCC_STRUCT_LAYOUT;
/**
*/
struct GNUNET_TUN_IPv6Header
{
-#if __BYTE_ORDER == __LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int traffic_class_h:4 GNUNET_PACKED;
unsigned int version:4 GNUNET_PACKED;
unsigned int traffic_class_l:4 GNUNET_PACKED;
unsigned int flow_label:20 GNUNET_PACKED;
#elif __BYTE_ORDER == __BIG_ENDIAN
unsigned int version:4 GNUNET_PACKED;
- unsigned int traffic_class_h:4 GNUNET_PACKED;
- unsigned int traffic_class_l:4 GNUNET_PACKED;
+ unsigned int traffic_class:8 GNUNET_PACKED;
unsigned int flow_label:20 GNUNET_PACKED;
+#else
+ #error byteorder undefined
#endif
/**
* Length of the payload, excluding this header.
* Destination of the packet.
*/
struct in6_addr destination_address GNUNET_PACKED;
-};
+} GNUNET_GCC_STRUCT_LAYOUT;
/**
* Acknowledgement number.
*/
uint32_t ack GNUNET_PACKED;
-#if __BYTE_ORDER == __LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
/**
- * Reserved.
+ * Reserved. Must be zero.
*/
unsigned int reserved : 4 GNUNET_PACKED;
/**
*/
unsigned int off : 4 GNUNET_PACKED;
/**
- * Reserved.
+ * Reserved. Must be zero.
*/
unsigned int reserved : 4 GNUNET_PACKED;
+#else
+ #error byteorder undefined
#endif
+
+ /**
+ * Flags (SYN, FIN, ACK, etc.)
+ */
uint8_t flags;
/**
* Urgent pointer.
*/
uint16_t urgent_pointer GNUNET_PACKED;
-};
+} GNUNET_GCC_STRUCT_LAYOUT;
/**