From e4ef748805b8a644707f25df310f109644b0c5b9 Mon Sep 17 00:00:00 2001 From: Oleg Hahm Date: Tue, 5 Apr 2016 01:46:00 +0200 Subject: [PATCH 1/3] gnrc ipv6: append empty netif hdr for loopback --- sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c b/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c index 68c1b12126b6..dec742e4b0a1 100644 --- a/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c +++ b/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c @@ -737,6 +737,16 @@ static void _send(gnrc_pktsnip_t *pkt, bool prep_hdr) gnrc_pktbuf_release(pkt); DEBUG("ipv6: packet is addressed to myself => loopback\n"); + ptr = gnrc_netif_hdr_build(NULL, 0, NULL, 0); + + if (ptr == NULL) { + DEBUG("ipv6: error on interface header allocation, dropping packet\n"); + gnrc_pktbuf_release(rcv_pkt); + return; + } + + /* add netif to front of the pkt list */ + rcv_pkt->next = ptr; if (gnrc_netapi_receive(gnrc_ipv6_pid, rcv_pkt) < 1) { DEBUG("ipv6: unable to deliver packet\n"); From 6b6db033c0cbec1c21b1173fb82511acbddef942 Mon Sep 17 00:00:00 2001 From: Oleg Hahm Date: Sat, 14 Jan 2017 15:09:52 +0100 Subject: [PATCH 2/3] gnrc: introduce loopback interface identifier --- sys/include/net/gnrc/netif.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sys/include/net/gnrc/netif.h b/sys/include/net/gnrc/netif.h index 176b63170e54..aa9d97f87d8d 100644 --- a/sys/include/net/gnrc/netif.h +++ b/sys/include/net/gnrc/netif.h @@ -40,6 +40,11 @@ extern "C" { #define GNRC_NETIF_NUMOF (1) #endif +/** + * @brief Identifier of the loopback interface + */ +#define GNRC_NETIF_LOOPBACK_PID (-1) + /** * @brief The add/remove operation to set network layer protocol * specific options for an interface. From b7896804fb5887275ae6bfa1a33e8e03aafcb668 Mon Sep 17 00:00:00 2001 From: Oleg Hahm Date: Sat, 14 Jan 2017 15:10:11 +0100 Subject: [PATCH 3/3] gnrc ipv6: set proper netif PID for loopback --- sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c b/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c index dec742e4b0a1..6c1b759fe0bc 100644 --- a/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c +++ b/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c @@ -745,6 +745,9 @@ static void _send(gnrc_pktsnip_t *pkt, bool prep_hdr) return; } + gnrc_netif_hdr_t *netif_hdr = (gnrc_netif_hdr_t*) ptr; + netif_hdr->if_pid = GNRC_NETIF_LOOPBACK_PID; + /* add netif to front of the pkt list */ rcv_pkt->next = ptr;