gnrc_sixlowpan_frag: initial import of Selective Fragment Recovery#12648
gnrc_sixlowpan_frag: initial import of Selective Fragment Recovery#12648miri64 merged 10 commits intoRIOT-OS:masterfrom
Conversation
miri64
left a comment
There was a problem hiding this comment.
Some thoughts from my subway ride home ;-)
sys/net/gnrc/network_layer/sixlowpan/frag/sfr/gnrc_sixlowpan_frag_sfr.c
Outdated
Show resolved
Hide resolved
sys/net/gnrc/network_layer/sixlowpan/frag/sfr/gnrc_sixlowpan_frag_sfr.c
Outdated
Show resolved
Hide resolved
tests/unittests/tests-gnrc_sixlowpan_frag_vrb/tests-gnrc_sixlowpan_frag_vrb.c
Outdated
Show resolved
Hide resolved
2a2c932 to
7ad40d0
Compare
|
Rebased to current to include #12653 for |
b3a9f6c to
f51cb1b
Compare
f51cb1b to
28d050e
Compare
|
Ok, I now can ping with huge datagrams in "rapid" (200ms as this is the estimate RTT) intervals without any crashes or leaks between two nodes. I'm not 100% sure resending is working as it should be. Further testing will show this hopefully. Next: actual forwarding. |
28d050e to
09a69ef
Compare
|
Forwarding is now also working. There is still some weirdness happening with the ACKs and retries (I'm not sure if there is >1 retry made and the ACK timeout is restarted after it was fired even though the datagram is complete)... Will investigate this next week. |
09a69ef to
6ed6b68
Compare
At least this I found now. |
6ed6b68 to
33c432f
Compare
|
Rebased to current master |
9d231d8 to
9c7ecd3
Compare
|
Rebased to current master and dependencies. |
ef62df9 to
b5644b9
Compare
|
Added first round of tests. |
|
I have full test coverage now (at least as far as I can judge without a coverage tester right now 😅). On |
And done. It was in the end as I suspected a timing issue with the ARQ timeout. |
IIRC there is no netdev-related dependency stuff happening in this PR. So this must be some weird side effect of unexpected netdev dependencies then ;-). |
|
Mhhh the Murdock errors seem to be something related to |
a051c28 to
6c5fbde
Compare
|
Fixed static tests and squashed fixes in the meantime. |
6c5fbde to
542f3a1
Compare
|
The problem with |
542f3a1 to
60de138
Compare
|
The issue is that the ztimer-only boards cannot function with plain ifneq (,$(filter xtimer,$(USEMODULE)))
USEMODULE += xtimer_on_ztimer
endifThere is a compile time check via preprocessor that gets run when including So the include to |
So the conclusion is: if |
60de138 to
15716a5
Compare
|
And some more bugs found by the compile tests fixed and squashed. |
|
Did some testing (only single hop) and fragmentation works between two 6lo nodes with SFR enabled. Two nodes with 'classic' fragmentation can still communicate as before. |
Will add a note. |
|
Done. |
15716a5 to
e980405
Compare
|
🎉 Thanks for the review and your input @benpicco |
Contribution description
This provides an implementation for 6LoWPAN Selective Fragment Recovery (SFR), an alternative fragmentation protocol for 6LoWPAN, which allows for end-to-end recovery and congestion control (currently not implemented) for fragmented IPv6 datagrams.
Testing procedure
There is still a lot of more in-depth testing required including a dedicated test application (this is why is it still WIP), but you can compile
examples/gnrc_networkingwith SFR already for a 6LoWPAN-capable board:and then ping another node also shipping with
gnrc_sixlowpan_frag_sfr:[edit]: after posting this PR, I noticed, that there is a leak in the packet buffer after this... All the more reason why this is still WIP[/edit]There are also tests that should pass on a board of your choice:
Issues/PRs references
Requires
#12220(merged),#12559(merged),#12629,#12845, and#12848(merged):