Merge pull request #5141 from cgundogan/pr/gnrc_rpl/remove_parent_create_new_fib_entry
gnrc_rpl: new default route when old one was deleted
This commit is contained in:
commit
c0a8ce39ac
@ -192,12 +192,30 @@ bool gnrc_rpl_parent_add_by_addr(gnrc_rpl_dodag_t *dodag, ipv6_addr_t *addr,
|
|||||||
|
|
||||||
bool gnrc_rpl_parent_remove(gnrc_rpl_parent_t *parent)
|
bool gnrc_rpl_parent_remove(gnrc_rpl_parent_t *parent)
|
||||||
{
|
{
|
||||||
if (parent == parent->dodag->parents) {
|
assert(parent != NULL);
|
||||||
|
|
||||||
|
gnrc_rpl_dodag_t *dodag = parent->dodag;
|
||||||
|
|
||||||
|
if (parent == dodag->parents) {
|
||||||
fib_remove_entry(&gnrc_ipv6_fib_table,
|
fib_remove_entry(&gnrc_ipv6_fib_table,
|
||||||
(uint8_t *) ipv6_addr_unspecified.u8,
|
(uint8_t *) ipv6_addr_unspecified.u8,
|
||||||
sizeof(ipv6_addr_t));
|
sizeof(ipv6_addr_t));
|
||||||
|
|
||||||
|
/* set the default route to the next parent for now */
|
||||||
|
if (parent->next) {
|
||||||
|
uint32_t now = xtimer_now() / SEC_IN_USEC;
|
||||||
|
fib_add_entry(&gnrc_ipv6_fib_table,
|
||||||
|
dodag->iface,
|
||||||
|
(uint8_t *) ipv6_addr_unspecified.u8,
|
||||||
|
sizeof(ipv6_addr_t),
|
||||||
|
FIB_FLAG_NET_PREFIX,
|
||||||
|
parent->next->addr.u8,
|
||||||
|
sizeof(ipv6_addr_t),
|
||||||
|
FIB_FLAG_RPL_ROUTE,
|
||||||
|
(parent->next->lifetime - now) * SEC_IN_MS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
LL_DELETE(parent->dodag->parents, parent);
|
LL_DELETE(dodag->parents, parent);
|
||||||
memset(parent, 0, sizeof(gnrc_rpl_parent_t));
|
memset(parent, 0, sizeof(gnrc_rpl_parent_t));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user