1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/sys/net/gnrc/Makefile
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

144 lines
3.9 KiB
Makefile

ifneq (,$(filter gnrc_dhcpv6,$(USEMODULE)))
DIRS += application_layer/dhcpv6
endif
ifneq (,$(filter gnrc_icmpv6,$(USEMODULE)))
DIRS += network_layer/icmpv6
endif
ifneq (,$(filter gnrc_icmpv6_echo,$(USEMODULE)))
DIRS += network_layer/icmpv6/echo
endif
ifneq (,$(filter gnrc_icmpv6_error,$(USEMODULE)))
DIRS += network_layer/icmpv6/error
endif
ifneq (,$(filter gnrc_ipv6,$(USEMODULE)))
DIRS += network_layer/ipv6
endif
ifneq (,$(filter gnrc_ipv6_ext,$(USEMODULE)))
DIRS += network_layer/ipv6/ext
endif
ifneq (,$(filter gnrc_ipv6_ext_frag,$(USEMODULE)))
DIRS += network_layer/ipv6/ext/frag
endif
ifneq (,$(filter gnrc_ipv6_ext_opt,$(USEMODULE)))
DIRS += network_layer/ipv6/ext/opt
endif
ifneq (,$(filter gnrc_ipv6_ext_rh,$(USEMODULE)))
DIRS += network_layer/ipv6/ext/rh
endif
ifneq (,$(filter gnrc_ipv6_hdr,$(USEMODULE)))
DIRS += network_layer/ipv6/hdr
endif
ifneq (,$(filter gnrc_ipv6_nib,$(USEMODULE)))
DIRS += network_layer/ipv6/nib
endif
ifneq (,$(filter gnrc_ipv6_whitelist,$(USEMODULE)))
DIRS += network_layer/ipv6/whitelist
endif
ifneq (,$(filter gnrc_ipv6_blacklist,$(USEMODULE)))
DIRS += network_layer/ipv6/blacklist
endif
ifneq (,$(filter gnrc_ndp,$(USEMODULE)))
DIRS += network_layer/ndp
endif
ifneq (,$(filter gnrc_netapi,$(USEMODULE)))
DIRS += netapi
endif
ifneq (,$(filter gnrc_netif gnrc_netif_%,$(USEMODULE)))
DIRS += netif
endif
ifneq (,$(filter gnrc_netreg,$(USEMODULE)))
DIRS += netreg
endif
ifneq (,$(filter gnrc_mac,$(USEMODULE)))
DIRS += link_layer/mac
endif
ifneq (,$(filter gnrc_pkt,$(USEMODULE)))
DIRS += pkt
endif
ifneq (,$(filter gnrc_lwmac,$(USEMODULE)))
DIRS += link_layer/lwmac
endif
ifneq (,$(filter gnrc_pktbuf_malloc,$(USEMODULE)))
DIRS += pktbuf_malloc
endif
ifneq (,$(filter gnrc_lorawan,$(USEMODULE)))
DIRS += link_layer/lorawan
endif
ifneq (,$(filter gnrc_gomach,$(USEMODULE)))
DIRS += link_layer/gomach
endif
ifneq (,$(filter gnrc_pktbuf_static,$(USEMODULE)))
DIRS += pktbuf_static
endif
ifneq (,$(filter gnrc_pktbuf,$(USEMODULE)))
DIRS += pktbuf
endif
ifneq (,$(filter gnrc_priority_pktqueue,$(USEMODULE)))
DIRS += priority_pktqueue
endif
ifneq (,$(filter gnrc_pktdump,$(USEMODULE)))
DIRS += pktdump
endif
ifneq (,$(filter gnrc_rpl,$(USEMODULE)))
DIRS += routing/rpl
endif
ifneq (,$(filter gnrc_rpl_srh,$(USEMODULE)))
DIRS += routing/rpl/srh
endif
ifneq (,$(filter gnrc_rpl_p2p,$(USEMODULE)))
DIRS += routing/rpl/p2p
endif
ifneq (,$(filter gnrc_sixlowpan,$(USEMODULE)))
DIRS += network_layer/sixlowpan
endif
ifneq (,$(filter gnrc_sixlowpan_ctx,$(USEMODULE)))
DIRS += network_layer/sixlowpan/ctx
endif
ifneq (,$(filter gnrc_sixlowpan_frag,$(USEMODULE)))
DIRS += network_layer/sixlowpan/frag
endif
ifneq (,$(filter gnrc_sixlowpan_frag_fb,$(USEMODULE)))
DIRS += network_layer/sixlowpan/frag/fb
endif
ifneq (,$(filter gnrc_sixlowpan_frag_minfwd,$(USEMODULE)))
DIRS += network_layer/sixlowpan/frag/minfwd
endif
ifneq (,$(filter gnrc_sixlowpan_frag_rb,$(USEMODULE)))
DIRS += network_layer/sixlowpan/frag/rb
endif
ifneq (,$(filter gnrc_sixlowpan_frag_sfr,$(USEMODULE)))
DIRS += network_layer/sixlowpan/frag/sfr
endif
ifneq (,$(filter gnrc_sixlowpan_frag_stats,$(USEMODULE)))
DIRS += network_layer/sixlowpan/frag/stats
endif
ifneq (,$(filter gnrc_sixlowpan_frag_vrb,$(USEMODULE)))
DIRS += network_layer/sixlowpan/frag/vrb
endif
ifneq (,$(filter gnrc_sixlowpan_iphc,$(USEMODULE)))
DIRS += network_layer/sixlowpan/iphc
endif
ifneq (,$(filter gnrc_sixlowpan_nd,$(USEMODULE)))
DIRS += network_layer/sixlowpan/nd
endif
ifneq (,$(filter gnrc_sock,$(USEMODULE)))
DIRS += sock
endif
ifneq (,$(filter gnrc_sock_ip,$(USEMODULE)))
DIRS += sock/ip
endif
ifneq (,$(filter gnrc_sock_udp,$(USEMODULE)))
DIRS += sock/udp
endif
ifneq (,$(filter gnrc_udp,$(USEMODULE)))
DIRS += transport_layer/udp
endif
ifneq (,$(filter gnrc_tcp,$(USEMODULE)))
DIRS += transport_layer/tcp
endif
ifneq (,$(filter gnrc_tx_sync,$(USEMODULE)))
DIRS += tx_sync
endif
include $(RIOTBASE)/Makefile.base