From 2a14488f4226098a8a6a47abcff18f1847a74556 Mon Sep 17 00:00:00 2001 From: Oleg Hahm Date: Thu, 10 Sep 2015 19:38:01 +0200 Subject: [PATCH 1/3] make: missing 6lowpan_nd_router dependency --- Makefile.dep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.dep b/Makefile.dep index 303b888587..f5bd2692f0 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -65,7 +65,7 @@ ifneq (,$(filter gnrc_sixlowpan_router_default,$(USEMODULE))) endif ifneq (,$(filter gnrc_sixlowpan_router,$(USEMODULE))) - USEMODULE += gnrc_sixlowpan + USEMODULE += gnrc_sixlowpan_nd_router endif ifneq (,$(filter gnrc_sixlowpan_frag,$(USEMODULE))) From e064985c1be6d8a9cf77f245925eee7637a1ad0b Mon Sep 17 00:00:00 2001 From: Oleg Hahm Date: Thu, 10 Sep 2015 19:38:38 +0200 Subject: [PATCH 2/3] gnrc ipv6 netif: missing flags for 6lowpan router --- sys/include/net/gnrc/ipv6/netif.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/include/net/gnrc/ipv6/netif.h b/sys/include/net/gnrc/ipv6/netif.h index 4027bb6ebe..404cbfd916 100644 --- a/sys/include/net/gnrc/ipv6/netif.h +++ b/sys/include/net/gnrc/ipv6/netif.h @@ -304,6 +304,8 @@ typedef struct { */ uint16_t min_adv_int; +#endif +#if defined (MODULE_GNRC_NDP_ROUTER) || defined (MODULE_GNRC_SIXLOWPAN_ND_ROUTER) /** * @brief The router lifetime to propagate in router advertisements. * Must be either 0 or between ng_ipv6_netif_t::max_adv_int and @@ -336,7 +338,7 @@ typedef struct { */ timex_t retrans_timer; vtimer_t rtr_sol_timer; /**< Timer for periodic router solicitations */ -#ifdef MODULE_GNRC_NDP_ROUTER +#if defined (MODULE_GNRC_NDP_ROUTER) || defined (MODULE_GNRC_SIXLOWPAN_ND_ROUTER) vtimer_t rtr_adv_timer; /**< Timer for periodic router advertisements */ #endif } gnrc_ipv6_netif_t; From a182977161587167de755491727b1b3fa99f48ce Mon Sep 17 00:00:00 2001 From: Oleg Hahm Date: Thu, 10 Sep 2015 19:39:06 +0200 Subject: [PATCH 3/3] gnrc ipv6: 6lowpan router needs sol. node address --- .../network_layer/ipv6/netif/gnrc_ipv6_netif.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/sys/net/gnrc/network_layer/ipv6/netif/gnrc_ipv6_netif.c b/sys/net/gnrc/network_layer/ipv6/netif/gnrc_ipv6_netif.c index cc8b967f06..8ee6eeefdb 100644 --- a/sys/net/gnrc/network_layer/ipv6/netif/gnrc_ipv6_netif.c +++ b/sys/net/gnrc/network_layer/ipv6/netif/gnrc_ipv6_netif.c @@ -238,13 +238,15 @@ gnrc_ipv6_netif_t *gnrc_ipv6_netif_get(kernel_pid_t pid) #if defined(MODULE_GNRC_NDP_ROUTER) || defined(MODULE_GNRC_SIXLOWPAN_ND_ROUTER) void gnrc_ipv6_netif_set_router(gnrc_ipv6_netif_t *netif, bool enable) { -#if defined(MODULE_GNRC_SIXLOWPAN_ND_ROUTER) +#ifdef MODULE_GNRC_SIXLOWPAN_ND_ROUTER if (netif->flags & GNRC_IPV6_NETIF_FLAGS_SIXLOWPAN) { gnrc_sixlowpan_nd_router_set_router(netif, enable); return; } #endif +#ifdef MODULE_GNRC_NDP_ROUTER gnrc_ndp_router_set_router(netif, enable); +#endif } void gnrc_ipv6_netif_set_rtr_adv(gnrc_ipv6_netif_t *netif, bool enable) @@ -255,7 +257,9 @@ void gnrc_ipv6_netif_set_rtr_adv(gnrc_ipv6_netif_t *netif, bool enable) return; } #endif +#ifdef MODULE_GNRC_NDP_ROUTER gnrc_ndp_router_set_rtr_adv(netif, enable); +#endif } #endif @@ -776,6 +780,16 @@ void gnrc_ipv6_netif_init_by_dev(void) DEBUG("ipv6 netif: Set 6LoWPAN flag\n"); ipv6_ifs[i].flags |= GNRC_IPV6_NETIF_FLAGS_SIXLOWPAN; + + /* the router flag must be set early here, because otherwise + * _add_addr_to_entry() wouldn't set the solicited node address. + * However, addresses have to be configured before calling + * gnrc_ipv6_netif_set_router(). + */ +#ifdef MODULE_GNRC_SIXLOWPAN_ND_ROUTER + DEBUG("ipv6 netif: Set router flag\n"); + ipv6_ifs[i].flags |= GNRC_IPV6_NETIF_FLAGS_ROUTER; +#endif /* use EUI-64 (8-byte address) for IID generation and for sending * packets */ gnrc_netapi_set(ifs[i], NETOPT_SRC_LEN, 0, &src_len,