Commit b63bbc5006a0a62fabc81c4f77e95f16ff16f340

Authored by Thomas Graf
Committed by David S. Miller
1 parent ca860fb39b

[NEIGH]: Move netlink neighbour table bits to linux/neighbour.h

rtnetlink_rcv_msg() is not longer required to parse attributes
for the neighbour tables layer, remove dependency on obsolete and
buggy rta_buf.

Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 3 changed files with 94 additions and 103 deletions Side-by-side Diff

include/linux/neighbour.h
... ... @@ -62,5 +62,99 @@
62 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 +
  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 +
65 159 #endif
include/linux/rtnetlink.h
... ... @@ -384,107 +384,6 @@
384 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   -
414   -struct 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   -
428   -enum {
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   -
449   -struct ndtmsg
450   -{
451   - __u8 ndtm_family;
452   - __u8 ndtm_pad1;
453   - __u16 ndtm_pad2;
454   -};
455   -
456   -struct 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   -
469   -enum {
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 388 * General form of address family dependent message.
490 389 ****/
net/core/rtnetlink.c
... ... @@ -112,7 +112,6 @@
112 112 [RTM_FAM(RTM_NEWPREFIX)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
113 113 [RTM_FAM(RTM_GETMULTICAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
114 114 [RTM_FAM(RTM_GETANYCAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
115   - [RTM_FAM(RTM_NEWNEIGHTBL)] = NLMSG_LENGTH(sizeof(struct ndtmsg)),
116 115 };
117 116  
118 117 static const int rta_max[RTM_NR_FAMILIES] =
... ... @@ -125,7 +124,6 @@
125 124 [RTM_FAM(RTM_NEWTCLASS)] = TCA_MAX,
126 125 [RTM_FAM(RTM_NEWTFILTER)] = TCA_MAX,
127 126 [RTM_FAM(RTM_NEWACTION)] = TCAA_MAX,
128   - [RTM_FAM(RTM_NEWNEIGHTBL)] = NDTA_MAX,
129 127 };
130 128  
131 129 void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data)