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