RIOT icon indicating copy to clipboard operation
RIOT copied to clipboard

gnrc_sixlowpan_frag_sfr: provide CongURE support

Open miri64 opened this issue 3 years ago • 7 comments

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.

PR dependency graph

miri64 avatar Mar 05 '21 14:03 miri64

Rebased and squashed to current master. This PR does not have any dependencies anymore.

miri64 avatar May 04 '21 09:05 miri64

Rebased again.

miri64 avatar May 06 '21 15:05 miri64

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.

stale[bot] avatar Mar 02 '22 13:03 stale[bot]

@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.

OlegHahm avatar Mar 09 '22 13:03 OlegHahm

@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!

miri64 avatar Mar 09 '22 13:03 miri64

OlegHahm added the Waiting for maintainer label 41 minutes ago

OT: Can we put that tag in the Process: category?

miri64 avatar Mar 09 '22 13:03 miri64

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.

stale[bot] avatar Sep 21 '22 05:09 stale[bot]

  • 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 SFR

But 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.

miri64 avatar Oct 12 '22 11:10 miri64

Rebased to current master

miri64 avatar Oct 12 '22 11:10 miri64

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.

riot-ci avatar Oct 12 '22 11:10 riot-ci

Rebased to current master.

miri64 avatar Oct 18 '22 12:10 miri64

Squashed

miri64 avatar Oct 25 '22 16:10 miri64

Failure of tests/gcoap_fileserver should be unrelated.

benpicco avatar Oct 26 '22 20:10 benpicco

What was the error?

miri64 avatar Oct 27 '22 06:10 miri64

The test uses randomness so probabilistic failures are possible. We should just set a seed value there…

benpicco avatar Oct 27 '22 13:10 benpicco

The test uses randomness so probabilistic failures are possible. We should just set a seed value there…

Yeah, or remove the randomness. ;-).

miri64 avatar Oct 27 '22 13:10 miri64

Yea I mean that's what the seed value would do

benpicco avatar Oct 27 '22 13:10 benpicco

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 ;-).

miri64 avatar Oct 27 '22 13:10 miri64

Because the test uses ZEP dispatcher with a set packet loss probability.

benpicco avatar Oct 27 '22 14:10 benpicco