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