aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/neighbour.h94
-rw-r--r--include/linux/rtnetlink.h101
-rw-r--r--net/core/rtnetlink.c2
3 files changed, 94 insertions, 103 deletions
diff --git a/include/linux/neighbour.h b/include/linux/neighbour.h
index 8e8293d86fbb..bd3bbf668cdb 100644
--- a/include/linux/neighbour.h
+++ b/include/linux/neighbour.h
@@ -62,4 +62,98 @@ struct nda_cacheinfo
62 __u32 ndm_refcnt; 62 __u32 ndm_refcnt;
63}; 63};
64 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
90struct 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
104enum {
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
125struct ndtmsg
126{
127 __u8 ndtm_family;
128 __u8 ndtm_pad1;
129 __u16 ndtm_pad2;
130};
131
132struct 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
145enum {
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
65#endif 159#endif
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
index 9750f0214c22..784a1a29490e 100644
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -384,107 +384,6 @@ struct rta_session
384 } u; 384 } u;
385}; 385};
386 386
387
388
389/*****************************************************************
390 * Neighbour tables specific messages.
391 *
392 * To retrieve the neighbour tables send RTM_GETNEIGHTBL with the
393 * NLM_F_DUMP flag set. Every neighbour table configuration is
394 * spread over multiple messages to avoid running into message
395 * size limits on systems with many interfaces. The first message
396 * in the sequence transports all not device specific data such as
397 * statistics, configuration, and the default parameter set.
398 * This message is followed by 0..n messages carrying device
399 * specific parameter sets.
400 * Although the ordering should be sufficient, NDTA_NAME can be
401 * used to identify sequences. The initial message can be identified
402 * by checking for NDTA_CONFIG. The device specific messages do
403 * not contain this TLV but have NDTPA_IFINDEX set to the
404 * corresponding interface index.
405 *
406 * To change neighbour table attributes, send RTM_SETNEIGHTBL
407 * with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3],
408 * NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked
409 * otherwise. Device specific parameter sets can be changed by
410 * setting NDTPA_IFINDEX to the interface index of the corresponding
411 * device.
412 ****/
413
414struct ndt_stats
415{
416 __u64 ndts_allocs;
417 __u64 ndts_destroys;
418 __u64 ndts_hash_grows;
419 __u64 ndts_res_failed;
420 __u64 ndts_lookups;
421 __u64 ndts_hits;
422 __u64 ndts_rcv_probes_mcast;
423 __u64 ndts_rcv_probes_ucast;
424 __u64 ndts_periodic_gc_runs;
425 __u64 ndts_forced_gc_runs;
426};
427
428enum {
429 NDTPA_UNSPEC,
430 NDTPA_IFINDEX, /* u32, unchangeable */
431 NDTPA_REFCNT, /* u32, read-only */
432 NDTPA_REACHABLE_TIME, /* u64, read-only, msecs */
433 NDTPA_BASE_REACHABLE_TIME, /* u64, msecs */
434 NDTPA_RETRANS_TIME, /* u64, msecs */
435 NDTPA_GC_STALETIME, /* u64, msecs */
436 NDTPA_DELAY_PROBE_TIME, /* u64, msecs */
437 NDTPA_QUEUE_LEN, /* u32 */
438 NDTPA_APP_PROBES, /* u32 */
439 NDTPA_UCAST_PROBES, /* u32 */
440 NDTPA_MCAST_PROBES, /* u32 */
441 NDTPA_ANYCAST_DELAY, /* u64, msecs */
442 NDTPA_PROXY_DELAY, /* u64, msecs */
443 NDTPA_PROXY_QLEN, /* u32 */
444 NDTPA_LOCKTIME, /* u64, msecs */
445 __NDTPA_MAX
446};
447#define NDTPA_MAX (__NDTPA_MAX - 1)
448
449struct ndtmsg
450{
451 __u8 ndtm_family;
452 __u8 ndtm_pad1;
453 __u16 ndtm_pad2;
454};
455
456struct ndt_config
457{
458 __u16 ndtc_key_len;
459 __u16 ndtc_entry_size;
460 __u32 ndtc_entries;
461 __u32 ndtc_last_flush; /* delta to now in msecs */
462 __u32 ndtc_last_rand; /* delta to now in msecs */
463 __u32 ndtc_hash_rnd;
464 __u32 ndtc_hash_mask;
465 __u32 ndtc_hash_chain_gc;
466 __u32 ndtc_proxy_qlen;
467};
468
469enum {
470 NDTA_UNSPEC,
471 NDTA_NAME, /* char *, unchangeable */
472 NDTA_THRESH1, /* u32 */
473 NDTA_THRESH2, /* u32 */
474 NDTA_THRESH3, /* u32 */
475 NDTA_CONFIG, /* struct ndt_config, read-only */
476 NDTA_PARMS, /* nested TLV NDTPA_* */
477 NDTA_STATS, /* struct ndt_stats, read-only */
478 NDTA_GC_INTERVAL, /* u64, msecs */
479 __NDTA_MAX
480};
481#define NDTA_MAX (__NDTA_MAX - 1)
482
483#define NDTA_RTA(r) ((struct rtattr*)(((char*)(r)) + \
484 NLMSG_ALIGN(sizeof(struct ndtmsg))))
485#define NDTA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndtmsg))
486
487
488/**** 387/****
489 * General form of address family dependent message. 388 * General form of address family dependent message.
490 ****/ 389 ****/
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 78ccbd4c4e37..a1b783a6afc6 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -112,7 +112,6 @@ static const int rtm_min[RTM_NR_FAMILIES] =
112 [RTM_FAM(RTM_NEWPREFIX)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)), 112 [RTM_FAM(RTM_NEWPREFIX)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
113 [RTM_FAM(RTM_GETMULTICAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)), 113 [RTM_FAM(RTM_GETMULTICAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
114 [RTM_FAM(RTM_GETANYCAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)), 114 [RTM_FAM(RTM_GETANYCAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
115 [RTM_FAM(RTM_NEWNEIGHTBL)] = NLMSG_LENGTH(sizeof(struct ndtmsg)),
116}; 115};
117 116
118static const int rta_max[RTM_NR_FAMILIES] = 117static const int rta_max[RTM_NR_FAMILIES] =
@@ -125,7 +124,6 @@ static const int rta_max[RTM_NR_FAMILIES] =
125 [RTM_FAM(RTM_NEWTCLASS)] = TCA_MAX, 124 [RTM_FAM(RTM_NEWTCLASS)] = TCA_MAX,
126 [RTM_FAM(RTM_NEWTFILTER)] = TCA_MAX, 125 [RTM_FAM(RTM_NEWTFILTER)] = TCA_MAX,
127 [RTM_FAM(RTM_NEWACTION)] = TCAA_MAX, 126 [RTM_FAM(RTM_NEWACTION)] = TCAA_MAX,
128 [RTM_FAM(RTM_NEWNEIGHTBL)] = NDTA_MAX,
129}; 127};
130 128
131void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data) 129void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data)