diff options
Diffstat (limited to 'nuttx/net/utils/net_chksum.c')
-rw-r--r-- | nuttx/net/utils/net_chksum.c | 40 |
1 files changed, 22 insertions, 18 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 */ |