diff --git a/Makefile.dep b/Makefile.dep index 5ddbbb837f85d8a952da2380cf6a60d0de9e5c71..e8732e8e13c281c57e46304c4627ea97f394d2c9 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 7245192bf7e2b646ba460004f1ee07aa83de7c14..75102da22901f9496c001986ea06323099b6edad 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 19342af92acc4adb012ba75bf972707307419275..76cb52ba479cf606376505d13b60c2b9c4a7b90a 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 251ea167ef0a1d018a19ff095f0f89ec8cab4a85..bf20e197b70579caa4b989510bbf320d094c5242 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 0000000000000000000000000000000000000000..48422e909a47d7cd428d10fa73825060ccc8d8c2 --- /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 0000000000000000000000000000000000000000..867e42fb8ea97531adbbcb1b381f3fe524ed807a --- /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)); +} +/** @} */