Thread (33 messages) flat view 33 messages, 4 authors, 6d ago

Re: [PATCH v3 net-next 00/15] neighbour: Namespacify arp_tbl and nd_tbl.

From: Ido Schimmel <idosch@nvidia.com>
Date: 2026-08-11 16:55:12

On Tue, Aug 11, 2026 at 02:23:34AM +0000, Kuniyuki Iwashima wrote:
The neighbour subsystem is almost ready to drop RTNL.

However, the control paths are serialised by the global
per-table lock.

This series converts arp_tbl and nd_tbl to per-netns table.

Patch 1 deflakes test_neigh.sh.

Patch 2 ~ 3 are misc cleanup.

Patch 4 ~ 7 store arp_tbl/nd_tbl to net->neigh_tables[] and
remove the global neigh_tables[].

Patch 8 ~ 9 replace the direct access to arp_tbl/nd_tbl to
net->neigh_tables[] using new helpers.

Patch 10 ~ 12 finally replace the global table with per-netns
table.

Patch 13 ~ 14 clean up unnecessary net_eq().

Patch 15 updates test_neigh.sh.
The change is good, but the cover letter should explicitly state that
this patchset introduces a behavior change with a regression potential
(as evident by patch 15).

I'm aware of at least one deployment that will most likely regress
without some changes in user space before upgrading the kernel. In this
deployment, the host has several namespaces representing different
routers with hundreds/thousands neighbours in each namespace.
Currently, they set the GC thresholds in the initial namespace so that
they are high enough for all the namespaces combined. With this
patchset, the GC thresholds in the initial namespace will no longer
affect the other namespaces and the routers will fail because the
default thresholds (128/512/1024) are too low.

I can ask them to keep doing what they are doing, but also set the
per-namespace GC thresholds. It will fail on current kernels (harmless),
but work on future ones. Similarly for the base reachable time which
currently they set in the initial namespace to the maximum among all
namespaces.

Another thing worth a discussion is the policy regarding the initial
values in each namespace. With this patchset, new namespaces all get the
same default values instead of inheriting from the initial namespace:

# sysctl net.ipv4.neigh.default.gc_thresh1
net.ipv4.neigh.default.gc_thresh1 = 128
# sysctl -wq net.ipv4.neigh.default.gc_thresh1=129
# ip netns add ns1
# ip netns exec ns1 sysctl net.ipv4.neigh.default.gc_thresh1
net.ipv4.neigh.default.gc_thresh1 = 128

Assuming that today people configure the initial namespace before
creating namespaces, changing the policy to inherit from the initial
namespace will probably result in fewer regression reports. There is a
knob that controls this policy for other settings (see
devconf_inherit_init_net).
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help