X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fipv6.h;h=e9c4d2655ed2ef6eb6ba811d58b5f56631a9368c;hb=244002d83466a85ac4fbb5327e26a60fe44168fd;hp=17bc586430cd8e4cd21f74e5b83cf95f53e351dd;hpb=5c76d51d0badd8a35e3883f18a5792e830448768;p=tinc diff --git a/src/ipv6.h b/src/ipv6.h index 17bc5864..e9c4d265 100644 --- a/src/ipv6.h +++ b/src/ipv6.h @@ -21,6 +21,8 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include "system.h" + #ifndef AF_INET6 #define AF_INET6 10 #endif @@ -37,7 +39,7 @@ #endif #ifndef HAVE_STRUCT_IP6_HDR -struct ip6_hdr { +PACKED(struct ip6_hdr { union { struct ip6_hdrctl { uint32_t ip6_un1_flow; @@ -49,7 +51,7 @@ struct ip6_hdr { } ip6_ctlun; struct in6_addr ip6_src; struct in6_addr ip6_dst; -} __attribute__((__gcc_struct__)) __attribute((__packed__)); +}); #define ip6_vfc ip6_ctlun.ip6_un2_vfc #define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow #define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen @@ -58,8 +60,10 @@ struct ip6_hdr { #define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim #endif +STATIC_ASSERT(sizeof(struct ip6_hdr) == 40, "ip6_hdr has incorrect size"); + #ifndef HAVE_STRUCT_ICMP6_HDR -struct icmp6_hdr { +PACKED(struct icmp6_hdr { uint8_t icmp6_type; uint8_t icmp6_code; uint16_t icmp6_cksum; @@ -68,7 +72,7 @@ struct icmp6_hdr { uint16_t icmp6_un_data16[2]; uint8_t icmp6_un_data8[4]; } icmp6_dataun; -} __attribute__((__gcc_struct__)) __attribute((__packed__)); +}); #define ICMP6_DST_UNREACH_NOROUTE 0 #define ICMP6_DST_UNREACH 1 #define ICMP6_PACKET_TOO_BIG 2 @@ -84,11 +88,13 @@ struct icmp6_hdr { #define icmp6_mtu icmp6_data32[0] #endif +STATIC_ASSERT(sizeof(struct icmp6_hdr) == 8, "icmp6_hdr has incorrect size"); + #ifndef HAVE_STRUCT_ND_NEIGHBOR_SOLICIT -struct nd_neighbor_solicit { +PACKED(struct nd_neighbor_solicit { struct icmp6_hdr nd_ns_hdr; struct in6_addr nd_ns_target; -} __attribute__((__gcc_struct__)) __attribute((__packed__)); +}); #define ND_OPT_SOURCE_LINKADDR 1 #define ND_OPT_TARGET_LINKADDR 2 #define nd_ns_type nd_ns_hdr.icmp6_type @@ -97,11 +103,15 @@ struct nd_neighbor_solicit { #define nd_ns_reserved nd_ns_hdr.icmp6_data32[0] #endif +STATIC_ASSERT(sizeof(struct nd_neighbor_solicit) == 24, "nd_neighbor_solicit has incorrect size"); + #ifndef HAVE_STRUCT_ND_OPT_HDR -struct nd_opt_hdr { +PACKED(struct nd_opt_hdr { uint8_t nd_opt_type; uint8_t nd_opt_len; -} __attribute__((__gcc_struct__)) __attribute((__packed__)); +}); #endif +STATIC_ASSERT(sizeof(struct nd_opt_hdr) == 2, "nd_opt_hdr has incorrect size"); + #endif