Loading...
Searching...
No Matches
nc.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
19
20#include <stdbool.h>
21#include <stdint.h>
22
23#include "compiler_hints.h"
24#include "net/eui64.h"
25#include "net/gnrc/netif/hdr.h"
27#include "net/ipv6/addr.h"
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
45#define GNRC_IPV6_NIB_NC_INFO_NUD_STATE_MASK (0x0007)
46
50#define GNRC_IPV6_NIB_NC_INFO_NUD_STATE_UNMANAGED (0x0000)
51
55#define GNRC_IPV6_NIB_NC_INFO_NUD_STATE_UNREACHABLE (0x0001)
56
60#define GNRC_IPV6_NIB_NC_INFO_NUD_STATE_INCOMPLETE (0x0002)
61
65#define GNRC_IPV6_NIB_NC_INFO_NUD_STATE_STALE (0x0003)
66
70#define GNRC_IPV6_NIB_NC_INFO_NUD_STATE_DELAY (0x0004)
71
75#define GNRC_IPV6_NIB_NC_INFO_NUD_STATE_PROBE (0x0005)
76
80#define GNRC_IPV6_NIB_NC_INFO_NUD_STATE_REACHABLE (0x0006)
81
92#define GNRC_IPV6_NIB_NC_INFO_IS_ROUTER (0x0008)
93
97#define GNRC_IPV6_NIB_NC_INFO_IFACE_MASK (0x01f0)
98
102#define GNRC_IPV6_NIB_NC_INFO_IFACE_POS (4)
103
109#define GNRC_IPV6_NIB_NC_INFO_AR_STATE_MASK (0x0600)
110
114#define GNRC_IPV6_NIB_NC_INFO_AR_STATE_POS (9)
115
119#define GNRC_IPV6_NIB_NC_INFO_AR_STATE_GC (0x0000)
120
124#define GNRC_IPV6_NIB_NC_INFO_AR_STATE_TENTATIVE (0x0200)
125
129#define GNRC_IPV6_NIB_NC_INFO_AR_STATE_REGISTERED (0x0400)
130
134#define GNRC_IPV6_NIB_NC_INFO_AR_STATE_MANUAL (0x0600)
136
153
161static inline unsigned gnrc_ipv6_nib_nc_get_nud_state(const gnrc_ipv6_nib_nc_t *entry)
162{
164}
165
174static inline bool gnrc_ipv6_nib_nc_is_router(const gnrc_ipv6_nib_nc_t *entry)
175{
176 return (entry->info & GNRC_IPV6_NIB_NC_INFO_IS_ROUTER);
177}
178
187static inline unsigned gnrc_ipv6_nib_nc_get_iface(const gnrc_ipv6_nib_nc_t *entry)
188{
189 return (entry->info & GNRC_IPV6_NIB_NC_INFO_IFACE_MASK) >>
191}
192
200static inline unsigned gnrc_ipv6_nib_nc_get_ar_state(const gnrc_ipv6_nib_nc_t *entry)
201{
203}
204
231ACCESS(read_only, 3, 4)
232int gnrc_ipv6_nib_nc_set(const ipv6_addr_t *ipv6, unsigned iface,
233 const uint8_t *l2addr, size_t l2addr_len);
234
235#if IS_ACTIVE(CONFIG_GNRC_IPV6_NIB_6LN) || defined(DOXYGEN)
251ACCESS(read_only, 2, 3)
252int gnrc_ipv6_nib_nc_set_6ln(unsigned iface, const uint8_t *l2addr,
253 size_t l2addr_len);
254#else /* CONFIG_GNRC_IPV6_NIB_6LN */
255static inline int gnrc_ipv6_nib_nc_set_6ln(unsigned iface, const uint8_t *l2addr,
256 size_t l2addr_len)
257{
258 (void)iface;
259 (void)l2addr;
260 (void)l2addr_len;
261
262 return -ENOTSUP;
263}
264#endif /* CONFIG_GNRC_IPV6_NIB_6LN */
265
276void gnrc_ipv6_nib_nc_del(const ipv6_addr_t *ipv6, unsigned iface);
277
278#if IS_ACTIVE(CONFIG_GNRC_IPV6_NIB_ARSM) || defined(DOXYGEN)
292ACCESS(read_only, 2, 3)
293bool gnrc_ipv6_nib_nc_del_l2(unsigned iface, const uint8_t *l2addr, size_t l2addr_len);
294#endif /* CONFIG_GNRC_IPV6_NIB_ARSM */
295
314
348bool gnrc_ipv6_nib_nc_iter(unsigned iface, void **state,
349 gnrc_ipv6_nib_nc_t *nce);
350
359
360#ifdef __cplusplus
361}
362#endif
363
Common macros and compiler attributes/pragmas configuration.
#define ACCESS(mode, ptr_idx, size_idx)
Emit an attribute (if supported by the compiler) that declares how a function will access its paramet...
EUI-64 data type definition.
#define ENOTSUP
Not supported (may be the same value as [EOPNOTSUPP]).
Definition errno.h:129
#define CONFIG_GNRC_IPV6_NIB_L2ADDR_MAX_LEN
Maximum link-layer address length (aligned)
Definition conf.h:278
#define GNRC_IPV6_NIB_NC_INFO_NUD_STATE_MASK
Mask for neighbor unreachability detection (NUD) states.
Definition nc.h:45
void gnrc_ipv6_nib_nc_mark_reachable(const ipv6_addr_t *ipv6)
Mark neighbor with address ipv6 as reachable.
void gnrc_ipv6_nib_nc_print(gnrc_ipv6_nib_nc_t *nce)
Prints a neighbor cache entry.
void gnrc_ipv6_nib_nc_del(const ipv6_addr_t *ipv6, unsigned iface)
Deletes neighbor with address ipv6 from NIB.
static unsigned gnrc_ipv6_nib_nc_get_nud_state(const gnrc_ipv6_nib_nc_t *entry)
Gets neighbor unreachability state from entry.
Definition nc.h:161
static bool gnrc_ipv6_nib_nc_is_router(const gnrc_ipv6_nib_nc_t *entry)
Gets router flag of a neighbor.
Definition nc.h:174
#define GNRC_IPV6_NIB_NC_INFO_IFACE_POS
Shift position of interface identifier.
Definition nc.h:102
int gnrc_ipv6_nib_nc_set_6ln(unsigned iface, const uint8_t *l2addr, size_t l2addr_len)
Adds an unmanaged neighbor entry to the NIB if the interface represents a 6LN node and the IPv6 addre...
bool gnrc_ipv6_nib_nc_iter(unsigned iface, void **state, gnrc_ipv6_nib_nc_t *nce)
Iterates over all neighbor cache entries in the NIB.
#define GNRC_IPV6_NIB_NC_INFO_AR_STATE_MASK
Mask for 6LoWPAN address registration (6Lo-AR) states.
Definition nc.h:109
static unsigned gnrc_ipv6_nib_nc_get_ar_state(const gnrc_ipv6_nib_nc_t *entry)
Gets address registration state of an entry.
Definition nc.h:200
int gnrc_ipv6_nib_nc_set(const ipv6_addr_t *ipv6, unsigned iface, const uint8_t *l2addr, size_t l2addr_len)
Adds an unmanaged neighbor entry to NIB.
#define GNRC_IPV6_NIB_NC_INFO_IFACE_MASK
Mask for interface identifier.
Definition nc.h:97
static unsigned gnrc_ipv6_nib_nc_get_iface(const gnrc_ipv6_nib_nc_t *entry)
Gets interface from entry.
Definition nc.h:187
bool gnrc_ipv6_nib_nc_del_l2(unsigned iface, const uint8_t *l2addr, size_t l2addr_len)
Deletes neighbor with link-layer address l2addr from NIB.
#define GNRC_IPV6_NIB_NC_INFO_IS_ROUTER
gnrc_ipv6_nib_t::next_hop is router
Definition nc.h:92
Definitions for IPv6 addresses.
Configuration macro definitions for neighbor information base.
Generic network interface header.
Neighbor cache entry view on NIB.
Definition nc.h:140
uint8_t l2addr_len
Length of gnrc_ipv6_nib_nc_t::l2addr in bytes.
Definition nc.h:151
ipv6_addr_t ipv6
Neighbor's IPv6 address.
Definition nc.h:141
uint8_t l2addr[CONFIG_GNRC_IPV6_NIB_L2ADDR_MAX_LEN]
Neighbor's link-layer address.
Definition nc.h:145
uint16_t info
Neighbor information as defined in info values.
Definition nc.h:150
Data type to represent an IPv6 address.
Definition addr.h:64