RFC : Increase number of possible routing tables
Get series with b4
b4 am [email protected]Versions newest first
- v1 RFC Latest4 patches 15 repliesIn review
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/4 | : Use u32 for routing table IDsinclude/ include/ net/ +8 more | +36 | 0 replies | |
| 2/4 | : Introduce RTA_TABLE routing attributeinclude/ net/ net/ +7 more | +29 | 0 replies | |
| 3/4 | : Increase number of possible routing tables to 2^32include/ include/ net/ +3 more | +100 | 0 replies | |
| 4/4 | : Increase number of possible routing tables to 2^32include/ net/ net/ +1 more | +90 | 2 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [RFC NET 00/04]: Increase number of possible routing tables
I took on Ben's challenge to increase the number of possible routing tables, these are the resulting patches.
The table IDs are changed to 32 bit values and are contained in a new netlink routing attribute. For compatibility rtm_table in struct rtmsg can still be used to access the first 255 tables and contains the low 8 bit of the table ID in case of dumps. Unfortunately there are no invalid values for rtm_table, so the best userspace can do in case of a new iproute version that tries to access tables > 255 on an old kernel is to use RTM_UNSPEC (0) for rtm_table, which will make the kernel allocate an empty table instead of silently adding routes to a more or less random table. The iproute patch will follow shortly.
The hash tables are statically sized since on-the-fly resizing would require introducing locking in the packet processing path (currently we need none), if this is a problem we could just directly attach table references to rules, since tables are never deleted or freed this would be a simple change.
One spot is still missing (nl_fib_lookup), so these patches are purely a RFC for now. Tested only with IPv4, I mainly converted DECNET as well to keep it in sync and because iteration over all possible table values, as done in many spots, has an unacceptable overhead with 32 bit values.
include/linux/rtnetlink.h | 11 +++ include/net/dn_fib.h | 7 +- include/net/ip_fib.h | 39 ++++--------- net/decnet/dn_fib.c | 62 ++------------------- net/decnet/dn_route.c | 1 net/decnet/dn_rules.c | 12 ++-- net/decnet/dn_table.c | 133 ++++++++++++++++++++++++++++++++-------------- net/ipv4/fib_frontend.c | 115 +++++++++++++++++++++++++-------------- net/ipv4/fib_hash.c | 30 +++++----- net/ipv4/fib_lookup.h | 4 - net/ipv4/fib_rules.c | 18 +++--- net/ipv4/fib_semantics.c | 5 + net/ipv4/fib_trie.c | 32 +++++------ net/ipv4/route.c | 1 net/ipv6/route.c | 1 15 files changed, 255 insertions(+), 216 deletions(-)
Patrick McHardy:
[NET]: Use u32 for routing table IDs
[NET]: Introduce RTA_TABLE routing attribute [IPV4]: Increase number of possible routing tables to 2^32 [DECNET]: Increase number of possible routing tables to 2^32