Congestion control for 6LoWPAN SFR using the CongURE - A Congestion control framework.
More...
Congestion control for 6LoWPAN SFR using the CongURE - A Congestion control framework.
When included, this module enables congestion control for 6LoWPAN Selective Fragment Recovery (SFR). The flavor of congestion control can be selected using the following sub-modules:
◆ GNRC_SIXLOWPAN_FRAG_SFR_CONGURE_UNIT
#define GNRC_SIXLOWPAN_FRAG_SFR_CONGURE_UNIT (1U) |
The user-defined window unit for congure is one fragment with SFR.
Definition at line 46 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_destroy()
Frees the CongURE state object of a fragmentation buffer and set's it to NULL
- Parameters
-
[in] | fb | A fragmentation buffer entry |
- Note
- Does not do anything without the module
gnrc_sixlowpan_frag_sfr_congure
Definition at line 107 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_free()
static void gnrc_sixlowpan_frag_sfr_congure_snd_free |
( |
congure_snd_t * |
c | ) |
|
|
inlinestatic |
Frees the CongURE state object.
This makes a CongURE state object retrievable with gnrc_sixlowpan_frag_sfr_congure_snd_get again.
- Precondition
- CongURE object is not NULL when called with module
gnrc_sixlowpan_frag_sfr_congure
used.
- Parameters
-
[in] | c | A CongURE state object |
- Note
- Does not do anything without the module
gnrc_sixlowpan_frag_sfr_congure
Definition at line 89 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_get()
Retrieve CongURE state object from a pool of free objects.
Needs to be defined in for a each CongURE implementation congure_x
e.g. as a sub-module gnrc_sixlowpan_frag_sfr_congure_x
and call the respective congure_x_snd_setup
function when a free object is available for that object. As such, congure_snd_t::driver == NULL can be used as an identifier if a state object is free.
The pool of objects has to have an initial size of at least CONFIG_GNRC_SIXLOWPAN_FRAG_FB_SIZE.
The window unit is GNRC_SIXLOWPAN_FRAG_SFR_CONGURE_UNIT.
- Returns
- A CongURE state object on success
-
NULL, if no free CongURE state object is available (including when when module
gnrc_sixlowpan_frag_sfr_congure
is not included).
◆ gnrc_sixlowpan_frag_sfr_congure_snd_has_inter_frame_gap()
static bool gnrc_sixlowpan_frag_sfr_congure_snd_has_inter_frame_gap |
( |
void |
| ) |
|
|
inlinestatic |
Checks if inter-frame gap is provided.
Either because CONFIG_GNRC_SIXLOWPAN_SFR_INTER_FRAME_GAP_US is greater 0 or module gnrc_sixlowpan_frag_sfr_congure
is provided
- Return values
-
true | When an inter-frame gap can be provided |
false | When the inter-frame gap is supposed to be 0. |
Definition at line 220 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_in_cwnd()
Checks if given fragmentation buffer entry is within congestion window.
- Precondition
- CongURE object of the fragmentation buffer entry is initialized when called with module
gnrc_sixlowpan_frag_sfr_congure
used.
- Parameters
-
[in] | fb | A fragmentation buffer entry |
- Note
- Without the module
gnrc_sixlowpan_frag_sfr_congure
the fragmentation buffer entry is checked against CONFIG_GNRC_SIXLOWPAN_SFR_OPT_WIN_SIZE
- Return values
-
true | When fb is in congestion window |
false | When fb is not in congestion window |
Definition at line 175 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_init()
Initializes a CongURE state object in a fragmentation buffer entry.
- Parameters
-
[in] | fb | A fragmentation buffer entry |
- Note
- Does not do anything without the module
gnrc_sixlowpan_frag_sfr_congure
Definition at line 125 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_inter_frame_gap()
Returns inter-frame gap if provided by CongURE implementation.
When module gnrc_sixlowpan_frag_sfr_congure
is provided it will provide congure_snd_driver_t::inter_message_interval() of the CongURE state object of the provided fragmentation buffer with CONFIG_GNRC_SIXLOWPAN_SFR_INTER_FRAME_GAP_US as a lower bound. If congure_snd_driver_t::inter_message_interval returns -1, fb
is NULL, or without the module gnrc_sixlowpan_frag_sfr_congure
it will return CONFIG_GNRC_SIXLOWPAN_SFR_INTER_FRAME_GAP_US
- Precondition
- CongURE object of the fragmentation buffer entry is initialized when
fb
is NULL
and when called with module gnrc_sixlowpan_frag_sfr_congure
used.
- Parameters
-
[in] | fb | A fragmentation buffer. May be NULL. |
- Returns
- The inter-frame gap for the given fragmentation buffer, but
Definition at line 245 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_next_in_cwnd()
Checks if given fragmentation buffer entry would still be within congestion window after next send.
- Precondition
- CongURE object of the fragmentation buffer entry is initialized when called with module
gnrc_sixlowpan_frag_sfr_congure
used.
- Note
- Without the module
gnrc_sixlowpan_frag_sfr_congure
the fragmentation buffer entry is checked against CONFIG_GNRC_SIXLOWPAN_SFR_OPT_WIN_SIZE
- Return values
-
true | When fb can still send one fragment under the congestion window constraint. |
false | When fb can not still send one fragment under the congestion window constraint. |
Definition at line 200 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_report_ecn()
Report to CongURE that ECN bit was set in an ACK.
Calls congure_snd_driver_t::report_ecn_ce for the CongURE state object of fb
with time
.
- Precondition
- CongURE object of the fragmentation buffer entry is initialized when called with module
gnrc_sixlowpan_frag_sfr_congure
used.
- Parameters
-
[in] | fb | A fragmentation buffer. |
[in] | time | Timestamp in milliseconds of the earliest fragment for which the notified congestion occurred was sent. |
Definition at line 412 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_report_frag_acked()
Report to CongURE that a number of fragments are known to be lost.
Calls congure_snd_driver_t::report_msgs_acked for the CongURE state object of fb
with frag
and ack
.
- Precondition
- CongURE object of the fragmentation buffer entry is initialized when called with module
gnrc_sixlowpan_frag_sfr_congure
used.
- Parameters
-
[in] | fb | A fragmentation buffer. |
[in] | frag | The ACK'd fragment. |
[in] | ack | The received ACK. |
Definition at line 379 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_report_frag_discard()
◆ gnrc_sixlowpan_frag_sfr_congure_snd_report_frag_sent()
◆ gnrc_sixlowpan_frag_sfr_congure_snd_report_frags_lost()
Report to CongURE that a number of fragments are known to be lost.
Calls congure_snd_driver_t::report_msgs_lost for the CongURE state object of fb
with frags
.
- Precondition
- CongURE object of the fragmentation buffer entry is initialized when called with module
gnrc_sixlowpan_frag_sfr_congure
used.
- Parameters
-
[in] | fb | A fragmentation buffer. |
[in] | frags | A collection of messages that are known to be lost. The list may be changed by the function. |
Definition at line 352 of file congure.h.
◆ gnrc_sixlowpan_frag_sfr_congure_snd_report_frags_timeout()
◆ gnrc_sixlowpan_frag_sfr_congure_snd_setup()
Retrieve CongURE state object when not retrieved and initialize it for a fragmentation buffer entry.
- Parameters
-
[in] | fb | A fragmentation buffer entry |
- Note
- Does not do anything without the module
gnrc_sixlowpan_frag_sfr_congure
Definition at line 143 of file congure.h.