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