2ce3d3bf02
This commit implements delay-aware queue management. When enabled the device will monitor time-in-queue of messages in the direct tx queue and if it is lager than specified thresholds it updates ECN flag (if message indicates it is ECN-capable) and/or drop the message. This mechanism is applied to IPv6 messages on the first device that sends the message into Thread mesh and also on intermediate routers that are forwarding the message (e.g., as a "mesh lowpan fragment" frame). On an intermediate router when forwarding the fragments of a message, if any fragment is dropped by the queue management policy, all subsequent fragments will also be dropped. In particular, this commit contains the following: - Adds `DecompressEcn()` and `MarkCompressedEcn()` in `Lowpan` class to decompress or update the ECN field in a compressed IPHC header (unit test `test_lowpan` is also updated to test the new methods). - Adds `UpdateEcnOrDrop()` which implements the main queue management logic. This method is used when preparing next direct tx message. It decides whether to keep the message as is, update ECN on it or drop it. - Updates `EvictMessage()` to first apply the queue management rule to see if any message can be dropped before using the eviction logic based on message priority. - Updates and reuses the `FragmentPriorityList` to track whether queue management dropped any of the fragments of same message so to also drop any subsequent ones. - Updates `LogMessage()` to log when a message is dropped by queue-management or when ECN is marked on a message. |
||
---|---|---|
.. | ||
cli | ||
core | ||
lib | ||
ncp | ||
posix | ||
CMakeLists.txt | ||
Makefile.am |