Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added RPL-lite, a lightweight implementation of RPL #29

Merged
merged 36 commits into from
Jun 30, 2017

Conversation

simonduq
Copy link
Member

Addresses #8

  • Re-design of the overall RPL architecture;
  • Removed support for storing mode, multi-dag, multi-instances;
  • Clear cut between packet parsing/framing and processing;
  • Clear cut between processing/state update and resulting control traffic;
  • Closer to RFC6550 when it comes to DIO timer and parent management;
  • All functions are documented with Doxygen;
  • New test for DAO-ACK;
  • And many other improvements...

This PR makes RPL-lite the new default. It can be configured out from makefile with CONTIKI_WITH_RPL_LITE=0

@simonduq
Copy link
Member Author

Does anybody have a clue how to fix this https://travis-ci.com/sics-iot/contiki/jobs/79744807
gpg: no ultimately trusted keys found

@simonduq
Copy link
Member Author

The problem is now gone, was a server-side thing I guess

@simonduq simonduq force-pushed the pr/rpl-lite branch 2 times, most recently from fb3570b to 74b41b3 Compare June 22, 2017 09:20
@simonduq
Copy link
Member Author

Addressed Niclas' issue: now using full include path (in core).
Rebased and added support for logging.

@nvt
Copy link
Member

nvt commented Jun 27, 2017

Niclas, are you reviewing this or should I?

@simonduq
Copy link
Member Author

please wait, there is more coming

@simonduq
Copy link
Member Author

The PR is now ready. As a side effect of making sure this is reliable in a real setup, I had to include a couple changes not directly related to RPL: mostly on the logging module, TSCH, and link-stats.

Some of the added features since last time:

  • Removed config flags that define network size and density, as suggested by @nfi
  • Added support for leaving a DAG after route poisoning
  • After joining, nodes will not select a parent immediately. Instead, they wait to have a parent that is fresh & acceptable
  • Nodes now start advertising their DAG and rank only after they have become reachable, i.e., in the DAO-ACK case (now default), only after receiving a positive DAO-ACK. In practice, nodes first hear a DIO and initialize their DAG from it, then they probe some neighbors and eventually select one, then send a DAO, and when getting a DAO-ACK start to advertise, in turn. Takes about 15-20s. This was discussed with @joakimeriksson
  • Added time-hysteresis to MRHOF, so that nodes now disregard the rank hysteresis for a candidate parent that has been a consistently better option over a given time span (10 minutes by default).

This is tested in the SICS internal testbed on 25 firefly nodes, with the ipv6/rpl-simple example, with bidirectional traffic between any node and the root. Works both on top of CSMA and TSCH. With TSCH, end-to-end reliability is not sampled with statistical significance yet but seems beyond 99.9%.

…ios where the number of neighbors exceeds the nbr-table size
Copy link
Member

@joakimeriksson joakimeriksson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see no problem merging this as it is not taking away support for the old-style Contiki RPL with storing mode (for anyone who still needs that).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants