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