Re: [PATCH RFC v1 net-next 00/12] bridge-fastpath and related improvements

From: Nikolay Aleksandrov
Date: Mon Oct 14 2024 - 02:35:43 EST


On 13/10/2024 21:54, Eric Woudstra wrote:
> This patchset makes it possible to set up a (hardware offloaded) fastpath
> for bridged interfaces.
>

The subject and this sentence are misleading, you're talking about netfilter bridge
fastpath offload, please mention it in both places. When you just say bridge fast
path, I think of the software fast path.

> To set up the fastpath with offloading, add this extra flowtable:
>
> table bridge filter {
> flowtable fb {
> hook ingress priority filter
> devices = { lan0, lan1, lan2, lan3, lan4, wlan0, wlan1 }
> flags offload
> }
> chain forward {
> type filter hook forward priority filter; policy accept;
> ct state established flow add @fb
> }
> }
>
> Creating a separate fastpath for bridges.
>
> forward fastpath bypass
> .----------------------------------------.
> / \
> | IP - forwarding |
> | / \ v
> | / wan ...
> | /
> | |
> | |
> | brlan.1
> | |
> | +-------------------------------+
> | | vlan 1 |
> | | |
> | | brlan (vlan-filtering) |
> | +---------------+ |
> | | DSA-SWITCH | |
> | | | vlan 1 |
> | | | to |
> | | vlan 1 | untagged |
> | +---------------+---------------+
> . / \
> ------>lan0 wlan1
> . ^ ^
> . | |
> . \_________________/
> . bridge fastpath bypass
> .
> ^
> vlan 1 tagged packets
>
> To have the ability to handle xmit direct with outgoing encaps in the
> bridge fastpass bypass, we need to be able to handle them without going
> through vlan/pppoe devices. So I've applied, amended and squashed wenxu's
> patchset. This patch also makes it possible to egress from vlan-filtering
> brlan to lan0 with vlan tagged packets, if the bridge master port is doing
> the vlan tagging, instead of the vlan-device. Without this patch, this is
> not possible in the bridge-fastpath and also not in the forward-fastpath,
> as seen in the figure above.
>
> There are also some more fixes for filling in the forward path. These
> fixes also apply to for the forward-fastpath. They include handling
> DEV_PATH_MTK_WDMA in nft_dev_path_info() and avoiding
> DEV_PATH_BR_VLAN_UNTAG_HW for bridges with ports that use dsa.
>
> Conntrack bridge only tracks untagged and 802.1q. To make the bridge
> fastpath experience more similar to the forward fastpath experience,
> I've added double vlan, pppoe and pppoe-in-q tagged packets to bridge
> conntrack and to bridge filter chain.
>
> Eric Woudstra (12):
> netfilter: nf_flow_table_offload: Add nf_flow_encap_push() for xmit
> direct
> netfilter: bridge: Add conntrack double vlan and pppoe
> netfilter: nft_chain_filter: Add bridge double vlan and pppoe
> bridge: br_vlan_fill_forward_path_pvid: Add port to port
> bridge: br_fill_forward_path add port to port
> net: core: dev: Add dev_fill_bridge_path()
> netfilter :nf_flow_table_offload: Add nf_flow_rule_bridge()
> netfilter: nf_flow_table_inet: Add nf_flowtable_type flowtable_bridge
> netfilter: nft_flow_offload: Add NFPROTO_BRIDGE to validate
> netfilter: nft_flow_offload: Add DEV_PATH_MTK_WDMA to
> nft_dev_path_info()
> bridge: br_vlan_fill_forward_path_mode no _UNTAG_HW for dsa
> netfilter: nft_flow_offload: Add bridgeflow to nft_flow_offload_eval()
>
> include/linux/netdevice.h | 2 +
> include/net/netfilter/nf_flow_table.h | 3 +
> net/bridge/br_device.c | 20 ++-
> net/bridge/br_private.h | 2 +
> net/bridge/br_vlan.c | 24 +++-
> net/bridge/netfilter/nf_conntrack_bridge.c | 86 ++++++++++--
> net/core/dev.c | 77 +++++++++--
> net/netfilter/nf_flow_table_inet.c | 13 ++
> net/netfilter/nf_flow_table_ip.c | 96 ++++++++++++-
> net/netfilter/nf_flow_table_offload.c | 13 ++
> net/netfilter/nft_chain_filter.c | 20 ++-
> net/netfilter/nft_flow_offload.c | 154 +++++++++++++++++++--
> 12 files changed, 463 insertions(+), 47 deletions(-)
>