1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/sys
Marian Buschsieweke 89c69c5450
sys/net/gnrc/tx_sync: new module
The new `gnrc_tx_sync` module allows users of the GNRC network stack to
synchronize with the actual transmission of outgoing packets. This is directly
integrated into gnrc_sock. Hence, if `gnrc_tx_sync` is used, calls to e.g.
sock_udp_send() will block until the network stack has processed the message.

Use cases:
1. Prevent packet drop when sending at high rate
    - If the application is sending faster than the stack can handle, the
      message queues will overflow and outgoing packets are lost
2. Passing auxiliary data about the transmission back the stack
    - When e.g. the number of required retransmissions, the transmission time
      stamp, etc. should be made available to a user of an UDP sock, a
      synchronization mechanism is needed
3. Simpler error reporting without footguns
    - The current approach of using `core/msg` for passing up error messages is
      difficult to use if other message come in. Currently, gnrc_sock is
      busy-waiting and fetching messages from the message queue until the number
      of expected status reports is received. It will enqueue all
      non-status-report messages again at the end of the queue. This has
      multiple issues:
        - Busy waiting is especially in lower power scenarios with time slotted
          MAC protocols harmful, as the CPU will remain active and consume
          power even though the it could sleep until the TX slot is reached
        - The status reports from the network stack are send to the user thread
          blocking. If the message queue of the user thread is full, the network
          stack would block until the user stack can fetch the messages. If
          another higher priority thread would start sending a message, it
          would busy wait for its status reports to completely come in. Hence,
          the first thread doesn't get CPU time to fetch messages and unblock
          the network stack. As a result, the system would lock up completely.
    - Just adding the error/status code to the gnrc_tx_sync_t would preallocate
      and reserve memory for the error reporting. That way gnrc_sock does not
      need to search through the message queue for status reports and the
      network stack does not need to block for the user thread fetching it.
2021-02-03 15:16:42 +01:00
..
analog_util sys/*: realign ENABLE_DEBUG 2020-10-23 11:27:48 +02:00
app_metadata
arduino Merge pull request #15314 from aabadie/pr/sys/arduino_print_float 2020-11-17 16:15:39 +01:00
auto_init sys/auto_init: add support for USB DFU 2021-01-12 11:34:22 +01:00
base64 sys/base64: drop padding for base64url encoding 2020-12-15 12:18:45 +01:00
benchmark sys/benchmark: add module to Kconfig 2020-11-06 15:57:55 +01:00
bitfield
bloom
bus sys/bus: add system buses 2020-11-12 22:50:53 +01:00
can sys/*: ENABLE_DEBUG not needed for inttypes.h 2020-11-02 21:49:39 +01:00
cb_mux
checksum sys/checksum: add module to Kconfig 2020-11-27 09:20:05 +01:00
clif sys/*: realign ENABLE_DEBUG 2020-10-23 11:27:48 +02:00
color sys/color: add module to Kconfig 2020-11-18 18:38:44 +01:00
cpp11-compat sys: Cleanup access to internal variables 2020-08-24 20:28:11 +02:00
crypto sys/*: add missing include of assert.h 2020-10-22 11:13:09 +02:00
cxx_ctor_guards sys/cxx_ctor_guards: Add guard for c++ ctors 2020-07-23 20:24:47 +02:00
div sys/div: Add module to Kconfig 2020-11-06 15:57:52 +01:00
ecc sys/*: replace #if ENABLE_DEBUG with IS_ACTIVE 2020-11-02 21:49:39 +01:00
eepreg
embunit sys/embunit/Kconfig: make module available only for testing 2020-12-02 10:14:43 +01:00
entropy_source sys/entropy_source: fix typo (sates => states) 2021-01-08 10:15:33 +01:00
event Merge pull request #15471 from maribu/event-threads-multi 2020-12-03 21:04:36 +01:00
evtimer sys/*: realign ENABLE_DEBUG 2020-10-23 11:27:48 +02:00
fmt sys/fmt_table: fix infinite loop 2021-01-21 10:03:44 +01:00
frac sys/frac: add module to Kconfig 2021-01-18 14:14:13 +01:00
fs sys/*: realign ENABLE_DEBUG 2020-10-23 11:27:48 +02:00
fuzzing sys/*: add missing include of assert.h 2020-10-22 11:13:09 +02:00
hashes Merge pull request #15199 from fjmolinas/pbkdf2-sha256 2020-11-04 14:45:12 +01:00
include sys/net/gnrc/tx_sync: new module 2021-02-03 15:16:42 +01:00
iolist sys/iolist: add module to Kconfig 2021-01-21 11:22:32 +01:00
isrpipe drivers/at: add modules to Kconfig 2020-11-18 18:38:48 +01:00
libc/include/sys
log picolibc: Use most NEWLIB code with picolibc 2020-08-24 08:26:16 -07:00
luid sys/*: remove unused assert.h include 2020-10-22 11:29:27 +02:00
malloc_thread_safe sys/malloc_thread_safety: use mutex 2020-12-17 15:39:05 +01:00
matstat sys/*: realign ENABLE_DEBUG 2020-10-23 11:27:48 +02:00
memarray memarray: Add extend and reduce functions 2021-01-15 11:39:08 +01:00
mineplex
net sys/net/gnrc/tx_sync: new module 2021-02-03 15:16:42 +01:00
newlib_syscalls_default makefiles: avoid building archives when compiling 2020-09-04 15:01:10 +02:00
od sys/od: allow to specify address offset with od_hex_dump_ext() 2021-01-11 14:35:40 +01:00
oneway-malloc sys/oneway-malloc: only allocate word-aligned chunks 2021-01-25 12:05:05 +01:00
phydat sys/phydat: add module to Kconfig 2020-11-25 12:00:13 +01:00
picolibc_syscalls_default Merge pull request #14843 from benpicco/picolibc_stdio_offset 2020-09-11 18:04:01 +02:00
pipe sys/pipe/pipe_dynamic: fix possible null pointer dereference 2020-09-11 11:19:58 +02:00
pm_layered sys/*: realign ENABLE_DEBUG 2020-10-23 11:27:48 +02:00
posix posis/semaphore: use sema_get_value() 2021-01-15 16:17:25 +01:00
progress_bar sys/*: remove unused assert.h include 2020-10-22 11:29:27 +02:00
ps schedstatistics: Log sleep tick statistics 2021-01-18 11:14:23 +01:00
puf_sram
quad_math
random sys/*: realign ENABLE_DEBUG 2020-10-23 11:27:48 +02:00
riotboot sys/riotboot: add DFU support to riotboot 2021-01-12 11:34:22 +01:00
saul_reg kconfig/saul: select phydat and enable saul_registry by default 2021-01-21 11:22:30 +01:00
schedstatistics schedstatistics: Log sleep tick statistics 2021-01-18 11:14:23 +01:00
sema sys/sema: add missing limits.h 2020-11-23 16:56:34 +01:00
sema_inv sys/sema_inv: add inverse Semaphore 2021-01-17 00:17:58 +01:00
seq
shell net/lorawan : Move 'LORAMAC_DEFAULT_TX_MODE' to 'CONFIG_' 2021-01-26 16:52:58 +01:00
ssp
stdio_null
stdio_rtt
stdio_semihosting stdio_semihosting: Initial include of Semihosting-based STDIO 2020-06-09 10:15:49 +02:00
stdio_uart
suit suit/transport/coap: make blocksize configurable 2020-12-03 10:51:42 +01:00
test_utils sys/test_utils: add modules to Kconfig 2020-11-06 15:57:49 +01:00
timex sys/*: replace #if ENABLE_DEBUG with IS_ACTIVE 2020-11-02 21:49:39 +01:00
trace sys/trace: initial commit 2020-06-10 21:21:33 +02:00
trickle sys/*: realign ENABLE_DEBUG 2020-10-23 11:27:48 +02:00
tsrb sys/tsrb: Add module to Kconfig 2020-11-06 15:57:53 +01:00
universal_address sys/*: realign ENABLE_DEBUG 2020-10-23 11:27:48 +02:00
uri_parser uri_parser: parse interface in IPv6 addresses 2020-11-11 22:47:30 +01:00
usb Kconfig: add Kconfig support for DFU 2021-01-12 11:34:22 +01:00
usb_board_reset sys/usb_board_reset: add usb_board_reset_in_bootloader definition 2020-07-01 10:30:17 +02:00
uuid
vfs all: adapt to moved sched defines 2020-11-23 16:56:34 +01:00
xtimer sys/xtimer/kconfig: fix dependencies 2021-01-18 14:14:13 +01:00
zptr
ztimer Merge pull request #15716 from leandrolanzieri/pr/kconfig/ztimer 2021-01-20 15:31:20 +01:00
doc.txt
Kconfig sys/iolist: add module to Kconfig 2021-01-21 11:22:32 +01:00
Kconfig.newlib treewide: change Kconfig prefix for module symbols 2020-08-31 09:57:28 +02:00
Kconfig.stdio drivers/slipdev: add modules to Kconfig 2021-01-21 11:22:31 +01:00
Makefile sys/sema_inv: add inverse Semaphore 2021-01-17 00:17:58 +01:00
Makefile.dep ble/skald: switch from xtimer to ZTIMER_MSEC 2021-01-26 09:34:09 +01:00
Makefile.include net/skald : Add CONFIG_SKALD_ADV_CHANNELS to allow ordered list 2021-01-26 16:17:17 +01:00