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