-
Notifications
You must be signed in to change notification settings - Fork 2k
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
gnrc_sixlowpan_frag: initial import of Selective Fragment Recovery #12648
gnrc_sixlowpan_frag: initial import of Selective Fragment Recovery #12648
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
endif There 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_networking
with 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):