1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef __LINUX_NEIGHBOUR_H
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define __LINUX_NEIGHBOUR_H
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <linux/types.h>
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <linux/netlink.h>
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct ndmsg {
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u8		ndm_family;
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u8		ndm_pad1;
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u16		ndm_pad2;
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__s32		ndm_ifindex;
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u16		ndm_state;
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u8		ndm_flags;
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u8		ndm_type;
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)enum {
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDA_UNSPEC,
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDA_DST,
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDA_LLADDR,
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDA_CACHEINFO,
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDA_PROBES,
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDA_VLAN,
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDA_PORT,
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDA_VNI,
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDA_IFINDEX,
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__NDA_MAX
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NDA_MAX (__NDA_MAX - 1)
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *	Neighbor Cache Entry Flags
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NTF_USE		0x01
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NTF_PROXY	0x08	/* == ATF_PUBL */
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NTF_ROUTER	0x80
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NTF_SELF	0x02
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NTF_MASTER	0x04
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *	Neighbor Cache Entry States.
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NUD_INCOMPLETE	0x01
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NUD_REACHABLE	0x02
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NUD_STALE	0x04
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NUD_DELAY	0x08
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NUD_PROBE	0x10
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NUD_FAILED	0x20
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Dummy states */
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NUD_NOARP	0x40
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NUD_PERMANENT	0x80
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NUD_NONE	0x00
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* NUD_NOARP & NUD_PERMANENT are pseudostates, they never change
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   and make no address resolution or NUD.
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   NUD_PERMANENT also cannot be deleted by garbage collectors.
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct nda_cacheinfo {
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndm_confirmed;
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndm_used;
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndm_updated;
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndm_refcnt;
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*****************************************************************
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *		Neighbour tables specific messages.
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * To retrieve the neighbour tables send RTM_GETNEIGHTBL with the
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * NLM_F_DUMP flag set. Every neighbour table configuration is
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * spread over multiple messages to avoid running into message
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * size limits on systems with many interfaces. The first message
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * in the sequence transports all not device specific data such as
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * statistics, configuration, and the default parameter set.
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * This message is followed by 0..n messages carrying device
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * specific parameter sets.
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Although the ordering should be sufficient, NDTA_NAME can be
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * used to identify sequences. The initial message can be identified
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * by checking for NDTA_CONFIG. The device specific messages do
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * not contain this TLV but have NDTPA_IFINDEX set to the
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * corresponding interface index.
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * To change neighbour table attributes, send RTM_SETNEIGHTBL
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3],
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * otherwise. Device specific parameter sets can be changed by
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * setting NDTPA_IFINDEX to the interface index of the corresponding
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * device.
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ****/
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct ndt_stats {
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u64		ndts_allocs;
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u64		ndts_destroys;
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u64		ndts_hash_grows;
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u64		ndts_res_failed;
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u64		ndts_lookups;
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u64		ndts_hits;
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u64		ndts_rcv_probes_mcast;
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u64		ndts_rcv_probes_ucast;
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u64		ndts_periodic_gc_runs;
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u64		ndts_forced_gc_runs;
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)enum {
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_UNSPEC,
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_IFINDEX,			/* u32, unchangeable */
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_REFCNT,			/* u32, read-only */
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_REACHABLE_TIME,		/* u64, read-only, msecs */
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_BASE_REACHABLE_TIME,	/* u64, msecs */
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_RETRANS_TIME,		/* u64, msecs */
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_GC_STALETIME,		/* u64, msecs */
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_DELAY_PROBE_TIME,		/* u64, msecs */
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_QUEUE_LEN,		/* u32 */
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_APP_PROBES,		/* u32 */
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_UCAST_PROBES,		/* u32 */
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_MCAST_PROBES,		/* u32 */
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_ANYCAST_DELAY,		/* u64, msecs */
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_PROXY_DELAY,		/* u64, msecs */
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_PROXY_QLEN,		/* u32 */
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_LOCKTIME,			/* u64, msecs */
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTPA_QUEUE_LENBYTES,		/* u32 */
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__NDTPA_MAX
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NDTPA_MAX (__NDTPA_MAX - 1)
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct ndtmsg {
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u8		ndtm_family;
133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u8		ndtm_pad1;
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u16		ndtm_pad2;
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct ndt_config {
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u16		ndtc_key_len;
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u16		ndtc_entry_size;
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndtc_entries;
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndtc_last_flush;	/* delta to now in msecs */
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndtc_last_rand;		/* delta to now in msecs */
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndtc_hash_rnd;
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndtc_hash_mask;
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndtc_hash_chain_gc;
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__u32		ndtc_proxy_qlen;
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)enum {
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTA_UNSPEC,
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTA_NAME,			/* char *, unchangeable */
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTA_THRESH1,			/* u32 */
153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTA_THRESH2,			/* u32 */
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTA_THRESH3,			/* u32 */
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTA_CONFIG,			/* struct ndt_config, read-only */
156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTA_PARMS,			/* nested TLV NDTPA_* */
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTA_STATS,			/* struct ndt_stats, read-only */
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	NDTA_GC_INTERVAL,		/* u64, msecs */
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	__NDTA_MAX
160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define NDTA_MAX (__NDTA_MAX - 1)
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)