From 41c647b1c997d5c05c6b449c20e50e1b0b76df5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=20Lepp=C3=A4nen?= Date: Thu, 3 Aug 2017 15:08:15 +0300 Subject: [PATCH] Added hex dump tracing to ipv6, ipv4 and ppp modules --- .../lwip-interface/lwip-sys/arch/cc.h | 7 +++++++ .../lwip-sys/arch/lwip_sys_arch.c | 19 +++++++++++++++++++ .../lwip/src/core/ipv4/lwip_ip4.c | 2 ++ .../lwip/src/core/ipv6/lwip_ip6.c | 2 ++ .../lwip/src/netif/ppp/lwip_utils.c | 1 + 5 files changed, 31 insertions(+) diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-sys/arch/cc.h b/features/FEATURE_LWIP/lwip-interface/lwip-sys/arch/cc.h index d92f47f639..48c64c63f1 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip-sys/arch/cc.h +++ b/features/FEATURE_LWIP/lwip-interface/lwip-sys/arch/cc.h @@ -117,6 +117,13 @@ void assert_printf(char *msg, int line, char *file); #endif // MBED_CONF_LWIP_USE_MBED_TRACE #endif +#if TRACE_TO_ASCII_HEX_DUMP +#define TRACE_TO_ASCII_HEX_DUMPF(prefix, len, data) trace_to_ascii_hex_dump(prefix, len, data) +void trace_to_ascii_hex_dump(char* prefix, int len, char *data); +#else +#define TRACE_TO_ASCII_HEX_DUMPF(prefix, len, data) ((void)0) +#endif + #include "cmsis.h" #define LWIP_PLATFORM_HTONS(x) __REV16(x) #define LWIP_PLATFORM_HTONL(x) __REV(x) diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-sys/arch/lwip_sys_arch.c b/features/FEATURE_LWIP/lwip-interface/lwip-sys/arch/lwip_sys_arch.c index 5d2590862f..5df148b5f0 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip-sys/arch/lwip_sys_arch.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip-sys/arch/lwip_sys_arch.c @@ -590,4 +590,23 @@ void assert_printf(char *msg, int line, char *file) { } #endif // MBED_CONF_LWIP_USE_MBED_TRACE +#if TRACE_TO_ASCII_HEX_DUMP +void trace_to_ascii_hex_dump(char *prefix, int len, char *data) +{ + int line_len = 0; + + for (int i = 0; i < len; i++) { + if ((line_len % 16) == 0) { + if (line_len != 0) { + LWIP_PLATFORM_DIAG(("\n")); + } + LWIP_PLATFORM_DIAG(("%s %06x", prefix, line_len)); + } + line_len++; + LWIP_PLATFORM_DIAG((" %02x", data[i])); + } + LWIP_PLATFORM_DIAG(("\n")); +} +#endif + #endif /* LWIP_DEBUG */ diff --git a/features/FEATURE_LWIP/lwip-interface/lwip/src/core/ipv4/lwip_ip4.c b/features/FEATURE_LWIP/lwip-interface/lwip/src/core/ipv4/lwip_ip4.c index 4e4eb61146..6a14ee89fd 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip/src/core/ipv4/lwip_ip4.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip/src/core/ipv4/lwip_ip4.c @@ -1048,6 +1048,8 @@ ip4_debug_print(struct pbuf *p) { struct ip_hdr *iphdr = (struct ip_hdr *)p->payload; + TRACE_TO_ASCII_HEX_DUMPF("IP>", lwip_ntohs(IPH_LEN(iphdr)), (char *) iphdr); + LWIP_DEBUGF(IP_DEBUG, ("IP header:\n")); LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); LWIP_DEBUGF(IP_DEBUG, ("|%2"S16_F" |%2"S16_F" | 0x%02"X16_F" | %5"U16_F" | (v, hl, tos, len)\n", diff --git a/features/FEATURE_LWIP/lwip-interface/lwip/src/core/ipv6/lwip_ip6.c b/features/FEATURE_LWIP/lwip-interface/lwip/src/core/ipv6/lwip_ip6.c index b8cee1e067..8a25a48f0e 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip/src/core/ipv6/lwip_ip6.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip/src/core/ipv6/lwip_ip6.c @@ -1101,6 +1101,8 @@ ip6_debug_print(struct pbuf *p) { struct ip6_hdr *ip6hdr = (struct ip6_hdr *)p->payload; + TRACE_TO_ASCII_HEX_DUMPF("IP>", IP6H_PLEN(ip6hdr) + 40, (char *) ip6hdr); + LWIP_DEBUGF(IP6_DEBUG, ("IPv6 header:\n")); LWIP_DEBUGF(IP6_DEBUG, ("+-------------------------------+\n")); LWIP_DEBUGF(IP6_DEBUG, ("| %2"U16_F" | %3"U16_F" | %7"U32_F" | (ver, class, flow)\n", diff --git a/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_utils.c b/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_utils.c index d4feebb90b..bfce97e691 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_utils.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_utils.c @@ -727,6 +727,7 @@ void ppp_dump_packet(ppp_pcb *pcb, const char *tag, unsigned char *p, int len) { return; } + TRACE_TO_ASCII_HEX_DUMPF("PPP>", len, (char *) p); ppp_dbglog("%s %P", tag, p, len); } #endif /* PRINTPKT_SUPPORT */