VyOS asks VPP for a 256 MiB netlink receive buffer, but its own sysctl default caps it, so VPP gets 4 MiB. With a full table routed over a VPP interface, a bond rebuild overflows that buffer and linux-cp falls back to a resync, which can leave VLANs admin-down without their IPv6 link-local (T9481).
Details
- data/templates/vpp/startup.conf.j2 hardcodes nl-rx-buffer-size 268435456 for linux-nl (and linux-xfrm-nl).
- src/etc/sysctl.d/30-vyos-router.conf sets net.core.rmem_max=2097152. The kernel caps SO_RCVBUF at it, so VPP's socket gets 4194304 (ss -f netlink -m -p). No warning.
- interface-definitions/include/vpp/netlink.xml.i defines netlink { rx-buffer-size, batch-size, batch-delay-ms }, but nothing includes it: no CLI, and the template does not read it.
- set system sysctl parameter net.core.rmem_max is applied after VPP opens its socket at boot, so VPP keeps 4 MiB. Only /config/scripts/vyos-preconfig-bootup.script worked (VPP then got 536870912).
Measured (rolling, full table over a bond VLAN, bond rebuilt by a hash-policy change)
- rmem_max default: one overflow per trial, a VIF stuck in 3 of 10 trials.
- rmem_max 268435456 (preconfig script): no overflow, no stuck VIF in 5 trials.
Suggested change
- Raise net.core.rmem_max in 30-vyos-router.conf to at least 268435456.
- Wire netlink.xml.i into the VPP settings and template (checked against rmem_max)
- Warn when VPP's effective netlink buffer is smaller than requested.