diff --git a/sys/net/gnrc/routing/ipv6_auto_subnets/gnrc_ipv6_auto_subnets.c b/sys/net/gnrc/routing/ipv6_auto_subnets/gnrc_ipv6_auto_subnets.c index f94fd41d09..53dac0f0cb 100644 --- a/sys/net/gnrc/routing/ipv6_auto_subnets/gnrc_ipv6_auto_subnets.c +++ b/sys/net/gnrc/routing/ipv6_auto_subnets/gnrc_ipv6_auto_subnets.c @@ -70,6 +70,7 @@ #include "net/gnrc/udp.h" #include "net/gnrc/ipv6/nib.h" #include "net/gnrc/ndp.h" +#include "net/gnrc/rpl.h" #include "random.h" #include "xtimer.h" @@ -286,6 +287,7 @@ static void _configure_subnets(uint8_t subnets, uint8_t start_idx, gnrc_netif_t while ((downstream = gnrc_netif_iter(downstream))) { gnrc_pktsnip_t *tmp; ipv6_addr_t new_prefix; + int idx; if (downstream == upstream) { continue; @@ -302,8 +304,8 @@ static void _configure_subnets(uint8_t subnets, uint8_t start_idx, gnrc_netif_t _remove_old_prefix(downstream, &new_prefix, new_prefix_len, &ext_opts); /* configure subnet on downstream interface */ - gnrc_netif_ipv6_add_prefix(downstream, &new_prefix, new_prefix_len, - valid_ltime, pref_ltime); + idx = gnrc_netif_ipv6_add_prefix(downstream, &new_prefix, new_prefix_len, + valid_ltime, pref_ltime); /* start advertising subnet */ gnrc_ipv6_nib_change_rtr_adv_iface(downstream, true); @@ -316,6 +318,11 @@ static void _configure_subnets(uint8_t subnets, uint8_t start_idx, gnrc_netif_t } else { ext_opts = tmp; } + + /* configure RPL root if applicable */ + if (idx >= 0) { + gnrc_rpl_configure_root(downstream, &downstream->ipv6.addrs[idx]); + } } /* immediately send an RA with RIO */