[PATCH nf-next v5 0/3] flow offload teardown when layer 2 roaming
From: Julius Bairaktaris <hidden>
Date: 2026-09-14 07:25:46
Also in:
linux-kselftest, netfilter-devel
A direct xmit flow keeps the bridge port and destination address that the fdb resolved when the flow was created. When the host moves to another port of the bridge, for example a station roaming to another access point, the bridge moves the fdb entry and the flow keeps forwarding to the old port. Every packet the sender keeps transmitting refreshes the flow, so it does not age out, and a hardware offloaded flow never sees a packet on the software path where the stale port could be corrected. The bridge notifies SWITCHDEV_FDB_DEL_TO_DEVICE for the old port before it moves the entry. Patch 2 tears down the matching direct xmit flows on that notification. Patch 1 stores the bridge vid in the tuple so the vid of the deleted entry can be compared. Patch 3 adds a selftest. Tested on an ipq807x router (OpenWrt, fw4 flowtable with the offload flag) with a station roaming between the two radios of one bridge during a download: without the patches the download stalls for as long as the station stays on the other radio and resumes only after it roams back, with them it continues through the roam, three runs each. A host moving from a switch port with a hardware offloaded flow to a radio gets the flow torn down and re-offloaded towards the radio. Changes in v5: - Rebase onto nf-next; the forward path resolution now lives in nf_flow_table_path.c and the tuple has no hw_ifidx. - Store the bridge port in the tuple and match on it: the out interface is the lowest device of the path and differs from the port when the port is a vlan device. - Add a helper for the per-tuple match. - Drop the WARN_ON on allocation failure; the flow then ages out as before, the same way dsa_user_fdb_event() drops the hardware fdb update when its work item cannot be allocated. - Skip local fdb entries, kick the gc once per flowtable. - Hold the device with netdev_hold()/netdev_put() and a tracker. - Add a selftest that roams a host between two bridge ports, plain and vlan, mid-transfer. Changes in v4: - Removed patch "don't follow fastpath when marked teardown". - Use a work queue to process the event. Changes in v3: - static nf_flow_table_switchdev_nb. Changes in v2: - Unchanged, only tags RFC net-next to PATCH nf-next. v4: https://lore.kernel.org/netfilter-devel/20250925182623.114045-1-ericwouds@gmail.com/ (local) Eric Woudstra (2): netfilter: flow: Add bridge_vid member netfilter: flowtable: teardown direct xmit flows when the fdb entry moves Julius Bairaktaris (1): selftests: netfilter: nft_flowtable.sh: roam a host between two bridge ports include/net/netfilter/nf_flow_table.h | 4 + net/netfilter/nf_flow_table_core.c | 109 ++++++++++++++ net/netfilter/nf_flow_table_path.c | 9 ++ tools/testing/selftests/net/netfilter/config | 1 + .../selftests/net/netfilter/nft_flowtable.sh | 140 ++++++++++++++++++ 5 files changed, 263 insertions(+) -- 2.53.0