1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-14 17:13:50 +01:00

328 lines
8.6 KiB
C

/*
* Copyright (C) 2017 Freie Universität 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.
*/
#pragma once
/**
* @defgroup net_gnrc_ipv6_nib_conf GNRC IPv6 NIB compile configurations
* @ingroup net_gnrc_ipv6_nib
* @ingroup net_gnrc_conf
* @brief Configuration macros for neighbor information base
* @{
*
* @file
* @brief Configuration macro definitions for neighbor information base
*
* @author Martine Lenders <mlenders@inf.fu-berlin.de>
*/
#include "modules.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Apply configurations only if not using Kconfig for this module */
#if !IS_ACTIVE(CONFIG_KCONFIG_MODULE_GNRC_IPV6_NIB) || defined(DOXYGEN)
/* some pseudo-module based configuration, doc: see below */
#ifdef MODULE_GNRC_IPV6_NIB_6LBR
# ifndef CONFIG_GNRC_IPV6_NIB_6LBR
# define CONFIG_GNRC_IPV6_NIB_6LBR 1
# endif
# ifndef CONFIG_GNRC_IPV6_NIB_NUMOF
# define CONFIG_GNRC_IPV6_NIB_NUMOF (16)
# endif
#endif
#ifdef MODULE_GNRC_IPV6_NIB_6LR
# ifndef CONFIG_GNRC_IPV6_NIB_6LR
# define CONFIG_GNRC_IPV6_NIB_6LR 1
# endif
#endif
#ifdef MODULE_GNRC_IPV6_NIB_6LN
# ifndef CONFIG_GNRC_IPV6_NIB_6LN
# define CONFIG_GNRC_IPV6_NIB_6LN 1
# endif
# ifndef MODULE_GNRC_IPV6_CLASSIC
/* We are only a 6lo node with no 'classic' IPv6 interface */
# ifndef CONFIG_GNRC_IPV6_NIB_QUEUE_PKT
# define CONFIG_GNRC_IPV6_NIB_QUEUE_PKT 0
# endif
# ifndef CONFIG_GNRC_IPV6_NIB_SLAAC
# define CONFIG_GNRC_IPV6_NIB_SLAAC 0
# endif
# if !CONFIG_GNRC_IPV6_NIB_6LR
# ifndef CONFIG_GNRC_IPV6_NIB_ARSM
# define CONFIG_GNRC_IPV6_NIB_ARSM 0
# endif
# ifndef CONFIG_GNRC_IPV6_NIB_NUMOF
/* only needs to store default router */
# define CONFIG_GNRC_IPV6_NIB_NUMOF (1)
# endif
# endif
# endif
#endif
#ifdef MODULE_GNRC_IPV6_NIB_ROUTER
# define CONFIG_GNRC_IPV6_NIB_ROUTER 1
#endif
#ifdef MODULE_GNRC_IPV6_NIB_DNS
# define CONFIG_GNRC_IPV6_NIB_DNS 1
#endif
/**
* @name Compile flags
* @brief Compile flags to (de-)activate certain features for NIB
* @{
*/
/**
* @brief enable features for 6Lo border router
*/
#ifndef CONFIG_GNRC_IPV6_NIB_6LBR
# define CONFIG_GNRC_IPV6_NIB_6LBR 0
#endif
/**
* @brief enable features for 6Lo router
*/
#ifndef CONFIG_GNRC_IPV6_NIB_6LR
# if CONFIG_GNRC_IPV6_NIB_6LBR
# define CONFIG_GNRC_IPV6_NIB_6LR 1
# else
# define CONFIG_GNRC_IPV6_NIB_6LR 0
# endif
#endif
/**
* @brief enable features for 6Lo node
*/
#ifndef CONFIG_GNRC_IPV6_NIB_6LN
# if CONFIG_GNRC_IPV6_NIB_6LR
# define CONFIG_GNRC_IPV6_NIB_6LN 1
# else
# define CONFIG_GNRC_IPV6_NIB_6LN 0
# endif
#endif
/**
* @brief enable features for IPv6 routers
*/
#ifndef CONFIG_GNRC_IPV6_NIB_ROUTER
# if CONFIG_GNRC_IPV6_NIB_6LR
# define CONFIG_GNRC_IPV6_NIB_ROUTER 1
# else
# define CONFIG_GNRC_IPV6_NIB_ROUTER 0
# endif
#endif
/**
* @brief activate router advertising at interface start-up
*/
#ifndef CONFIG_GNRC_IPV6_NIB_ADV_ROUTER
# define CONFIG_GNRC_IPV6_NIB_ADV_ROUTER 0
#endif
/**
* @brief enable periodic router solicitations
*/
#ifndef CONFIG_GNRC_IPV6_NIB_SOL_ROUTER
# define CONFIG_GNRC_IPV6_NIB_SOL_ROUTER 1
#endif
/**
* @brief Include a Route Information Option for subnets
* on other interfaces in normal Router Advertisements
* generated by @ref gnrc_ipv6_nib_change_rtr_adv_iface
*
* This is only needed if your node is an upstream router,
* but not the default router, but you want to propagate
* the information that the custom subnets it knows about
* should be routed through it instead of the default route.
*
* Requires the `gnrc_ipv6_nib_rio` module.
*/
#ifndef CONFIG_GNRC_IPV6_NIB_ADD_RIO_IN_RA
# define CONFIG_GNRC_IPV6_NIB_ADD_RIO_IN_RA 0
#endif
/**
* @brief Include a Route Information Option for subnets
* on other interfaces in the last Router Advertisement
* generated by @ref gnrc_ipv6_nib_change_rtr_adv_iface
*
* Requires the `gnrc_ipv6_nib_rio` module.
*/
#ifndef CONFIG_GNRC_IPV6_NIB_ADD_RIO_IN_LAST_RA
# if IS_USED(MODULE_GNRC_IPV6_AUTO_SUBNETS)
# define CONFIG_GNRC_IPV6_NIB_ADD_RIO_IN_LAST_RA 1
# else
# define CONFIG_GNRC_IPV6_NIB_ADD_RIO_IN_LAST_RA 0
# endif
#endif
/**
* @brief (de-)activate NDP address resolution state-machine
*/
#ifndef CONFIG_GNRC_IPV6_NIB_ARSM
# define CONFIG_GNRC_IPV6_NIB_ARSM 1
#endif
/**
* @brief queue packets for address resolution
*/
#ifndef CONFIG_GNRC_IPV6_NIB_QUEUE_PKT
# define CONFIG_GNRC_IPV6_NIB_QUEUE_PKT 1
#endif
/**
* @brief handle NDP messages according for stateless address
* auto-configuration (if activated on interface)
*
* @see [RFC 4862](https://tools.ietf.org/html/rfc4862)
*/
#ifndef CONFIG_GNRC_IPV6_NIB_SLAAC
# define CONFIG_GNRC_IPV6_NIB_SLAAC 1
#endif
/**
* @brief handle Redirect Messages
*/
#ifndef CONFIG_GNRC_IPV6_NIB_REDIRECT
# define CONFIG_GNRC_IPV6_NIB_REDIRECT 0
#endif
/**
* @brief (de-)activate destination cache
*/
#ifndef CONFIG_GNRC_IPV6_NIB_DC
# if CONFIG_GNRC_IPV6_NIB_REDIRECT
# define CONFIG_GNRC_IPV6_NIB_DC 1
# else
# define CONFIG_GNRC_IPV6_NIB_DC 0
# endif
#endif
/**
* @brief Support for DNS configuration options
*
* @see [RFC 8106](https://tools.ietf.org/html/rfc8106)
*/
#ifndef CONFIG_GNRC_IPV6_NIB_DNS
# define CONFIG_GNRC_IPV6_NIB_DNS 0
#endif
/**
* @brief Multihop prefix and 6LoWPAN context distribution
*
* @see [RFC 6775, section 8.1](https://tools.ietf.org/html/rfc6775#section-8.1)
*/
#ifndef CONFIG_GNRC_IPV6_NIB_MULTIHOP_P6C
# if CONFIG_GNRC_IPV6_NIB_6LR
# define CONFIG_GNRC_IPV6_NIB_MULTIHOP_P6C 1
# else
# define CONFIG_GNRC_IPV6_NIB_MULTIHOP_P6C 0
# endif
#endif
/**
* @brief Multihop duplicate address detection
*
* @see [RFC 6775, section 8.2](https://tools.ietf.org/html/rfc6775#section-8.2)
*/
#ifndef CONFIG_GNRC_IPV6_NIB_MULTIHOP_DAD
# define CONFIG_GNRC_IPV6_NIB_MULTIHOP_DAD 0
#endif
/** @} */
/**
* @brief Reset time in milliseconds for the reachability time
*
* @see [RFC 4861, section 6.3.4](https://tools.ietf.org/html/rfc4861#section-6.3.4)
*/
#ifndef CONFIG_GNRC_IPV6_NIB_REACH_TIME_RESET
# define CONFIG_GNRC_IPV6_NIB_REACH_TIME_RESET (7200000U)
#endif
/**
* @brief Disable router solicitations
*
* @warning Only do this if you know what you're doing
*/
#ifndef CONFIG_GNRC_IPV6_NIB_NO_RTR_SOL
# define CONFIG_GNRC_IPV6_NIB_NO_RTR_SOL 0
#endif
/**
* @brief Maximum link-layer address length (aligned)
*/
#ifndef CONFIG_GNRC_IPV6_NIB_L2ADDR_MAX_LEN
# define CONFIG_GNRC_IPV6_NIB_L2ADDR_MAX_LEN (8U)
#endif
/**
* @brief Number of default routers in the default router list.
*
* @attention This number has direct influence on the maximum number of
* default routers
*/
#ifndef CONFIG_GNRC_IPV6_NIB_DEFAULT_ROUTER_NUMOF
# define CONFIG_GNRC_IPV6_NIB_DEFAULT_ROUTER_NUMOF (1)
#endif
/**
* @brief Number of entries in NIB
*
* @attention This number has direct influence on the maximum number of
* neighbors and duplicate address detection table entries
*/
#ifndef CONFIG_GNRC_IPV6_NIB_NUMOF
# define CONFIG_GNRC_IPV6_NIB_NUMOF (4)
#endif
/**
* @brief Per-neighbor packet queue capacity
*
* If @ref CONFIG_GNRC_IPV6_NIB_QUEUE_PKT enabled, this is the maximum number
* of packets, per neighbor, awaiting packet resolution.
*
* @attention This MUST be leq UINT8_MAX
*/
#ifndef CONFIG_GNRC_IPV6_NIB_NBR_QUEUE_CAP
# define CONFIG_GNRC_IPV6_NIB_NBR_QUEUE_CAP (16)
#endif
/**
* @brief Number of off-link entries in NIB
*
* @attention This number is equal to the maximum number of forwarding table
* and prefix list entries in NIB
*/
#ifndef CONFIG_GNRC_IPV6_NIB_OFFL_NUMOF
# define CONFIG_GNRC_IPV6_NIB_OFFL_NUMOF (8)
#endif
#if CONFIG_GNRC_IPV6_NIB_MULTIHOP_P6C || defined(DOXYGEN)
/**
* @brief Number of authoritative border router entries in NIB
*/
# ifndef CONFIG_GNRC_IPV6_NIB_ABR_NUMOF
# define CONFIG_GNRC_IPV6_NIB_ABR_NUMOF (1)
# endif
#endif
#endif /* !CONFIG_KCONFIG_MODULE_GNRC_IPV6_NIB || DOXYGEN */
#ifdef __cplusplus
}
#endif
/** @} */