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