void gnrc_ndp_router_set_router(gnrc_ipv6_netif_t *iface, bool enable) { if (enable && !(iface->flags & GNRC_IPV6_NETIF_FLAGS_ROUTER)) { gnrc_ipv6_netif_add_addr(iface->pid, &ipv6_addr_all_routers_link_local, 128, GNRC_IPV6_NETIF_ADDR_FLAGS_NON_UNICAST); mutex_lock(&iface->mutex); iface->flags |= GNRC_IPV6_NETIF_FLAGS_ROUTER; iface->max_adv_int = GNRC_IPV6_NETIF_DEFAULT_MAX_ADV_INT; iface->min_adv_int = GNRC_IPV6_NETIF_DEFAULT_MIN_ADV_INT; iface->adv_ltime = GNRC_IPV6_NETIF_DEFAULT_ROUTER_LTIME; mutex_unlock(&iface->mutex); gnrc_ndp_router_set_rtr_adv(iface, enable); } else if (!enable && (iface->flags & GNRC_IPV6_NETIF_FLAGS_ROUTER)) { gnrc_ipv6_netif_remove_addr(iface->pid, (ipv6_addr_t *)&ipv6_addr_all_routers_link_local); gnrc_ndp_router_set_rtr_adv(iface, enable); } }
void gnrc_ipv6_netif_set_rtr_adv(gnrc_ipv6_netif_t *netif, bool enable) { #if defined(MODULE_GNRC_SIXLOWPAN_ND_ROUTER) if (netif->flags & GNRC_IPV6_NETIF_FLAGS_SIXLOWPAN) { gnrc_sixlowpan_nd_router_set_rtr_adv(netif, enable); return; } #endif gnrc_ndp_router_set_rtr_adv(netif, enable); }