Skip to content

Conversation

@elenaf9
Copy link
Contributor

@elenaf9 elenaf9 commented Oct 23, 2025

Contribution description

Add the option to create a temporary floating DODAG if the parent set of a node becomes empty and a local repair is started. This allows to maintain connectivity within the sub-tree, even if the uplink is temporarily gone (e.g., because a BLE connection broke). See RFC6550#Section18.2.4.

With #21759 merged, we now support switching between DODAGs. So as soon as the parent node (or any other node in the subtree) receives a DIO again from the original, grounded (i.e., non-floating) DODAG, it will switch back to that one. Children will furthermore not join the new floating DODAG in the first place, if they are still connected to the grounded DODAG through another parent.

A floating DODAG has a configurable timeout after which the DODAG will be cleaned up. If the timeout is set to 0, then the old logic for gnrc_rpl_local_repair is retained. It just immediately poisons all routes (causing the local node to be cleared from the children's parent set) and cleans up the DODAG.

Testing procedure

Can be tested with min. 3 nodes and the gnrc_networking example with a BLE capable board.
Set CONFIG_GNRC_RPL_DEFAULT_LIFETIME=1 (=1min). Until #21608 is merged, we can only detect a lost parent through a timeout mechanism.

  • Start 3 nodes N{0..1} and connect them in a line
  • Init N0 as RPL root for 2001:db8::1 => N1 and N2 will join the DODAG
  • Disconnect N0 and N1. After the 1min timeout, N1 will set itself to be the root of a new floating DODAG. The DODAG ID is the public IP of N1.
    • => N2 will join the new floating DODAG
    • => N1 and N2 can still ping each other
  • Connect N1 or N2 again to N0 and call rpl send dis
    • => both nodes will switch back to the original DODAG of N0

Issues/PRs references

Part of #21574.

@elenaf9 elenaf9 requested a review from miri64 as a code owner October 23, 2025 08:48
@github-actions github-actions bot added Area: network Area: Networking Area: sys Area: System labels Oct 23, 2025
@crasbe crasbe added Type: new feature The issue requests / The PR implemements a new feature for RIOT CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR labels Oct 23, 2025
@riot-ci
Copy link

riot-ci commented Oct 23, 2025

Murdock results

✔️ PASSED

a96e5e7 gnrc/rpl: float DODAG during local repair

Success Failures Total Runtime
10551 0 10552 10m:49s

Artifacts

@elenaf9 elenaf9 force-pushed the gnrc/rpl/float-during-repair branch from 30dd4b8 to a96e5e7 Compare October 24, 2025 06:49
@elenaf9
Copy link
Contributor Author

elenaf9 commented Oct 24, 2025

I had to rebase to include the CI fix #21819.

If the parent set of a router is empty and a local repair initiated, don't immediately poison all routes. Instead configure node as root of a new floating DODAG to maintain connectivity in the sub-tree.
Once a different, grounded DODAG is found the node will join the new DODAG.
If no other DODAG is found the floating DODAG will timeout after `CONFIG_GNRC_RPL_DODAG_FLOAT_TIMEOUT` and cleaned up..
@benpicco benpicco requested a review from mcr October 27, 2025 12:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area: network Area: Networking Area: sys Area: System CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR Type: new feature The issue requests / The PR implemements a new feature for RIOT

3 participants