Loading...
Searching...
No Matches
_nib-6lr.h
Go to the documentation of this file.
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/ndp.h"
23#include "net/sixlowpan/nd.h"
24
25#include "_nib-arsm.h"
26#include "_nib-6ln.h"
27#include "_nib-internal.h"
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33#if IS_ACTIVE(CONFIG_GNRC_IPV6_NIB_6LR) || defined(DOXYGEN)
41static inline uint16_t _get_ar_state(const _nib_onl_entry_t *entry)
42{
44}
45
52static inline void _set_ar_state(_nib_onl_entry_t *entry, uint16_t state)
53{
55 entry->info |= state;
56}
57
67static inline bool _rtr_sol_on_6lr(const gnrc_netif_t *netif,
68 const icmpv6_hdr_t *icmpv6)
69{
70 (void)netif; /* gnrc_netif_is_6lr() might just evaluate to false */
71 return gnrc_netif_is_6lr(netif) && (icmpv6->type == ICMPV6_RTR_SOL);
72}
73
92uint8_t _reg_addr_upstream(gnrc_netif_t *netif, const ipv6_hdr_t *ipv6,
93 const icmpv6_hdr_t *icmpv6,
94 const sixlowpan_nd_opt_ar_t *aro,
95 const ndp_opt_t *sl2ao, _nib_onl_entry_t *nce);
96
113 const ndp_nbr_sol_t *nbr_sol,
114 const sixlowpan_nd_opt_ar_t *aro,
115 const ndp_opt_t *sl2ao);
116
117#else /* CONFIG_GNRC_IPV6_NIB_6LR || defined(DOXYGEN) */
118#define _rtr_sol_on_6lr(netif, icmpv6) (false)
119#define _get_ar_state(nbr) (_ADDR_REG_STATUS_IGNORE)
120#define _set_ar_state(nbr, state) (void)nbr; (void)state
121/* _reg_addr_upstream() doesn't make sense without 6LR so don't even use it
122 * => throw error in case it is compiled in => don't define it here as NOP macro
123 */
124#define _copy_and_handle_aro(netif, ipv6, icmpv6, aro, sl2ao) \
125 (NULL)
126#endif /* CONFIG_GNRC_IPV6_NIB_6LR || defined(DOXYGEN) */
127
128#ifdef __cplusplus
129}
130#endif
131
Definitions related to 6Lo node (6LN) functionality of the NIB.
static bool _rtr_sol_on_6lr(const gnrc_netif_t *netif, const icmpv6_hdr_t *icmpv6)
Checks if the received message is a router solicitation and the interface represents a 6Lo router.
Definition _nib-6lr.h:67
static uint16_t _get_ar_state(const _nib_onl_entry_t *entry)
Gets address registration state of a neighbor.
Definition _nib-6lr.h:41
gnrc_pktsnip_t * _copy_and_handle_aro(gnrc_netif_t *netif, const ipv6_hdr_t *ipv6, const ndp_nbr_sol_t *nbr_sol, const sixlowpan_nd_opt_ar_t *aro, const ndp_opt_t *sl2ao)
Handles and copies ARO from NS to NA.
static void _set_ar_state(_nib_onl_entry_t *entry, uint16_t state)
Sets address registration state of a neighbor.
Definition _nib-6lr.h:52
uint8_t _reg_addr_upstream(gnrc_netif_t *netif, const ipv6_hdr_t *ipv6, const icmpv6_hdr_t *icmpv6, const sixlowpan_nd_opt_ar_t *aro, const ndp_opt_t *sl2ao, _nib_onl_entry_t *nce)
Registers an address to the (upstream; in case of multihop DAD) router.
#define GNRC_IPV6_NIB_NC_INFO_AR_STATE_MASK
Mask for 6LoWPAN address registration (6Lo-AR) states.
Definition nc.h:109
struct gnrc_pktsnip gnrc_pktsnip_t
Type to represent parts (either headers or payload) of a packet, called snips.
#define ICMPV6_RTR_SOL
NDP router solicitation message.
Definition icmpv6.h:57
Configuration macro definitions for neighbor information base.
Common macros and compiler attributes/pragmas configuration.
IPv6 neighbor discovery message type definitions.
Message type and helper function definitions for 6LoWPAN-ND.
uint16_t info
Information flags.
Representation of a network interface.
Definition netif.h:137
General ICMPv6 message format.
Definition icmpv6.h:135
uint8_t type
message type
Definition icmpv6.h:136
Data type to represent an IPv6 packet header.
Definition hdr.h:63
Neighbor solicitation message format.
Definition ndp.h:253
General NDP option format.
Definition ndp.h:295
Address registration option format.
Definition nd.h:155