Closed jnohlgard closed 5 years ago
RPL is not really my forte :-)
Once rpl is initialized it sends out a DIS to probe for a DAG in its neighborhood. The DAG of the other node is still alive and emits DIOs.
I could propose two solutions for that 1) parameterize rpl_init, so that you can specify if a probing (DIS) should be done or not. You still have a decreased chance that you join a DAG if a DIO is emitted after you initialize and before you create the root, however. 2) also initialize rpl (if not done before) when calling rpl_root, this way the root node must not call rpl_init before rpl_root and hence there is no time in between to join the defunct DAG.
edited
@cgundogan What is the proper procedure for recovering from the root node of an RPL DODAG losing its state? Increment DODAG version and let all nodes re-join the tree?
There is no proper procedure that I know of. If the root node loses its state, then how should it know from which version it should start? If the root node just creates a new DAG with the same instance id and dodag id, but a lower version number, then I have no idea how a node that is in a DAG with the same instance id and DODAG id but a higher version should react. Probably will they ignore the new DODAG until the DAG fades away due to timeouts. I will have to look into the RFC, it's an interesting use case.
@BytesGalore do you have any clues?
Basically the situation described is "just" a local inconsistency, independent if its the root-node or any other node. Just a guess, I think the node should reply a unicast DIO with the current DODAG version when receiving a outdated version from the root node. In turn the root can adjust its version. (BTW, you can test this situation with the attacker #4831 just rising the DODAG version of a root child-node)
(BTW, you can test this situation with the attacker #4831 just rising the DODAG version of a root child-node)
what's a root child-node? (:
I mean a node just below the root, using the root node as parent.
Maybe it makes sense to discuss this on the mailing list to allow a broader audience to participate?
I did not said it explicitly before so: The root-node do a global repair when receiving a DIO with a higher DODAG version then its own. As result, the root-node will not join the outdated advertized DODAG as router and not add/overwrite its default-route entry with an entry to the advertized DODAG-root (itself).
@BytesGalore That's good to hear. As a workaround, I have modified my border router application to do rpl init immediately followed by rpl root 0 (myip) and it seems to work across reboots.
Can someone dump this result to the mailing list too?
Sorry 'bout the project back-and-forth.... Thought I accidentally moved it to "In Progress" there in connection to #7925.
@gebart is #8173 a remedy for this issue? Can it be closed?
@cgundogan it looks like #8173 could be a fix for this, I have not had time to test.
@gebart do you think this issue can be closed?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. If you want me to ignore this issue, please mark it with the "State: don't stale" label. Thank you for your contributions.
@gebart do you think this issue can be closed?
I take this as a yes... Reopen if you disagree
Scenario: RPL network with two nodes, one root with the border router example with ethos and another as a normal single interface RPL router (gnrc_networking or microcoap_server). Border router reboots while other RPL routers are still alive -> BR routing messed up
PC address: 2001:16d8:ff00:645::2 BR address (wireless): 2001:16d8:ff00:8645:1016:4e54:8bab:4012 other node address: 2001:16d8:ff00:8645:1016:4e54:8af1:4012
The border router was started first, configured for ethos, then the following commands to set up radio and RPL on the BR:
Then I booted the wireless node and configured it similarly:
After this, everything works, even IPv6 internet connectivity. I ran
ping6 2600::
on the wireless node and it receives the replies correctly.I then rebooted the BR node and did the same initialization commands above, however, I noticed that it joined the DODAG right after
rpl init
before therpl root
command. Now it is no longer working and the BR is trying to route packets via itself over the air, soping6 2600::
from the BR results in the below packet:After the issue appears the fibroute command shows that the default route via the ethos interface was deleted (by joining the RPL DAG as a router?)
running
fibroute add :: via fe80::1 dev 7
makes routing work on the BR again and I can yet again communicate between the PC and the 6lowpan network.