1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

gnrc_nettype: indirect NETTYPE definition via pseudo-modules

Instead of making a NETTYPE definition dependent on an implementation
module, this change makes it dependent on a pseudo-module for each
specific NETTYPE and makes the respective implementation modules
dependent on it.

This has two advantages:

- one does not need include the whole implementation module to
  subscribe to a NETTYPE for testing or to provide an alternative
  implementation
- A lot of circular dependencies related to GNRC could be untangled.
  E.g. the only reason `gnrc_icmpv6` needs the `gnrc_ipv6` is because it
  uses `GNRC_NETTYPE_IPV6` to search for the IPv6 header in an ICMPv6
  when demultiplexing an ICMPv6 header.

This change does not resolve these dependencies or include usages where
needed. The only dependency change is the addition of the
pseudo-modules to the implementation modules.
This commit is contained in:
Martine S. Lenders 2020-04-30 23:14:22 +02:00
parent 8136edca95
commit 1c251beb03
No known key found for this signature in database
GPG Key ID: CCD317364F63286F
5 changed files with 49 additions and 29 deletions

View File

@ -65,6 +65,7 @@ endif
ifneq (,$(filter gnrc_gomach,$(USEMODULE)))
USEMODULE += gnrc_netif
USEMODULE += gnrc_nettype_gomach
USEMODULE += random
USEMODULE += xtimer
USEMODULE += gnrc_mac
@ -78,6 +79,7 @@ ifneq (,$(filter gnrc_lorawan,$(USEMODULE)))
USEMODULE += crypto_aes
USEMODULE += netdev_layer
USEMODULE += gnrc_neterr
USEMODULE += gnrc_nettype_lorawan
endif
ifneq (,$(filter sntp,$(USEMODULE)))
@ -270,6 +272,7 @@ endif
ifneq (,$(filter gnrc_sixlowpan,$(USEMODULE)))
DEFAULT_MODULE += auto_init_gnrc_sixlowpan
USEMODULE += gnrc_nettype_sixlowpan
USEMODULE += sixlowpan
endif
@ -304,6 +307,7 @@ endif
ifneq (,$(filter gnrc_icmpv6,$(USEMODULE)))
USEMODULE += inet_csum
USEMODULE += gnrc_ipv6
USEMODULE += gnrc_nettype_icmpv6
USEMODULE += icmpv6
endif
@ -322,6 +326,7 @@ endif
ifneq (,$(filter gnrc_ipv6_ext,$(USEMODULE)))
USEMODULE += gnrc_ipv6
USEMODULE += gnrc_nettype_ipv6_ext
endif
ifneq (,$(filter gnrc_ipv6_whitelist,$(USEMODULE)))
@ -344,6 +349,7 @@ ifneq (,$(filter gnrc_ipv6,$(USEMODULE)))
USEMODULE += gnrc_ipv6_hdr
USEMODULE += gnrc_ipv6_nib
USEMODULE += gnrc_netif
USEMODULE += gnrc_nettype_ipv6
endif
ifneq (,$(filter gnrc_ipv6_hdr,$(USEMODULE)))
@ -396,12 +402,14 @@ endif
ifneq (,$(filter gnrc_udp,$(USEMODULE)))
DEFAULT_MODULE += auto_init_gnrc_udp
USEMODULE += gnrc_nettype_udp
USEMODULE += inet_csum
USEMODULE += udp
endif
ifneq (,$(filter gnrc_tcp,$(USEMODULE)))
DEFAULT_MODULE += auto_init_gnrc_tcp
USEMODULE += gnrc_nettype_tcp
USEMODULE += inet_csum
USEMODULE += random
USEMODULE += tcp
@ -631,6 +639,7 @@ endif
ifneq (,$(filter gnrc_lwmac,$(USEMODULE)))
USEMODULE += gnrc_netif
USEMODULE += gnrc_nettype_lwmac
USEMODULE += gnrc_mac
FEATURES_REQUIRED += periph_rtt
endif

View File

@ -35,6 +35,7 @@ PSEUDOMODULES += gnrc_netif_events
PSEUDOMODULES += gnrc_pktbuf_cmd
PSEUDOMODULES += gnrc_netif_cmd_%
PSEUDOMODULES += gnrc_netif_dedup
PSEUDOMODULES += gnrc_nettype_%
PSEUDOMODULES += gnrc_sixloenc
PSEUDOMODULES += gnrc_sixlowpan_border_router_default
PSEUDOMODULES += gnrc_sixlowpan_default

View File

@ -1,4 +1,5 @@
USEMODULE += ccn-lite-utils
USEMODULE += gnrc_nettype_ccn
USEMODULE += evtimer
USEMODULE += random
USEMODULE += timex

View File

@ -1,5 +1,6 @@
USEMODULE += ndn-encoding
USEMODULE += gnrc
USEMODULE += gnrc_nettype_ndn
USEMODULE += xtimer
USEMODULE += random
USEMODULE += hashes

View File

@ -15,6 +15,13 @@
* the @ref net_gnrc_netreg, and the @ref net_gnrc_pkt to identify network protocols
* throughout the network stack.
*
* To include a nettype into your build, use the corresponding pseudo-module
* e.g. to use `GNRC_NETTYPE_IPV6` in your code, use
*
* ```
* USEMODULE += gnrc_nettype_ipv6
* ```
*
* @{
*
* @file
@ -27,6 +34,7 @@
#include <inttypes.h>
#include "kernel_defines.h"
#include "net/ethertype.h"
#include "net/protnum.h"
@ -56,7 +64,7 @@ typedef enum {
GNRC_NETTYPE_NETIF = -1,
GNRC_NETTYPE_UNDEF = 0, /**< Protocol is undefined */
#ifdef MODULE_GNRC_SIXLOWPAN
#if IS_USED(MODULE_GNRC_NETTYPE_SIXLOWPAN) || defined(DOXYGEN)
GNRC_NETTYPE_SIXLOWPAN, /**< Protocol is 6LoWPAN */
#endif
@ -64,7 +72,7 @@ typedef enum {
* @{
* @name Link layer
*/
#ifdef MODULE_GNRC_GOMACH
#if IS_USED(MODULE_GNRC_NETTYPE_GOMACH) || defined(DOXYGEN)
GNRC_NETTYPE_GOMACH, /**< Protocol is GoMacH */
#endif
/**
@ -75,7 +83,7 @@ typedef enum {
* @{
* @name Link layer
*/
#ifdef MODULE_GNRC_LWMAC
#if IS_USED(MODULE_GNRC_NETTYPE_LWMAC) || defined(DOXYGEN)
GNRC_NETTYPE_LWMAC, /**< Protocol is lwMAC */
#endif
/**
@ -86,13 +94,13 @@ typedef enum {
* @{
* @name Network layer
*/
#ifdef MODULE_GNRC_IPV6
#if IS_USED(MODULE_GNRC_NETTYPE_IPV6) || defined(DOXYGEN)
GNRC_NETTYPE_IPV6, /**< Protocol is IPv6 */
#endif
#ifdef MODULE_GNRC_IPV6_EXT
#if IS_USED(MODULE_GNRC_NETTYPE_IPV6_EXT) || defined(DOXYGEN)
GNRC_NETTYPE_IPV6_EXT, /**< Protocol is IPv6 extension header */
#endif
#ifdef MODULE_GNRC_ICMPV6
#if IS_USED(MODULE_GNRC_NETTYPE_ICMPV6) || defined(DOXYGEN)
GNRC_NETTYPE_ICMPV6, /**< Protocol is ICMPv6 */
#endif
/**
@ -103,27 +111,27 @@ typedef enum {
* @{
* @name Transport layer
*/
#ifdef MODULE_GNRC_TCP
#if IS_USED(MODULE_GNRC_NETTYPE_TCP) || defined(DOXYGEN)
GNRC_NETTYPE_TCP, /**< Protocol is TCP */
#endif
#ifdef MODULE_GNRC_UDP
#if IS_USED(MODULE_GNRC_NETTYPE_UDP) || defined(DOXYGEN)
GNRC_NETTYPE_UDP, /**< Protocol is UDP */
#endif
/**
* @}
*/
#ifdef MODULE_CCN_LITE
#if IS_USED(MODULE_GNRC_NETTYPE_CCN) || defined(DOXYGEN)
GNRC_NETTYPE_CCN, /**< Protocol is CCN */
GNRC_NETTYPE_CCN_CHUNK, /**< Protocol is CCN, packet contains a content
chunk */
#endif
#ifdef MODULE_NDN_RIOT
#if IS_USED(MODULE_GNRC_NETTYPE_NDN) || defined(DOXYGEN)
GNRC_NETTYPE_NDN, /**< Protocol is NDN */
#endif
#ifdef MODULE_GNRC_LORAWAN
#if IS_USED(MODULE_GNRC_NETTYPE_LORAWAN) || defined(DOXYGEN)
GNRC_NETTYPE_LORAWAN, /**< Protocol is LoRaWAN */
#endif
@ -155,19 +163,19 @@ typedef enum {
static inline gnrc_nettype_t gnrc_nettype_from_ethertype(uint16_t type)
{
switch (type) {
#ifdef MODULE_GNRC_IPV6
#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
case ETHERTYPE_IPV6:
return GNRC_NETTYPE_IPV6;
#endif
#if defined(MODULE_CCN_LITE) || defined(MODULE_NDN_RIOT)
#if IS_USED(MODULE_GNRC_NETTYPE_CCN) || IS_USED(MODULE_GNRC_NETTYPE_NDN)
case ETHERTYPE_NDN:
#if defined(MODULE_CCN_LITE)
#if IS_USED(MODULE_GNRC_NETTYPE_CCN)
return GNRC_NETTYPE_CCN;
#elif defined(MODULE_NDN_RIOT)
#elif IS_USED(MODULE_GNRC_NETTYPE_NDN)
return GNRC_NETTYPE_NDN;
#endif
#endif
#ifdef MODULE_GNRC_SIXLOENC
#if IS_USED(MODULE_GNRC_SIXLOENC) && IS_USED(MODULE_GNRC_NETTYPE_SIXLOWPAN)
case ETHERTYPE_6LOENC:
return GNRC_NETTYPE_SIXLOWPAN;
#endif
@ -190,19 +198,19 @@ static inline gnrc_nettype_t gnrc_nettype_from_ethertype(uint16_t type)
static inline uint16_t gnrc_nettype_to_ethertype(gnrc_nettype_t type)
{
switch (type) {
#ifdef MODULE_GNRC_SIXLOENC
#if IS_USED(MODULE_GNRC_SIXLOENC) && IS_USED(MODULE_GNRC_NETTYPE_SIXLOWPAN)
case GNRC_NETTYPE_SIXLOWPAN:
return ETHERTYPE_6LOENC;
#endif
#ifdef MODULE_GNRC_IPV6
#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
case GNRC_NETTYPE_IPV6:
return ETHERTYPE_IPV6;
#endif
#ifdef MODULE_CCN_LITE
#if IS_USED(MODULE_GNRC_NETTYPE_CCN)
case GNRC_NETTYPE_CCN:
return ETHERTYPE_NDN;
#endif
#ifdef MODULE_NDN_RIOT
#if IS_USED(MODULE_GNRC_NETTYPE_NDN)
case GNRC_NETTYPE_NDN:
return ETHERTYPE_NDN;
#endif
@ -225,23 +233,23 @@ static inline uint16_t gnrc_nettype_to_ethertype(gnrc_nettype_t type)
static inline gnrc_nettype_t gnrc_nettype_from_protnum(uint8_t num)
{
switch (num) {
#ifdef MODULE_GNRC_ICMPV6
#if IS_USED(MODULE_GNRC_NETTYPE_ICMPV6)
case PROTNUM_ICMPV6:
return GNRC_NETTYPE_ICMPV6;
#endif
#ifdef MODULE_GNRC_IPV6
#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
case PROTNUM_IPV6:
return GNRC_NETTYPE_IPV6;
#endif
#ifdef MODULE_GNRC_TCP
#if IS_USED(MODULE_GNRC_NETTYPE_TCP)
case PROTNUM_TCP:
return GNRC_NETTYPE_TCP;
#endif
#ifdef MODULE_GNRC_UDP
#if IS_USED(MODULE_GNRC_NETTYPE_UDP)
case PROTNUM_UDP:
return GNRC_NETTYPE_UDP;
#endif
#ifdef MODULE_GNRC_IPV6_EXT
#if IS_USED(MODULE_GNRC_NETTYPE_IPV6_EXT)
case PROTNUM_IPV6_EXT_HOPOPT:
case PROTNUM_IPV6_EXT_DST:
case PROTNUM_IPV6_EXT_RH:
@ -270,19 +278,19 @@ static inline gnrc_nettype_t gnrc_nettype_from_protnum(uint8_t num)
static inline uint8_t gnrc_nettype_to_protnum(gnrc_nettype_t type)
{
switch (type) {
#ifdef MODULE_GNRC_ICMPV6
#if IS_USED(MODULE_GNRC_NETTYPE_ICMPV6)
case GNRC_NETTYPE_ICMPV6:
return PROTNUM_ICMPV6;
#endif
#ifdef MODULE_GNRC_IPV6
#if IS_USED(MODULE_GNRC_NETTYPE_IPV6)
case GNRC_NETTYPE_IPV6:
return PROTNUM_IPV6;
#endif
#ifdef MODULE_GNRC_TCP
#if IS_USED(MODULE_GNRC_NETTYPE_TCP)
case GNRC_NETTYPE_TCP:
return PROTNUM_TCP;
#endif
#ifdef MODULE_GNRC_UDP
#if IS_USED(MODULE_GNRC_NETTYPE_UDP)
case GNRC_NETTYPE_UDP:
return PROTNUM_UDP;
#endif