mirror of
https://github.com/openwrt/openwrt.git
synced 2026-10-14 02:19:06 +04:00
A prefix with source-specific IPv6 routes gets one trap row, which keeps a list of their sources and goes once the list is empty and no route without a source is left. When the allocation for a source failed, that source was left out: once the list was empty the row went, or a route without a source took it over, though the kernel still had the source-specific route the row was trapping for. Mark the row when a source could not be tracked, count it as still standing for sources, and ask for a FIB replay, which builds the list again from scratch. Tested on a Hasivo S1100W-8XGT-SE (RTL9303) with L3 offload enabled, through a bench-only debugfs counter that fails the next source allocation: under an IPv6 /32 forwarding in hardware, a /48 with a source-specific route via another host and a source-specific blackhole for the sender, whose tracking fails. Once the first is deleted, the kernel drops the sender's echoes: without this change the trap row goes and the /32 forwards all 5 to the host, with it the row stays, the FIB is replayed and none arrive. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Gennaro Cimmino <gcimmino@rayonra.net> Link: https://github.com/openwrt/openwrt/pull/25623 Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>