diff --git a/Makefile.dep b/Makefile.dep index 03b1dfa7dc..6b2b14daa2 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -73,7 +73,7 @@ ifneq (,$(filter gnrc_sixlowpan_border_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))) 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; 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 30fc643ad7..cc1c294fc7 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 @@ -244,13 +244,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) @@ -261,7 +263,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 @@ -789,6 +793,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,