smoltcp
smoltcp copied to clipboard
RPL with all modes of operation
This adds the Routing Protocol for Low-power and lossy networks (RPL) protocol, as defined in RFC6550. I tried making this smaller, but it quickly became difficult to keep track of everything, as most features are used for the different modes of operation in RPL. I will try to move changes less related to RPL, but that were required for RPL to work, into different PRs.
At the moment, the following should be working (but still in experimental phase):
- Mode of operation 0: a network is build using only ICMP RPL DIS and DIO messages. If a node needs to transmit something, it always goes to its preferred parent. Thus, messages always go up the tree.
- Mode of operation 1: a network is build using ICMP RPL DIS, DIO, DAO and DAO-ACK messages. However, only the root node knows about the structure of the tree. Messages first are routed to the root. The root then inserts a source routing header to reach the destination.
- Mode of operation 2: the network is build like MOP1, however, each node in the network knows about its subtree. A message is routed via a common ancestor in the tree.
- Mode of operation 3: the network is build like MOP2, but multicast support is added.
The RPL option in the Hop-by-Hop header is used for detecting inconsistencies in the tree. The option contains information about the direction of the data message (where data is a term used in the standard but is ill-defined).
There are still things missing in the implementation, such as handling some options. Examples are prefix information option. There is also room for optimization. An example is the source routing header, where parts of the prefix can just be elided. This is something we don't do yet.
To test the implementation, we added integration tests. These integration tests simulate some networks. The tests then check for expected behaviours.
Codecov Report
Attention: Patch coverage is 76.56530%
with 917 lines
in your changes are missing coverage. Please review.
Project coverage is 80.28%. Comparing base (
4c27918
) to head (ad6431c
).
:exclamation: Current head ad6431c differs from pull request most recent head 8438f9e. Consider uploading reports for the commit 8438f9e to get more accurate results
Additional details and impacted files
@@ Coverage Diff @@
## main #869 +/- ##
==========================================
+ Coverage 79.96% 80.28% +0.32%
==========================================
Files 82 87 +5
Lines 28378 30130 +1752
==========================================
+ Hits 22693 24191 +1498
- Misses 5685 5939 +254
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.