144d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef __LINUX_NEIGHBOUR_H
244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define __LINUX_NEIGHBOUR_H
344d362409d5469aed47d19e7908d19bd194493aThomas Graf
444d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/netlink.h>
544d362409d5469aed47d19e7908d19bd194493aThomas Graf
644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct ndmsg
744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		ndm_family;
944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		ndm_pad1;
1044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u16		ndm_pad2;
1144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__s32		ndm_ifindex;
1244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u16		ndm_state;
1344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		ndm_flags;
1444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		ndm_type;
1544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
1644d362409d5469aed47d19e7908d19bd194493aThomas Graf
1744d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
1844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
1944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDA_UNSPEC,
2044d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDA_DST,
2144d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDA_LLADDR,
2244d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDA_CACHEINFO,
2344d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDA_PROBES,
2444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__NDA_MAX
2544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
2644d362409d5469aed47d19e7908d19bd194493aThomas Graf
2744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NDA_MAX (__NDA_MAX - 1)
2844d362409d5469aed47d19e7908d19bd194493aThomas Graf
2944d362409d5469aed47d19e7908d19bd194493aThomas Graf/*
3044d362409d5469aed47d19e7908d19bd194493aThomas Graf *	Neighbor Cache Entry Flags
3144d362409d5469aed47d19e7908d19bd194493aThomas Graf */
3244d362409d5469aed47d19e7908d19bd194493aThomas Graf
3344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NTF_PROXY	0x08	/* == ATF_PUBL */
3444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NTF_ROUTER	0x80
3544d362409d5469aed47d19e7908d19bd194493aThomas Graf
3644d362409d5469aed47d19e7908d19bd194493aThomas Graf/*
3744d362409d5469aed47d19e7908d19bd194493aThomas Graf *	Neighbor Cache Entry States.
3844d362409d5469aed47d19e7908d19bd194493aThomas Graf */
3944d362409d5469aed47d19e7908d19bd194493aThomas Graf
4044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NUD_INCOMPLETE	0x01
4144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NUD_REACHABLE	0x02
4244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NUD_STALE	0x04
4344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NUD_DELAY	0x08
4444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NUD_PROBE	0x10
4544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NUD_FAILED	0x20
4644d362409d5469aed47d19e7908d19bd194493aThomas Graf
4744d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Dummy states */
4844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NUD_NOARP	0x40
4944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NUD_PERMANENT	0x80
5044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NUD_NONE	0x00
5144d362409d5469aed47d19e7908d19bd194493aThomas Graf
5244d362409d5469aed47d19e7908d19bd194493aThomas Graf/* NUD_NOARP & NUD_PERMANENT are pseudostates, they never change
5344d362409d5469aed47d19e7908d19bd194493aThomas Graf   and make no address resolution or NUD.
5444d362409d5469aed47d19e7908d19bd194493aThomas Graf   NUD_PERMANENT is also cannot be deleted by garbage collectors.
5544d362409d5469aed47d19e7908d19bd194493aThomas Graf */
5644d362409d5469aed47d19e7908d19bd194493aThomas Graf
5744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nda_cacheinfo
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
5944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndm_confirmed;
6044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndm_used;
6144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndm_updated;
6244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndm_refcnt;
6344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
6444d362409d5469aed47d19e7908d19bd194493aThomas Graf
6544d362409d5469aed47d19e7908d19bd194493aThomas Graf/*****************************************************************
6644d362409d5469aed47d19e7908d19bd194493aThomas Graf *		Neighbour tables specific messages.
6744d362409d5469aed47d19e7908d19bd194493aThomas Graf *
6844d362409d5469aed47d19e7908d19bd194493aThomas Graf * To retrieve the neighbour tables send RTM_GETNEIGHTBL with the
6944d362409d5469aed47d19e7908d19bd194493aThomas Graf * NLM_F_DUMP flag set. Every neighbour table configuration is
7044d362409d5469aed47d19e7908d19bd194493aThomas Graf * spread over multiple messages to avoid running into message
7144d362409d5469aed47d19e7908d19bd194493aThomas Graf * size limits on systems with many interfaces. The first message
7244d362409d5469aed47d19e7908d19bd194493aThomas Graf * in the sequence transports all not device specific data such as
7344d362409d5469aed47d19e7908d19bd194493aThomas Graf * statistics, configuration, and the default parameter set.
7444d362409d5469aed47d19e7908d19bd194493aThomas Graf * This message is followed by 0..n messages carrying device
7544d362409d5469aed47d19e7908d19bd194493aThomas Graf * specific parameter sets.
7644d362409d5469aed47d19e7908d19bd194493aThomas Graf * Although the ordering should be sufficient, NDTA_NAME can be
7744d362409d5469aed47d19e7908d19bd194493aThomas Graf * used to identify sequences. The initial message can be identified
7844d362409d5469aed47d19e7908d19bd194493aThomas Graf * by checking for NDTA_CONFIG. The device specific messages do
7944d362409d5469aed47d19e7908d19bd194493aThomas Graf * not contain this TLV but have NDTPA_IFINDEX set to the
8044d362409d5469aed47d19e7908d19bd194493aThomas Graf * corresponding interface index.
8144d362409d5469aed47d19e7908d19bd194493aThomas Graf *
8244d362409d5469aed47d19e7908d19bd194493aThomas Graf * To change neighbour table attributes, send RTM_SETNEIGHTBL
8344d362409d5469aed47d19e7908d19bd194493aThomas Graf * with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3],
8444d362409d5469aed47d19e7908d19bd194493aThomas Graf * NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked
8544d362409d5469aed47d19e7908d19bd194493aThomas Graf * otherwise. Device specific parameter sets can be changed by
8644d362409d5469aed47d19e7908d19bd194493aThomas Graf * setting NDTPA_IFINDEX to the interface index of the corresponding
8744d362409d5469aed47d19e7908d19bd194493aThomas Graf * device.
8844d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/
8944d362409d5469aed47d19e7908d19bd194493aThomas Graf
9044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct ndt_stats
9144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
9244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64		ndts_allocs;
9344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64		ndts_destroys;
9444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64		ndts_hash_grows;
9544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64		ndts_res_failed;
9644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64		ndts_lookups;
9744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64		ndts_hits;
9844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64		ndts_rcv_probes_mcast;
9944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64		ndts_rcv_probes_ucast;
10044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64		ndts_periodic_gc_runs;
10144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64		ndts_forced_gc_runs;
10244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
10344d362409d5469aed47d19e7908d19bd194493aThomas Graf
10444d362409d5469aed47d19e7908d19bd194493aThomas Grafenum {
10544d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_UNSPEC,
10644d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_IFINDEX,			/* u32, unchangeable */
10744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_REFCNT,			/* u32, read-only */
10844d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_REACHABLE_TIME,		/* u64, read-only, msecs */
10944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_BASE_REACHABLE_TIME,	/* u64, msecs */
11044d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_RETRANS_TIME,		/* u64, msecs */
11144d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_GC_STALETIME,		/* u64, msecs */
11244d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_DELAY_PROBE_TIME,		/* u64, msecs */
11344d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_QUEUE_LEN,		/* u32 */
11444d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_APP_PROBES,		/* u32 */
11544d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_UCAST_PROBES,		/* u32 */
11644d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_MCAST_PROBES,		/* u32 */
11744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_ANYCAST_DELAY,		/* u64, msecs */
11844d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_PROXY_DELAY,		/* u64, msecs */
11944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_PROXY_QLEN,		/* u32 */
12044d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTPA_LOCKTIME,			/* u64, msecs */
12144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__NDTPA_MAX
12244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
12344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NDTPA_MAX (__NDTPA_MAX - 1)
12444d362409d5469aed47d19e7908d19bd194493aThomas Graf
12544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct ndtmsg
12644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
12744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		ndtm_family;
12844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		ndtm_pad1;
12944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u16		ndtm_pad2;
13044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
13144d362409d5469aed47d19e7908d19bd194493aThomas Graf
13244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct ndt_config
13344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
13444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u16		ndtc_key_len;
13544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u16		ndtc_entry_size;
13644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndtc_entries;
13744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndtc_last_flush;	/* delta to now in msecs */
13844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndtc_last_rand;		/* delta to now in msecs */
13944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndtc_hash_rnd;
14044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndtc_hash_mask;
14144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndtc_hash_chain_gc;
14244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		ndtc_proxy_qlen;
14344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
14444d362409d5469aed47d19e7908d19bd194493aThomas Graf
14544d362409d5469aed47d19e7908d19bd194493aThomas Grafenum {
14644d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTA_UNSPEC,
14744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTA_NAME,			/* char *, unchangeable */
14844d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTA_THRESH1,			/* u32 */
14944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTA_THRESH2,			/* u32 */
15044d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTA_THRESH3,			/* u32 */
15144d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTA_CONFIG,			/* struct ndt_config, read-only */
15244d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTA_PARMS,			/* nested TLV NDTPA_* */
15344d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTA_STATS,			/* struct ndt_stats, read-only */
15444d362409d5469aed47d19e7908d19bd194493aThomas Graf	NDTA_GC_INTERVAL,		/* u64, msecs */
15544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__NDTA_MAX
15644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
15744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NDTA_MAX (__NDTA_MAX - 1)
15844d362409d5469aed47d19e7908d19bd194493aThomas Graf
15944d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
160