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