Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

authored by

Thomas Graf and committed by
David S. Miller
b63bbc50 ca860fb3

+94 -103
+94
include/linux/neighbour.h
··· 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
-101
include/linux/rtnetlink.h
··· 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 ****/
-2
net/core/rtnetlink.c
··· 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] = ··· 124 125 [RTM_FAM(RTM_NEWTCLASS)] = TCA_MAX, 125 126 [RTM_FAM(RTM_NEWTFILTER)] = TCA_MAX, 126 127 [RTM_FAM(RTM_NEWACTION)] = TCAA_MAX, 127 - [RTM_FAM(RTM_NEWNEIGHTBL)] = NDTA_MAX, 128 128 }; 129 129 130 130 void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data)