summaryrefslogtreecommitdiff
path: root/nuttx/net/utils
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2015-01-14 18:34:28 -0600
committerGregory Nutt <gnutt@nuttx.org>2015-01-14 18:34:28 -0600
commit647a5c02c6f0d2871c0308c6f2e5916110136792 (patch)
tree15f73da4bad73c9ec01612f7f3f99ad1eb4f9322 /nuttx/net/utils
parente24204e4982296058d0185c2a52f89af18a5142d (diff)
downloadpx4-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.c40
-rw-r--r--nuttx/net/utils/utils.h16
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