From c7ebcbbda2f83a8a8f4677a61a08d61e0a9f668c Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Tue, 17 Nov 2015 10:27:35 +0100 Subject: [PATCH] gnrc_ipv6: get l2addr from NC if no ND present --- sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c b/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c index 4297cfdd40..5279016474 100644 --- a/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c +++ b/sys/net/gnrc/network_layer/ipv6/gnrc_ipv6.c @@ -537,6 +537,15 @@ static inline kernel_pid_t _next_hop_l2addr(uint8_t *l2addr, uint8_t *l2addr_len #endif #if defined(MODULE_GNRC_NDP_NODE) found_iface = gnrc_ndp_node_next_hop_l2addr(l2addr, l2addr_len, iface, dst, pkt); +#elif !defined(MODULE_GNRC_SIXLOWPAN_ND) && defined(MODULE_GNRC_IPV6_NC) + (void)pkt; + gnrc_ipv6_nc_t *nc = gnrc_ipv6_nc_get(iface, dst); + if ((nc == NULL) || !gnrc_ipv6_nc_is_reachable(nc)) { + return KERNEL_PID_UNDEF; + } + found_iface = nc->iface; + *l2addr_len = nc->l2_addr_len; + memcpy(l2addr, nc->l2_addr, nc->l2_addr_len); #elif !defined(MODULE_GNRC_SIXLOWPAN_ND) found_iface = KERNEL_PID_UNDEF; (void)l2addr;