xref: /aosp_15_r20/external/kernel-headers/original/uapi/linux/neighbour.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*f80ad8b4SAndroid Build Coastguard Worker #ifndef __LINUX_NEIGHBOUR_H
3*f80ad8b4SAndroid Build Coastguard Worker #define __LINUX_NEIGHBOUR_H
4*f80ad8b4SAndroid Build Coastguard Worker 
5*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h>
6*f80ad8b4SAndroid Build Coastguard Worker #include <linux/netlink.h>
7*f80ad8b4SAndroid Build Coastguard Worker 
8*f80ad8b4SAndroid Build Coastguard Worker struct ndmsg {
9*f80ad8b4SAndroid Build Coastguard Worker 	__u8		ndm_family;
10*f80ad8b4SAndroid Build Coastguard Worker 	__u8		ndm_pad1;
11*f80ad8b4SAndroid Build Coastguard Worker 	__u16		ndm_pad2;
12*f80ad8b4SAndroid Build Coastguard Worker 	__s32		ndm_ifindex;
13*f80ad8b4SAndroid Build Coastguard Worker 	__u16		ndm_state;
14*f80ad8b4SAndroid Build Coastguard Worker 	__u8		ndm_flags;
15*f80ad8b4SAndroid Build Coastguard Worker 	__u8		ndm_type;
16*f80ad8b4SAndroid Build Coastguard Worker };
17*f80ad8b4SAndroid Build Coastguard Worker 
18*f80ad8b4SAndroid Build Coastguard Worker enum {
19*f80ad8b4SAndroid Build Coastguard Worker 	NDA_UNSPEC,
20*f80ad8b4SAndroid Build Coastguard Worker 	NDA_DST,
21*f80ad8b4SAndroid Build Coastguard Worker 	NDA_LLADDR,
22*f80ad8b4SAndroid Build Coastguard Worker 	NDA_CACHEINFO,
23*f80ad8b4SAndroid Build Coastguard Worker 	NDA_PROBES,
24*f80ad8b4SAndroid Build Coastguard Worker 	NDA_VLAN,
25*f80ad8b4SAndroid Build Coastguard Worker 	NDA_PORT,
26*f80ad8b4SAndroid Build Coastguard Worker 	NDA_VNI,
27*f80ad8b4SAndroid Build Coastguard Worker 	NDA_IFINDEX,
28*f80ad8b4SAndroid Build Coastguard Worker 	NDA_MASTER,
29*f80ad8b4SAndroid Build Coastguard Worker 	NDA_LINK_NETNSID,
30*f80ad8b4SAndroid Build Coastguard Worker 	NDA_SRC_VNI,
31*f80ad8b4SAndroid Build Coastguard Worker 	NDA_PROTOCOL,  /* Originator of entry */
32*f80ad8b4SAndroid Build Coastguard Worker 	NDA_NH_ID,
33*f80ad8b4SAndroid Build Coastguard Worker 	NDA_FDB_EXT_ATTRS,
34*f80ad8b4SAndroid Build Coastguard Worker 	NDA_FLAGS_EXT,
35*f80ad8b4SAndroid Build Coastguard Worker 	NDA_NDM_STATE_MASK,
36*f80ad8b4SAndroid Build Coastguard Worker 	NDA_NDM_FLAGS_MASK,
37*f80ad8b4SAndroid Build Coastguard Worker 	__NDA_MAX
38*f80ad8b4SAndroid Build Coastguard Worker };
39*f80ad8b4SAndroid Build Coastguard Worker 
40*f80ad8b4SAndroid Build Coastguard Worker #define NDA_MAX (__NDA_MAX - 1)
41*f80ad8b4SAndroid Build Coastguard Worker 
42*f80ad8b4SAndroid Build Coastguard Worker /*
43*f80ad8b4SAndroid Build Coastguard Worker  *	Neighbor Cache Entry Flags
44*f80ad8b4SAndroid Build Coastguard Worker  */
45*f80ad8b4SAndroid Build Coastguard Worker 
46*f80ad8b4SAndroid Build Coastguard Worker #define NTF_USE		(1 << 0)
47*f80ad8b4SAndroid Build Coastguard Worker #define NTF_SELF	(1 << 1)
48*f80ad8b4SAndroid Build Coastguard Worker #define NTF_MASTER	(1 << 2)
49*f80ad8b4SAndroid Build Coastguard Worker #define NTF_PROXY	(1 << 3)	/* == ATF_PUBL */
50*f80ad8b4SAndroid Build Coastguard Worker #define NTF_EXT_LEARNED	(1 << 4)
51*f80ad8b4SAndroid Build Coastguard Worker #define NTF_OFFLOADED   (1 << 5)
52*f80ad8b4SAndroid Build Coastguard Worker #define NTF_STICKY	(1 << 6)
53*f80ad8b4SAndroid Build Coastguard Worker #define NTF_ROUTER	(1 << 7)
54*f80ad8b4SAndroid Build Coastguard Worker /* Extended flags under NDA_FLAGS_EXT: */
55*f80ad8b4SAndroid Build Coastguard Worker #define NTF_EXT_MANAGED		(1 << 0)
56*f80ad8b4SAndroid Build Coastguard Worker #define NTF_EXT_LOCKED		(1 << 1)
57*f80ad8b4SAndroid Build Coastguard Worker 
58*f80ad8b4SAndroid Build Coastguard Worker /*
59*f80ad8b4SAndroid Build Coastguard Worker  *	Neighbor Cache Entry States.
60*f80ad8b4SAndroid Build Coastguard Worker  */
61*f80ad8b4SAndroid Build Coastguard Worker 
62*f80ad8b4SAndroid Build Coastguard Worker #define NUD_INCOMPLETE	0x01
63*f80ad8b4SAndroid Build Coastguard Worker #define NUD_REACHABLE	0x02
64*f80ad8b4SAndroid Build Coastguard Worker #define NUD_STALE	0x04
65*f80ad8b4SAndroid Build Coastguard Worker #define NUD_DELAY	0x08
66*f80ad8b4SAndroid Build Coastguard Worker #define NUD_PROBE	0x10
67*f80ad8b4SAndroid Build Coastguard Worker #define NUD_FAILED	0x20
68*f80ad8b4SAndroid Build Coastguard Worker 
69*f80ad8b4SAndroid Build Coastguard Worker /* Dummy states */
70*f80ad8b4SAndroid Build Coastguard Worker #define NUD_NOARP	0x40
71*f80ad8b4SAndroid Build Coastguard Worker #define NUD_PERMANENT	0x80
72*f80ad8b4SAndroid Build Coastguard Worker #define NUD_NONE	0x00
73*f80ad8b4SAndroid Build Coastguard Worker 
74*f80ad8b4SAndroid Build Coastguard Worker /* NUD_NOARP & NUD_PERMANENT are pseudostates, they never change and make no
75*f80ad8b4SAndroid Build Coastguard Worker  * address resolution or NUD.
76*f80ad8b4SAndroid Build Coastguard Worker  *
77*f80ad8b4SAndroid Build Coastguard Worker  * NUD_PERMANENT also cannot be deleted by garbage collectors. This holds true
78*f80ad8b4SAndroid Build Coastguard Worker  * for dynamic entries with NTF_EXT_LEARNED flag as well. However, upon carrier
79*f80ad8b4SAndroid Build Coastguard Worker  * down event, NUD_PERMANENT entries are not flushed whereas NTF_EXT_LEARNED
80*f80ad8b4SAndroid Build Coastguard Worker  * flagged entries explicitly are (which is also consistent with the routing
81*f80ad8b4SAndroid Build Coastguard Worker  * subsystem).
82*f80ad8b4SAndroid Build Coastguard Worker  *
83*f80ad8b4SAndroid Build Coastguard Worker  * When NTF_EXT_LEARNED is set for a bridge fdb entry the different cache entry
84*f80ad8b4SAndroid Build Coastguard Worker  * states don't make sense and thus are ignored. Such entries don't age and
85*f80ad8b4SAndroid Build Coastguard Worker  * can roam.
86*f80ad8b4SAndroid Build Coastguard Worker  *
87*f80ad8b4SAndroid Build Coastguard Worker  * NTF_EXT_MANAGED flagged neigbor entries are managed by the kernel on behalf
88*f80ad8b4SAndroid Build Coastguard Worker  * of a user space control plane, and automatically refreshed so that (if
89*f80ad8b4SAndroid Build Coastguard Worker  * possible) they remain in NUD_REACHABLE state.
90*f80ad8b4SAndroid Build Coastguard Worker  *
91*f80ad8b4SAndroid Build Coastguard Worker  * NTF_EXT_LOCKED flagged bridge FDB entries are entries generated by the
92*f80ad8b4SAndroid Build Coastguard Worker  * bridge in response to a host trying to communicate via a locked bridge port
93*f80ad8b4SAndroid Build Coastguard Worker  * with MAB enabled. Their purpose is to notify user space that a host requires
94*f80ad8b4SAndroid Build Coastguard Worker  * authentication.
95*f80ad8b4SAndroid Build Coastguard Worker  */
96*f80ad8b4SAndroid Build Coastguard Worker 
97*f80ad8b4SAndroid Build Coastguard Worker struct nda_cacheinfo {
98*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndm_confirmed;
99*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndm_used;
100*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndm_updated;
101*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndm_refcnt;
102*f80ad8b4SAndroid Build Coastguard Worker };
103*f80ad8b4SAndroid Build Coastguard Worker 
104*f80ad8b4SAndroid Build Coastguard Worker /*****************************************************************
105*f80ad8b4SAndroid Build Coastguard Worker  *		Neighbour tables specific messages.
106*f80ad8b4SAndroid Build Coastguard Worker  *
107*f80ad8b4SAndroid Build Coastguard Worker  * To retrieve the neighbour tables send RTM_GETNEIGHTBL with the
108*f80ad8b4SAndroid Build Coastguard Worker  * NLM_F_DUMP flag set. Every neighbour table configuration is
109*f80ad8b4SAndroid Build Coastguard Worker  * spread over multiple messages to avoid running into message
110*f80ad8b4SAndroid Build Coastguard Worker  * size limits on systems with many interfaces. The first message
111*f80ad8b4SAndroid Build Coastguard Worker  * in the sequence transports all not device specific data such as
112*f80ad8b4SAndroid Build Coastguard Worker  * statistics, configuration, and the default parameter set.
113*f80ad8b4SAndroid Build Coastguard Worker  * This message is followed by 0..n messages carrying device
114*f80ad8b4SAndroid Build Coastguard Worker  * specific parameter sets.
115*f80ad8b4SAndroid Build Coastguard Worker  * Although the ordering should be sufficient, NDTA_NAME can be
116*f80ad8b4SAndroid Build Coastguard Worker  * used to identify sequences. The initial message can be identified
117*f80ad8b4SAndroid Build Coastguard Worker  * by checking for NDTA_CONFIG. The device specific messages do
118*f80ad8b4SAndroid Build Coastguard Worker  * not contain this TLV but have NDTPA_IFINDEX set to the
119*f80ad8b4SAndroid Build Coastguard Worker  * corresponding interface index.
120*f80ad8b4SAndroid Build Coastguard Worker  *
121*f80ad8b4SAndroid Build Coastguard Worker  * To change neighbour table attributes, send RTM_SETNEIGHTBL
122*f80ad8b4SAndroid Build Coastguard Worker  * with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3],
123*f80ad8b4SAndroid Build Coastguard Worker  * NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked
124*f80ad8b4SAndroid Build Coastguard Worker  * otherwise. Device specific parameter sets can be changed by
125*f80ad8b4SAndroid Build Coastguard Worker  * setting NDTPA_IFINDEX to the interface index of the corresponding
126*f80ad8b4SAndroid Build Coastguard Worker  * device.
127*f80ad8b4SAndroid Build Coastguard Worker  ****/
128*f80ad8b4SAndroid Build Coastguard Worker 
129*f80ad8b4SAndroid Build Coastguard Worker struct ndt_stats {
130*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_allocs;
131*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_destroys;
132*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_hash_grows;
133*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_res_failed;
134*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_lookups;
135*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_hits;
136*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_rcv_probes_mcast;
137*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_rcv_probes_ucast;
138*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_periodic_gc_runs;
139*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_forced_gc_runs;
140*f80ad8b4SAndroid Build Coastguard Worker 	__u64		ndts_table_fulls;
141*f80ad8b4SAndroid Build Coastguard Worker };
142*f80ad8b4SAndroid Build Coastguard Worker 
143*f80ad8b4SAndroid Build Coastguard Worker enum {
144*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_UNSPEC,
145*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_IFINDEX,			/* u32, unchangeable */
146*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_REFCNT,			/* u32, read-only */
147*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_REACHABLE_TIME,		/* u64, read-only, msecs */
148*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_BASE_REACHABLE_TIME,	/* u64, msecs */
149*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_RETRANS_TIME,		/* u64, msecs */
150*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_GC_STALETIME,		/* u64, msecs */
151*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_DELAY_PROBE_TIME,		/* u64, msecs */
152*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_QUEUE_LEN,		/* u32 */
153*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_APP_PROBES,		/* u32 */
154*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_UCAST_PROBES,		/* u32 */
155*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_MCAST_PROBES,		/* u32 */
156*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_ANYCAST_DELAY,		/* u64, msecs */
157*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_PROXY_DELAY,		/* u64, msecs */
158*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_PROXY_QLEN,		/* u32 */
159*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_LOCKTIME,			/* u64, msecs */
160*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_QUEUE_LENBYTES,		/* u32 */
161*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_MCAST_REPROBES,		/* u32 */
162*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_PAD,
163*f80ad8b4SAndroid Build Coastguard Worker 	NDTPA_INTERVAL_PROBE_TIME_MS,	/* u64, msecs */
164*f80ad8b4SAndroid Build Coastguard Worker 	__NDTPA_MAX
165*f80ad8b4SAndroid Build Coastguard Worker };
166*f80ad8b4SAndroid Build Coastguard Worker #define NDTPA_MAX (__NDTPA_MAX - 1)
167*f80ad8b4SAndroid Build Coastguard Worker 
168*f80ad8b4SAndroid Build Coastguard Worker struct ndtmsg {
169*f80ad8b4SAndroid Build Coastguard Worker 	__u8		ndtm_family;
170*f80ad8b4SAndroid Build Coastguard Worker 	__u8		ndtm_pad1;
171*f80ad8b4SAndroid Build Coastguard Worker 	__u16		ndtm_pad2;
172*f80ad8b4SAndroid Build Coastguard Worker };
173*f80ad8b4SAndroid Build Coastguard Worker 
174*f80ad8b4SAndroid Build Coastguard Worker struct ndt_config {
175*f80ad8b4SAndroid Build Coastguard Worker 	__u16		ndtc_key_len;
176*f80ad8b4SAndroid Build Coastguard Worker 	__u16		ndtc_entry_size;
177*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndtc_entries;
178*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndtc_last_flush;	/* delta to now in msecs */
179*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndtc_last_rand;		/* delta to now in msecs */
180*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndtc_hash_rnd;
181*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndtc_hash_mask;
182*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndtc_hash_chain_gc;
183*f80ad8b4SAndroid Build Coastguard Worker 	__u32		ndtc_proxy_qlen;
184*f80ad8b4SAndroid Build Coastguard Worker };
185*f80ad8b4SAndroid Build Coastguard Worker 
186*f80ad8b4SAndroid Build Coastguard Worker enum {
187*f80ad8b4SAndroid Build Coastguard Worker 	NDTA_UNSPEC,
188*f80ad8b4SAndroid Build Coastguard Worker 	NDTA_NAME,			/* char *, unchangeable */
189*f80ad8b4SAndroid Build Coastguard Worker 	NDTA_THRESH1,			/* u32 */
190*f80ad8b4SAndroid Build Coastguard Worker 	NDTA_THRESH2,			/* u32 */
191*f80ad8b4SAndroid Build Coastguard Worker 	NDTA_THRESH3,			/* u32 */
192*f80ad8b4SAndroid Build Coastguard Worker 	NDTA_CONFIG,			/* struct ndt_config, read-only */
193*f80ad8b4SAndroid Build Coastguard Worker 	NDTA_PARMS,			/* nested TLV NDTPA_* */
194*f80ad8b4SAndroid Build Coastguard Worker 	NDTA_STATS,			/* struct ndt_stats, read-only */
195*f80ad8b4SAndroid Build Coastguard Worker 	NDTA_GC_INTERVAL,		/* u64, msecs */
196*f80ad8b4SAndroid Build Coastguard Worker 	NDTA_PAD,
197*f80ad8b4SAndroid Build Coastguard Worker 	__NDTA_MAX
198*f80ad8b4SAndroid Build Coastguard Worker };
199*f80ad8b4SAndroid Build Coastguard Worker #define NDTA_MAX (__NDTA_MAX - 1)
200*f80ad8b4SAndroid Build Coastguard Worker 
201*f80ad8b4SAndroid Build Coastguard Worker  /* FDB activity notification bits used in NFEA_ACTIVITY_NOTIFY:
202*f80ad8b4SAndroid Build Coastguard Worker   * - FDB_NOTIFY_BIT - notify on activity/expire for any entry
203*f80ad8b4SAndroid Build Coastguard Worker   * - FDB_NOTIFY_INACTIVE_BIT - mark as inactive to avoid multiple notifications
204*f80ad8b4SAndroid Build Coastguard Worker   */
205*f80ad8b4SAndroid Build Coastguard Worker enum {
206*f80ad8b4SAndroid Build Coastguard Worker 	FDB_NOTIFY_BIT		= (1 << 0),
207*f80ad8b4SAndroid Build Coastguard Worker 	FDB_NOTIFY_INACTIVE_BIT	= (1 << 1)
208*f80ad8b4SAndroid Build Coastguard Worker };
209*f80ad8b4SAndroid Build Coastguard Worker 
210*f80ad8b4SAndroid Build Coastguard Worker /* embedded into NDA_FDB_EXT_ATTRS:
211*f80ad8b4SAndroid Build Coastguard Worker  * [NDA_FDB_EXT_ATTRS] = {
212*f80ad8b4SAndroid Build Coastguard Worker  *     [NFEA_ACTIVITY_NOTIFY]
213*f80ad8b4SAndroid Build Coastguard Worker  *     ...
214*f80ad8b4SAndroid Build Coastguard Worker  * }
215*f80ad8b4SAndroid Build Coastguard Worker  */
216*f80ad8b4SAndroid Build Coastguard Worker enum {
217*f80ad8b4SAndroid Build Coastguard Worker 	NFEA_UNSPEC,
218*f80ad8b4SAndroid Build Coastguard Worker 	NFEA_ACTIVITY_NOTIFY,
219*f80ad8b4SAndroid Build Coastguard Worker 	NFEA_DONT_REFRESH,
220*f80ad8b4SAndroid Build Coastguard Worker 	__NFEA_MAX
221*f80ad8b4SAndroid Build Coastguard Worker };
222*f80ad8b4SAndroid Build Coastguard Worker #define NFEA_MAX (__NFEA_MAX - 1)
223*f80ad8b4SAndroid Build Coastguard Worker 
224*f80ad8b4SAndroid Build Coastguard Worker #endif
225