summaryrefslogtreecommitdiff
path: root/nuttx/net/utils/net_chksum.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/net/utils/net_chksum.c')
-rw-r--r--nuttx/net/utils/net_chksum.c40
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 */