RIOT
RIOT copied to clipboard
gnrc_sixlowpan_frag_sfr: provide CongURE support
Contribution description
This provides CongURE support for GNRC's 6LoWPAN SFR implementation and thus a to hook any CongURE congestion control implementation into SFR. The latter will be done in several follow-up PRs, this PR only adds the calling of the functions and tests to if the CongURE state machine is sane.
Testing procedure
Tests are provided in tests/gnrc_sixlowpan_frag_sfr_congure
. They should pass
BOARD="<your choice>" make -C tests/gnrc_sixlowpan_frag_sfr_congure -j flash test
They are based mostly on tests/gnrc_sixlowpan_frag_sfr
with some cleanup (and tests that do not check sending behavior removed) and additional checks for CongURE. I tried to provide reasoning for the checks in the comments. Please read them carefully.
Issues/PRs references
Depends on #16119 and #16133 and their respective dependencies.
Rebased and squashed to current master. This PR does not have any dependencies anymore.
Rebased again.
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.
@miri64, do you have any clue who could have time and knowledge to review this? If not, I can try to find some time, but I won't promise anything.
@miri64, do you have any clue who could have time and knowledge to review this? If not, I can try to find some time, but I won't promise anything.
@MrKevinWeiss did most of the initial review on CongURE (when it was mostly about testing it), however he stated already, that he does not feel comfortable reviewing all the actual congestion control stuff. So if you would find some time, it would be great!
OlegHahm added the Waiting for maintainer label 41 minutes ago
OT: Can we put that tag in the Process:
category?
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.
gnrc_sixlowpan_frag_sfr
currently uses no congestion control
Yes, at the moment SFR does not have any congestion control.
gnrc_sixlowpan_frag_sfr_congure
enables congestion control for SFRBut how does the actual type of congestion control (
congure_quic
,congure_reno
) come into play here? Will this module do anything on it's own already?
No, the gnrc_sixlowpan_frag_sfr_congure
module just enables the usage of the CongURE framework by SFR. At the moment in this PR, only the congure
mock backend is used within the provided test. The congestion control used (and actual usage) is decided by the submodules provided in this PR's follow ups (see DAG above):
- #16158 provides the basic congestion control as proposed in Appendix C of RFC 8931 (the SFR RFC)
- #16159 provides the congestion control that is used for the QUIC protocol as proposed in RFC 9002 (but requires the congure backend provided in #15952)
- #16170 provides classic TCP Reno congestion control (using the congure backend provided in #15953), so purly loss-based congestion detection.
- #16171 provides classic TCP Reno congestion control as well, but extended with the Alternative Backoff with ECN (ABE) mechanism specified in RFC 8511 (using the congure backend provided in #15968)
For the usage of the respective congestion control mechanism, the respective submodule has to be used.
Rebased to current master
Murdock results
:heavy_check_mark: PASSED
bc24f9af965387b2d5c0aa7138ad62a2d0a514a1 tests: add test for 6LoWPAN SFR using CongURE
Success | Failures | Total | Runtime |
---|---|---|---|
1996 | 0 | 1996 | 06m:36s |
Artifacts
This only reflects a subset of all builds from https://ci-prod.riot-os.org. Please refer to https://ci.riot-os.org for a complete build for now.
Rebased to current master.
Squashed
Failure of tests/gcoap_fileserver
should be unrelated.
What was the error?
The test uses randomness so probabilistic failures are possible. We should just set a seed value there…
The test uses randomness so probabilistic failures are possible. We should just set a seed value there…
Yeah, or remove the randomness. ;-).
Yea I mean that's what the seed value would do
Yea I mean that's what the seed value would do
I know. But why is there randomness in a test (that does not test randomness) in the first place ;-).
Because the test uses ZEP dispatcher with a set packet loss probability.