diff --git a/sys/net/gnrc/Kconfig b/sys/net/gnrc/Kconfig index f27b486e3e..37487697e5 100644 --- a/sys/net/gnrc/Kconfig +++ b/sys/net/gnrc/Kconfig @@ -8,6 +8,7 @@ menu "GNRC Network stack" depends on MODULE_GNRC rsource "application_layer/dhcpv6/Kconfig" +rsource "link_layer/gomach/Kconfig" rsource "link_layer/lorawan/Kconfig" rsource "link_layer/mac/Kconfig" rsource "netif/Kconfig" diff --git a/sys/net/gnrc/link_layer/gomach/Kconfig b/sys/net/gnrc/link_layer/gomach/Kconfig new file mode 100644 index 0000000000..255372e64e --- /dev/null +++ b/sys/net/gnrc/link_layer/gomach/Kconfig @@ -0,0 +1,227 @@ +# Copyright (c) 2020 Freie Universitaet Berlin +# +# This file is subject to the terms and conditions of the GNU Lesser +# General Public License v2.1. See the file LICENSE in the top level +# directory for more details. +# +menuconfig KCONFIG_MODULE_GNRC_GOMACH + bool "Configure GNRC GOMACH" + depends on MODULE_GNRC_GOMACH + help + Configure the GNRC GOMACH using Kconfig. + +if KCONFIG_MODULE_GNRC_GOMACH + +config GNRC_GOMACH_CP_DURATION_US + int "Wake-up period (WP) duration in microseconds" + default 10000 + help + Configure 'CONFIG_GNRC_GOMACH_CP_DURATION_US'. GoMacH adopts the + duty-cycle scheme that, by default, a node only wakes up for a short + period of 'CONFIG_GNRC_GOMACH_CP_DURATION_US' in each cycle. In the + rest of the cycle (except vTDMA), the node turns off the radio to + conserve power. 'CONFIG_GNRC_GOMACH_CP_DURATION_US' should be at least + longer than 'CONFIG_GNRC_GOMACH_MAX_PREAM_INTERVAL_US', thus to + guarantee that the receiver will not miss the preamble packet. + +config GNRC_GOMACH_SUPERFRAME_DURATION_US + int "Duration of superframe in microseconds" + default 300000 + help + Configure 'CONFIG_GNRC_GOMACH_SUPERFRAME_DURATION_US' ,superframe + duration, i.e , time between two consecutive wake-ups. + The configurations should not be shorter than 10 times of + 'CONFIG_GNRC_GOMACH_CP_DURATION_US' and not shorter than the RTT tickle + interval.This configuration governs power consumption and GoMacH's + reactiveness to traffic loads.In GoMacH, nodes adopt duty-cycle scheme + to conserve power. That is, time is divided into repeated cycles + (superframes), and in each cycle, a node only wakes up for a short + period of time for receiving potential incoming packets for itself. + This configuration defines the wake-up interval, or, in other words, + defines the cycle duration used in GoMacH. For more information refer + file 'gomach.h' in sys/include/net/gnrc. + +config GNRC_GOMACH_CP_RANDOM_END_US + int "Duration of random period at the end of WP in microseconds" + default 1000 + help + Configure 'CONFIG_GNRC_GOMACH_CP_RANDOM_END_US', the maximum duration + of the random period at the end of GoMacH's wake-up period (WP). + Currently, GoMacH's WP is composed of + 'CONFIG_GNRC_GOMACH_CP_DURATION_US' and (+) + 'CONFIG_GNRC_GOMACH_CP_RANDOM_END_US'. This random was introduced + to avoid beacon collision among neighbor nodes. This configuration may + be removed in the future. + +config GNRC_GOMACH_CP_MIN_GAP_US + int "Time interval between neighbor nodes' Wake-up phases in microseconds" + default 25000 + help + Configure 'CONFIG_GNRC_GOMACH_CP_MIN_GAP_US', the minimum gap between + neighbor nodes' wake-up phases in GoMacH.To reduce beacon collisions + and transmission collisions, GoMacH intends to avoid neighbor nodes' + phases being too close to each other. This configuration defines the + minimum gap between two nodes's wake-up phases. If the sender finds its + wake-up phase too closed to its receiver's, it will randomly select a + new phase for itself. + +config GNRC_GOMACH_WAIT_RX_END_US + int "Timeout for 'NETDEV_EVENT_RX_COMPLETE' in GoMacH in microseconds" + default 6000 + help + Configure 'CONFIG_GNRC_GOMACH_WAIT_RX_END_US', the timeout duration for + waiting 'NETDEV_EVENT_RX_COMPLETE' event in GoMacH. Sometimes in + GoMacH, if a node finds RX ongoing when it is just about to enter the + next MAC state, it will set up a timeout for waiting this packet + reception complete with a timeout of this + 'CONFIG_GNRC_GOMACH_WAIT_RX_END_US' duration. + +config GNRC_GOMACH_NO_TX_ISR_US + int "Timeout duration for confirming TX-No-ISR event in microseconds" + default 50000 + help + Configure 'CONFIG_GNRC_GOMACH_NO_TX_ISR_US',the timeout duration for + confirming TX-No-ISR event in GoMacH. This configuration is used to + confirm/catch a case that a transmission doesn't have its + 'NETDEV_EVENT_TX_COMPLETE' interrupt event, which is considered as a + hardware abnormal event. Upon this timeout expiration, GoMach will + accordingly take actions to maintain its state-machine. + +config GNRC_GOMACH_MAX_PREAM_INTERVAL_US + int "Maximum time interval between two preamble packets in microseconds" + default 6000 + help + Configure 'CONFIG_GNRC_GOMACH_MAX_PREAM_INTERVAL_US',the maximum time + interval between two consecutive preamble packets in GoMacH. In GoMacH, + a sender first uses preamble stream to track the receiver's wake-up + phase (WP), if the receiver's WP is unknown. This configuration defines + the maximum time interval between twoconsecutive preamble packets. + +config GNRC_GOMACH_PREAMBLE_INTERVAL_US + int "Time interval between two preamble packets in microseconds" + default 2000 + help + Configure 'CONFIG_GNRC_GOMACH_PREAMBLE_INTERVAL_US', the time interval + between two consecutive preamble packets in GoMacH. In GoMacH, after a + preamble is sent, the sender sets a timeout with + 'CONFIG_GNRC_GOMACH_PREAMBLE_INTERVAL_US' duration for waiting to send + the next preamble. Notably, this configuration is with a very small + value. In GoMacH, for receiving the preamble-ACK packet, the sender + doesn't wait for the whole reception of the preamble-ACK. Instead, it + only waits for the 'NETDEV_EVENT_RX_STARTED' event which leads to + shorter time interval between two consecutive preamble transmissions. + +config GNRC_GOMACH_BCAST_INTERVAL_US + int "Time interval between two broadcast packets in microseconds" + default 1000 + help + Configure 'CONFIG_GNRC_GOMACH_BCAST_INTERVAL_US', the time interval + between two consecutive broadcast packets in GoMacH. In GoMacH, when + sending a broadcast packet, the sender broadcasts the same packet frame + on its two public channels simultaneously, with a total duration of + 'CONFIG_GNRC_GOMACH_SUPERFRAME_DURATION_US' to guarantee that all + neighbors will get a copy. This configuration defines the time interval + between ending two consecutive broadcast copies. + +config GNRC_GOMACH_VTDMA_SLOT_SIZE_US + int "Transmission slot size in microseconds **Should not be changed**" + default 5000 + help + Configure 'CONFIG_GNRC_GOMACH_VTDMA_SLOT_SIZE_US', the transmission slot + size in GoMacH. GoMacH adopts dynamic slots allocation scheme to + allocate transmission slots to senders that have pending packets. Each + slot is for one data packet with ACK transmission. + 'CONFIG_GNRC_GOMACH_VTDMA_SLOT_SIZE_US' is right sufficient for the + transmission of the longest packet in IEEE 802.15.4 with ACK. Should + not be changed. + +config GNRC_GOMACH_TX_BUSY_THRESHOLD + int "Maximum number of CSMA TX attempts under busy-indication in the WP" + default 5 + help + Configure 'CONFIG_GNRC_GOMACH_TX_BUSY_THRESHOLD', maximum number of + CSMA TX attempts under busy-indication in the WP period of the receiver. + Senders in GoMacH adopt CSMA scheme to send data packets in the WP + period of the receiver. In case of having medium-busy feedback in WP + and the TX failure count (due to busy) is below + 'CONFIG_GNRC_GOMACH_TX_BUSY_THRESHOLD', the sender continue to send the + packet with CSMAin the receiver's WP, with the consideration that there + may be multi-senders simultaneously competing in WP and the WP will be + continuously extended (thus the packet can be received). + +config GNRC_GOMACH_CP_EXTEND_THRESHOLD + int "Maximum WP period extension number" + default 5 + help + Configure 'CONFIG_GNRC_GOMACH_CP_EXTEND_THRESHOLD', maximum WP period + extension number in GoMacH. The WP period of a receiver will be + extended upon each successful packet reception (except receiving + broadcast or preamble packet) to receive more potential incoming + packets. + +config GNRC_GOMACH_RX_DUPCHK_UNIT_LIFE + int "Life time of check-duplicate-packet in cycle count" + default 30 + help + Configure 'CONFIG_GNRC_GOMACH_RX_DUPCHK_UNIT_LIFE', GoMacH's + check-duplicate-packet unit life time in cycle count. In GoMacH, to + avoid receiving duplicate-packet, we currently introduce a data type of + 'gnrc_gomach_dupchk_unit_t' to record the recent senders' information + (especially MAC TX sequence). This configuration defines the + check-duplicate-packet data unit's life time in cycle count. Once + expired, the related data unit will be reset. This configuration maybe + removed in the future. + +config GNRC_GOMACH_MAX_ALLOC_SENDER_NUM + int "Maximum number of senders allowed to be allocated slots in one cycle" + default 11 + help + Configure 'CONFIG_GNRC_GOMACH_MAX_ALLOC_SENDER_NUM', maximum number of + senders allowed to be allocated slots in one cycle. Exclude the static + GoMacH MAC header payload in the beacon, which is 20 bytes, we have 107 + bytes left for constructing the sender-ID list and the related + slots-number list. A combined slots allocation information pair (sender + ID with its corresponded allocate slots number) will cost 9 (8+1) + bytes, thus we can hold a maximum of 11 i.e., ((127 - 20) / 9), sender + IDs in the beacon. + +config GNRC_GOMACH_REPHASELOCK_THRESHOLD + int "Maximum number of t2k attempts before t2u" + default 4 + help + Configure 'CONFIG_GNRC_GOMACH_REPHASELOCK_THRESHOLD', maximum t2k + attempts before going to t2u in GoMacH.After phase-locked with the + receiver, a sender runs a t2k (transmit-to-known) procedure to transmit + packet to the phase-known device. However, due to factors like timer + driftor busy-channel, a transmission attempt may fail in t2k. If the + t2k failure count has reached this + 'CONFIG_GNRC_GOMACH_REPHASELOCK_THRESHOLD', the sender regards + phase-locked failed due to timer drift. In this case, it will adopt t2u + (transmit-to-unknown) procedure to get re-phase-locked with the + receiver. + +config GNRC_GOMACH_T2U_RETYR_THRESHOLD + int "Maximum number of t2u attempts before dropping data packet" + default 2 + help + Configure 'CONFIG_GNRC_GOMACH_T2U_RETYR_THRESHOLD', maximum number of + t2u attempts before dropping data packet in GoMacH. In case the + receiver's phase is unknown to the sender, the sender adopts the t2u + (transmit-to-unknown) procedure to get phase-locked with the receiver. + This configuration defines the maximum t2u attempts before dropping the + data packet in GoMacH. + +config GNRC_GOMACH_MAX_T2U_RETYR_THRESHOLD + int "Maximum t2u attempts before re-initiating radio" + default 10 + help + Configure 'CONFIG_GNRC_GOMACH_MAX_T2U_RETYR_THRESHOLD', maximum number + of t2u attempts before re-initiaing radio in GoMacH. After a long + period of run time, a radio may be in wrong condition which needs to be + re-calibrated. This is indicated by having a series of continuous t2u + failures (no preambleACK) in GoMacH. In case we have + 'CONFIG_GNRC_GOMACH_MAX_T2U_RETYR_THRESHOLD' number of t2u failures, + then we re-initiate the radio, trying to re-calibrate the radio for + bringing it back to normal condition. + +endif # KCONFIG_MODULE_GNRC_GOMACH