diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2015-01-14 18:34:28 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2015-01-14 18:34:28 -0600 |
commit | 647a5c02c6f0d2871c0308c6f2e5916110136792 (patch) | |
tree | 15f73da4bad73c9ec01612f7f3f99ad1eb4f9322 /nuttx/net/utils | |
parent | e24204e4982296058d0185c2a52f89af18a5142d (diff) | |
download | px4-nuttx-647a5c02c6f0d2871c0308c6f2e5916110136792.tar.gz px4-nuttx-647a5c02c6f0d2871c0308c6f2e5916110136792.tar.bz2 px4-nuttx-647a5c02c6f0d2871c0308c6f2e5916110136792.zip |
Networking: A few more IPv6-related fixes
Diffstat (limited to 'nuttx/net/utils')
-rw-r--r-- | nuttx/net/utils/net_chksum.c | 40 | ||||
-rw-r--r-- | nuttx/net/utils/utils.h | 16 |
2 files changed, 37 insertions, 19 deletions
diff --git a/nuttx/net/utils/net_chksum.c b/nuttx/net/utils/net_chksum.c index f2183665e..b77e10569 100644 --- a/nuttx/net/utils/net_chksum.c +++ b/nuttx/net/utils/net_chksum.c @@ -54,8 +54,9 @@ * Pre-processor Definitions ****************************************************************************/ -#define BUF ((struct net_iphdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) -#define ICMPBUF ((struct icmp_iphdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +#define BUF ((struct net_iphdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +#define ICMPBUF ((struct icmp_iphdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +#define ICMPv6BUF ((struct icmp_ipv6hdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) /**************************************************************************** * Private Data @@ -114,7 +115,8 @@ static uint16_t chksum(uint16_t sum, FAR const uint8_t *data, uint16_t len) ****************************************************************************/ #if !CONFIG_NET_ARCH_CHKSUM -static uint16_t upper_layer_chksum(FAR struct net_driver_s *dev, uint8_t proto) +static uint16_t upper_layer_chksum(FAR struct net_driver_s *dev, + uint8_t proto) { FAR struct net_iphdr_s *pbuf = BUF; uint16_t upper_layer_len; @@ -152,19 +154,6 @@ static uint16_t upper_layer_chksum(FAR struct net_driver_s *dev, uint8_t proto) #endif /* CONFIG_NET_ARCH_CHKSUM */ /**************************************************************************** - * Name: icmp_6chksum - ****************************************************************************/ - -#if !CONFIG_NET_ARCH_CHKSUM -#ifdef CONFIG_NET_IPv6 -static uint16_t icmp_6chksum(FAR struct net_driver_s *dev) -{ - return upper_layer_chksum(dev, IP_PROTO_ICMP6); -} -#endif /* CONFIG_NET_IPv6 */ -#endif /* CONFIG_NET_ARCH_CHKSUM */ - -/**************************************************************************** * Name: net_carry32 * * Description: @@ -369,9 +358,24 @@ uint16_t udp_chksum(FAR struct net_driver_s *dev) #if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) uint16_t icmp_chksum(FAR struct net_driver_s *dev, int len) { - FAR struct icmp_iphdr_s *picmp = ICMPBUF; - return net_chksum((uint16_t*)&picmp->type, len); + FAR struct icmp_iphdr_s *icmp = ICMPBUF; + return net_chksum((uint16_t*)&icmp->type, len); } #endif /* CONFIG_NET_ICMP && CONFIG_NET_ICMP_PING */ +/**************************************************************************** + * Name: icmpv6_chksum + * + * Description: + * Calculate the checksum of the ICMPv6 message + * + ****************************************************************************/ + +#ifdef CONFIG_NET_ICMPv6 +uint16_t icmpv6_chksum(FAR struct net_driver_s *dev) +{ + return upper_layer_chksum(dev, IP_PROTO_ICMP6); +} +#endif + #endif /* CONFIG_NET */ diff --git a/nuttx/net/utils/utils.h b/nuttx/net/utils/utils.h index 6ecb47ce6..76401a27a 100644 --- a/nuttx/net/utils/utils.h +++ b/nuttx/net/utils/utils.h @@ -175,11 +175,25 @@ uint16_t udp_chksum(FAR struct net_driver_s *dev); * Name: icmp_chksum * * Description: - * Calculate the checksum of the ICMP message + * Calculate the checksum of the IPv4 ICMP message * ****************************************************************************/ +#if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) uint16_t icmp_chksum(FAR struct net_driver_s *dev, int len); +#endif + +/**************************************************************************** + * Name: icmpv6_chksum + * + * Description: + * Calculate the checksum of the ICMPv6 message + * + ****************************************************************************/ + +#ifdef CONFIG_NET_ICMPv6 +uint16_t icmpv6_chksum(FAR struct net_driver_s *dev); +#endif #undef EXTERN #ifdef __cplusplus |