From 7fdd473271877de565c57ad3a9bc9486d15f790b Mon Sep 17 00:00:00 2001
From: smlng <s@mlng.net>
Date: Fri, 27 Jan 2017 16:13:56 +0100
Subject: [PATCH] pktdump: add icmpv6 print

---
 Makefile.dep                                  |  1 +
 sys/Makefile                                  |  3 +++
 sys/include/net/icmpv6.h                      |  7 +++++
 sys/net/gnrc/pktdump/gnrc_pktdump.c           |  2 ++
 sys/net/network_layer/icmpv6/Makefile         |  1 +
 .../network_layer/icmpv6/icmpv6_hdr_print.c   | 27 +++++++++++++++++++
 6 files changed, 41 insertions(+)
 create mode 100644 sys/net/network_layer/icmpv6/Makefile
 create mode 100644 sys/net/network_layer/icmpv6/icmpv6_hdr_print.c

diff --git a/Makefile.dep b/Makefile.dep
index 5ddbbb837f..e8732e8e13 100644
--- a/Makefile.dep
+++ b/Makefile.dep
@@ -273,6 +273,7 @@ endif
 ifneq (,$(filter gnrc_icmpv6,$(USEMODULE)))
   USEMODULE += inet_csum
   USEMODULE += gnrc_ipv6
+  USEMODULE += icmpv6
 endif
 
 ifneq (,$(filter gnrc_rpl_srh,$(USEMODULE)))
diff --git a/sys/Makefile b/sys/Makefile
index 7245192bf7..75102da229 100644
--- a/sys/Makefile
+++ b/sys/Makefile
@@ -28,6 +28,9 @@ endif
 ifneq (,$(filter netdev2_test,$(USEMODULE)))
     DIRS += net/netdev2_test
 endif
+ifneq (,$(filter icmpv6,$(USEMODULE)))
+    DIRS += net/network_layer/icmpv6
+endif
 ifneq (,$(filter ipv4_addr,$(USEMODULE)))
     DIRS += net/network_layer/ipv4/addr
 endif
diff --git a/sys/include/net/icmpv6.h b/sys/include/net/icmpv6.h
index 19342af92a..76cb52ba47 100644
--- a/sys/include/net/icmpv6.h
+++ b/sys/include/net/icmpv6.h
@@ -217,6 +217,13 @@ typedef struct __attribute__((packed)) {
     network_uint16_t seq;   /**< Sequence number */
 } icmpv6_echo_t;
 
+/**
+ * @brief   Print the given ICMPv6 header to STDOUT
+ *
+ * @param[in] hdr           ICMPv6 header to print
+ */
+void icmpv6_hdr_print(icmpv6_hdr_t *hdr);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sys/net/gnrc/pktdump/gnrc_pktdump.c b/sys/net/gnrc/pktdump/gnrc_pktdump.c
index 251ea167ef..bf20e197b7 100644
--- a/sys/net/gnrc/pktdump/gnrc_pktdump.c
+++ b/sys/net/gnrc/pktdump/gnrc_pktdump.c
@@ -27,6 +27,7 @@
 #include "msg.h"
 #include "net/gnrc/pktdump.h"
 #include "net/gnrc.h"
+#include "net/icmpv6.h"
 #include "net/ipv6/addr.h"
 #include "net/ipv6/hdr.h"
 #include "net/udp.h"
@@ -71,6 +72,7 @@ static void _dump_snip(gnrc_pktsnip_t *pkt)
 #ifdef MODULE_GNRC_ICMPV6
         case GNRC_NETTYPE_ICMPV6:
             printf("NETTYPE_ICMPV6 (%i)\n", pkt->type);
+            icmpv6_hdr_print(pkt->data);
             break;
 #endif
 #ifdef MODULE_GNRC_TCP
diff --git a/sys/net/network_layer/icmpv6/Makefile b/sys/net/network_layer/icmpv6/Makefile
new file mode 100644
index 0000000000..48422e909a
--- /dev/null
+++ b/sys/net/network_layer/icmpv6/Makefile
@@ -0,0 +1 @@
+include $(RIOTBASE)/Makefile.base
diff --git a/sys/net/network_layer/icmpv6/icmpv6_hdr_print.c b/sys/net/network_layer/icmpv6/icmpv6_hdr_print.c
new file mode 100644
index 0000000000..867e42fb8e
--- /dev/null
+++ b/sys/net/network_layer/icmpv6/icmpv6_hdr_print.c
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2017 HAW Hamburg
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+/**
+ * @{
+ *
+ * @file
+ *
+ * @author smlng <s@mlng.net>
+ */
+
+#include <stdio.h>
+#include <inttypes.h>
+
+#include "net/icmpv6.h"
+
+void icmpv6_hdr_print(icmpv6_hdr_t *hdr)
+{
+    printf("   type: %3" PRIu8 "  code: %3" PRIu8 "\n", hdr->type, hdr->code);
+    printf("   cksum: 0x4%" PRIx16 "\n", byteorder_ntohs(hdr->csum));
+}
+/** @} */
-- 
GitLab