diff options
Diffstat (limited to 'nuttx/include/nuttx/net/ip.h')
-rw-r--r-- | nuttx/include/nuttx/net/ip.h | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/nuttx/include/nuttx/net/ip.h b/nuttx/include/nuttx/net/ip.h index d2deb8f41..160e00fa6 100644 --- a/nuttx/include/nuttx/net/ip.h +++ b/nuttx/include/nuttx/net/ip.h @@ -101,27 +101,11 @@ typedef net_ip6addr_t net_ipaddr_t; typedef net_ip4addr_t net_ipaddr_t; #endif +#ifdef CONFIG_NET_IPv4 /* The IPv4 header */ struct net_iphdr_s { -#ifdef CONFIG_NET_IPv6 - - /* IPv6 Ip header */ - - uint8_t vtc; /* Bits 0-3: version, bits 4-7: traffic class (MS) */ - uint8_t tcf; /* Bits 0-3: traffic class (LS), 4-bits: flow label (MS) */ - uint16_t flow; /* 16-bit flow label (LS) */ - uint8_t len[2]; /* 16-bit Payload length */ - uint8_t proto; /* 8-bit Next header (same as IPv4 protocol field) */ - uint8_t ttl; /* 8-bit Hop limit (like IPv4 TTL field) */ - net_ip6addr_t srcipaddr; /* 128-bit Source address */ - net_ip6addr_t destipaddr; /* 128-bit Destination address */ - -#else /* CONFIG_NET_IPv6 */ - - /* IPv4 IP header */ - uint8_t vhl; /* 8-bit Version (4) and header length (5 or 6) */ uint8_t tos; /* 8-bit Type of service (e.g., 6=TCP) */ uint8_t len[2]; /* 16-bit Total length */ @@ -132,9 +116,24 @@ struct net_iphdr_s uint16_t ipchksum; /* 16-bit Header checksum */ uint16_t srcipaddr[2]; /* 32-bit Source IP address */ uint16_t destipaddr[2]; /* 32-bit Destination IP address */ +}; +#endif + +#ifdef CONFIG_NET_IPv6 +/* The IPv6 header */ -#endif /* CONFIG_NET_IPv6 */ +struct net_ipv6hdr_s +{ + uint8_t vtc; /* Bits 0-3: version, bits 4-7: traffic class (MS) */ + uint8_t tcf; /* Bits 0-3: traffic class (LS), 4-bits: flow label (MS) */ + uint16_t flow; /* 16-bit flow label (LS) */ + uint8_t len[2]; /* 16-bit Payload length */ + uint8_t proto; /* 8-bit Next header (same as IPv4 protocol field) */ + uint8_t ttl; /* 8-bit Hop limit (like IPv4 TTL field) */ + net_ip6addr_t srcipaddr; /* 128-bit Source address */ + net_ip6addr_t destipaddr; /* 128-bit Destination address */ }; +#endif /**************************************************************************** * Public Data @@ -257,22 +256,22 @@ struct net_iphdr_s * addr2 The second IP address. */ -#define net_ipv6addr_cmp(addr1, addr2) \ +#define net_ipv4addr_cmp(addr1, addr2) \ (addr1 == addr2) -#define net_ipv6addr_hdrcmp(addr1, addr2) \ - net_ipv6addr_cmp(net_ip4addr_conv32(addr1), net_ip4addr_conv32(addr2)) +#define net_ipv4addr_hdrcmp(addr1, addr2) \ + net_ipv4addr_cmp(net_ip4addr_conv32(addr1), net_ip4addr_conv32(addr2)) -#define net_ipv4addr_cmp(addr1, addr2) \ +#define net_ipv6addr_cmp(addr1, addr2) \ (memcmp(&addr1, &addr2, sizeof(net_ip6addr_t)) == 0) -#define net_ipv4addr_hdrcmp(addr1, addr2) \ - net_ipv4addr_cmp(addr1, addr2) +#define net_ipv6addr_hdrcmp(addr1, addr2) \ + net_ipv6addr_cmp(addr1, addr2) -#ifndef CONFIG_NET_IPv6 +#if defined(CONFIG_NET_IPv4) +# define net_ipaddr_cmp(addr1, addr2) net_ipv4addr_cmp(addr1, addr2) +# define net_ipaddr_hdrcmp(addr1, addr2) net_ipv4addr_hdrcmp(addr1, addr2) +#elif defined(CONFIG_NET_IPv6) # define net_ipaddr_cmp(addr1, addr2) net_ipv6addr_cmp(addr1, addr2) # define net_ipaddr_hdrcmp(addr1, addr2) net_ipv6addr_hdrcmp(addr1, addr2) -#else -# define net_ipaddr_cmp(addr1, addr2) net_ipv4addr_cmp(addr1, addr2) -# define net_ipaddr_hdrcmp(addr1, addr2) net_ipv4addr_hdrcmp(addr1, addr2 #endif /* Compare two IP addresses under a netmask. The mask is used to mask |