From f34df829dc8ff28275bce67c8c84f39673a3438d Mon Sep 17 00:00:00 2001
From: Martine Lenders <mlenders@inf.fu-berlin.de>
Date: Tue, 24 Mar 2015 02:53:06 +0100
Subject: [PATCH] pktdump: dump data of packet snips structured

---
 Makefile.dep                               |  1 +
 sys/net/crosslayer/ng_pktdump/ng_pktdump.c | 56 +++++++++++++++++-----
 2 files changed, 44 insertions(+), 13 deletions(-)

diff --git a/Makefile.dep b/Makefile.dep
index df021cfa94..5e40df93ee 100644
--- a/Makefile.dep
+++ b/Makefile.dep
@@ -71,6 +71,7 @@ endif
 
 ifneq (,$(filter ng_pktdump,$(USEMODULE)))
   USEMODULE += ng_pktbuf
+  USEMODULE += od
 endif
 
 ifneq (,$(filter aodvv2,$(USEMODULE)))
diff --git a/sys/net/crosslayer/ng_pktdump/ng_pktdump.c b/sys/net/crosslayer/ng_pktdump/ng_pktdump.c
index 2e794ca178..e1f22acd89 100644
--- a/sys/net/crosslayer/ng_pktdump/ng_pktdump.c
+++ b/sys/net/crosslayer/ng_pktdump/ng_pktdump.c
@@ -25,6 +25,7 @@
 #include "kernel.h"
 #include "net/ng_pktdump.h"
 #include "net/ng_netbase.h"
+#include "od.h"
 
 /**
  * @brief   PID of the pktdump thread
@@ -36,45 +37,74 @@ static kernel_pid_t _pid = KERNEL_PID_UNDEF;
  */
 static char _stack[NG_PKTDUMP_STACKSIZE];
 
-static void _dump_type(ng_nettype_t type)
+#define ADDR_STR_MAX    (24)
+
+#ifdef MODULE_NG_NETIF
+static void _dump_netif_hdr(ng_netif_hdr_t *hdr)
+{
+    char addr_str[ADDR_STR_MAX];
+
+    printf("if_pid: %" PRIkernel_pid "  ", hdr->if_pid);
+    printf("rssi: %" PRIu8 "  ", hdr->rssi);
+    printf("lqi: %" PRIu8 "\n", hdr->lqi);
+    printf("src_l2addr: %s\n",
+           ng_netif_addr_to_str(addr_str, sizeof(addr_str),
+                                ng_netif_hdr_get_src_addr(hdr),
+                                (size_t)hdr->src_l2addr_len));
+    printf("dst_l2addr: %s\n",
+           ng_netif_addr_to_str(addr_str, sizeof(addr_str),
+                                ng_netif_hdr_get_dst_addr(hdr),
+                                (size_t)hdr->dst_l2addr_len));
+}
+#endif
+
+static void _dump_snip(ng_pktsnip_t *pkt)
 {
-    switch (type) {
+    switch (pkt->type) {
         case NG_NETTYPE_UNDEF:
-            printf("NETTYPE_UNDEF (%i)", type);
+            printf("NETTYPE_UNDEF (%i)\n", pkt->type);
+            od_hex_dump(pkt->data, pkt->size, OD_WIDTH_DEFAULT);
             break;
-
+#ifdef MODULE_NG_NETIF
+        case NG_NETTYPE_NETIF:
+            printf("NETTYPE_NETIF (%i)\n", pkt->type);
+            _dump_netif_hdr(pkt->data);
+            break;
+#endif
 #ifdef MODULE_NG_SIXLOWPAN
         case NG_NETTYPE_SIXLOWPAN:
-            printf("NETTYPE_SIXLOPAN (%i)", type);
+            printf("NETTYPE_SIXLOWPAN (%i)", pkt->type);
             break;
 #endif
 #ifdef MODULE_NG_IPV6
         case NG_NETTYPE_IPV6:
-            printf("NETTYPE_IPV6 (%i)", type);
+            printf("NETTYPE_IPV6 (%i)", pkt->type);
             break;
 #endif
 #ifdef MODULE_NG_ICMPV6
         case NG_NETTYPE_ICMPV6:
-            printf("NETTYPE_ICMPV6 (%i)", type);
+            printf("NETTYPE_ICMPV6 (%i)", pkt->type);
             break;
 #endif
 #ifdef MODULE_NG_TCP
         case NG_NETTYPE_TCP:
-            printf("NETTYPE_TCP (%i)", type);
+            printf("NETTYPE_TCP (%i)", pkt->type);
             break;
 #endif
 #ifdef MODULE_NG_UDP
         case NG_NETTYPE_UDP:
-            printf("NETTYPE_UDP (%i)", type);
+            printf("NETTYPE_UDP (%i)", pkt->type);
             break;
 #endif
 #ifdef TEST_SUITES
         case NG_NETTYPE_TEST:
-            printf("NETTYPE_TEST (%i)", type);
+            printf("NETTYPE_TEST (%i)", pkt->type);
+            od_hex_dump(pkt->data, pkt->size, OD_WIDTH_DEFAULT);
             break;
 #endif
         default:
-            printf("NETTYPE_UNKNOWN (%i)", type);
+            printf("NETTYPE_UNKNOWN (%i)", pkt->type);
+            od_hex_dump(pkt->data, pkt->size, OD_WIDTH_DEFAULT);
             break;
     }
 }
@@ -87,12 +117,12 @@ static void _dump(ng_pktsnip_t *pkt)
 
     while (snip != NULL) {
         printf("~~ SNIP %2i - size: %3i byte, type: ", snips, snip->size);
-        _dump_type(snip->type);
-        puts("");
+        _dump_snip(snip);
         ++snips;
         size += snip->size;
         snip = snip->next;
     }
+
     printf("~~ PKT    - %2i snips, total size: %3i byte\n", snips, size);
     ng_pktbuf_release(pkt);
 }
-- 
GitLab