Loading...
Searching...
No Matches
_nib-router.h
1/*
2 * SPDX-FileCopyrightText: 2017 Freie Universität Berlin
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
18
19#include <kernel_defines.h>
20
22#include "net/gnrc/netif/internal.h"
23#include "net/gnrc/netif/ipv6.h"
24#include "net/ipv6/addr.h"
25#include "net/ndp.h"
26
27#include "_nib-internal.h"
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33#if IS_ACTIVE(CONFIG_GNRC_IPV6_NIB_ROUTER) || defined(DOXYGEN)
39static inline void _init_iface_router(gnrc_netif_t *netif)
40{
42 netif->ipv6.last_ra = UINT32_MAX;
43 netif->ipv6.ra_sent = 0;
45
48 }
49
52 }
53}
54
68static inline void _call_route_info_cb(gnrc_netif_t *netif, unsigned type,
69 const ipv6_addr_t *ctx_addr,
70 const void *ctx)
71{
72 assert(netif != NULL);
73 if (netif->ipv6.route_info_cb != NULL) {
74 netif->ipv6.route_info_cb(type, ctx_addr, ctx);
75 }
76}
77
83void _handle_reply_rs(_nib_onl_entry_t *host);
84
91void _handle_snd_mc_ra(gnrc_netif_t *netif);
92
100void _set_rtr_adv(gnrc_netif_t *netif);
101
114void _snd_rtr_advs(gnrc_netif_t *netif, const ipv6_addr_t *dst,
115 bool final);
124void _snd_rtr_advs_drop_pfx(gnrc_netif_t *netif, const ipv6_addr_t *dst,
125 _nib_offl_entry_t *pfx);
126#else /* CONFIG_GNRC_IPV6_NIB_ROUTER */
127#define _init_iface_router(netif) (void)netif
128#define _call_route_info_cb(netif, type, ctx_addr, ctx) (void)netif; \
129 (void)type; \
130 (void)ctx_addr; \
131 (void)ctx
132#define _handle_reply_rs(host) (void)host
133#define _handle_snd_mc_ra(netif) (void)netif
134#define _set_rtr_adv(netif) (void)netif
135#define _snd_rtr_advs(netif, dst, final) (void)netif; \
136 (void)dst; \
137 (void)final
138#define _snd_rtr_advs_drop_pfx(netif, dst, pfx) (void)netif; \
139 (void)dst; \
140 (void)pfx;
141#endif /* CONFIG_GNRC_IPV6_NIB_ROUTER */
142
143#ifdef __cplusplus
144}
145#endif
146
#define assert(cond)
abort the program if assertion is false
Definition assert.h:143
#define GNRC_NETIF_FLAGS_IPV6_RTR_ADV
Network interface advertises itself as an IPv6 router (implies GNRC_NETIF_FLAGS_IPV6_FORWARDING to be...
Definition flags.h:55
#define GNRC_NETIF_FLAGS_6LO_ABR
This interface acts as a 6Lo border router to the LLN.
Definition flags.h:100
#define GNRC_NETIF_FLAGS_IPV6_FORWARDING
Network interface is enabled for IPv6 forwarding.
Definition flags.h:49
IPv6 definitions for Network interface API.
#define CONFIG_GNRC_IPV6_NIB_ADV_ROUTER
activate router advertising at interface start-up
Definition conf.h:127
#define CONFIG_GNRC_IPV6_NIB_ABR
activate authoritative border router functionality at interface start-up
Definition conf.h:141
static void _init_iface_router(gnrc_netif_t *netif)
Initializes interface for router behavior.
Definition _nib-router.h:39
#define NDP_RTR_LTIME_SEC
default of AdvDefaultLifetime (in sec)
Definition ndp.h:152
Definitions for IPv6 addresses.
Configuration macro definitions for neighbor information base.
Common macros and compiler attributes/pragmas configuration.
#define IS_ACTIVE(macro)
Allows to verify a macro definition outside the preprocessor.
Definition modules.h:56
IPv6 neighbor discovery message type definitions.
Off-link NIB entry.
uint8_t ra_sent
number of unsolicited router advertisements sent
Definition ipv6.h:224
uint16_t rtr_ltime
(Advertised) Router lifetime (default 1800).
Definition ipv6.h:212
uint32_t last_ra
Timestamp in milliseconds of last unsolicited router advertisement.
Definition ipv6.h:174
void(* route_info_cb)(unsigned type, const ipv6_addr_t *ctx_addr, const void *ctx)
Route info callback.
Definition ipv6.h:123
Representation of a network interface.
Definition netif.h:137
uint32_t flags
Flags for the interface.
Definition netif.h:159
gnrc_netif_ipv6_t ipv6
IPv6 component.
Definition netif.h:149
Data type to represent an IPv6 address.
Definition addr.h:64