[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1757a42e-573c-41ab-b2c4-b8e1f2c8f46b@blackwall.org>
Date: Wed, 16 Jul 2025 18:42:46 +0300
From: Nikolay Aleksandrov <razor@...ckwall.org>
To: Joseph Huang <Joseph.Huang@...min.com>, netdev@...r.kernel.org
Cc: Joseph Huang <joseph.huang.2024@...il.com>,
Ido Schimmel <idosch@...dia.com>, "David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>, Simon Horman <horms@...nel.org>,
Vladimir Oltean <vladimir.oltean@....com>,
Florian Fainelli <f.fainelli@...il.com>,
Tobias Waldekranz <tobias@...dekranz.com>, bridge@...ts.linux.dev,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3 net] net: bridge: Do not offload IGMP/MLD messages
On 7/16/25 18:35, Joseph Huang wrote:
> Do not offload IGMP/MLD messages as it could lead to IGMP/MLD Reports
> being unintentionally flooded to Hosts. Instead, let the bridge decide
> where to send these IGMP/MLD messages.
>
> Consider the case where the local host is sending out reports in response
> to a remote querier like the following:
>
> mcast-listener-process (IP_ADD_MEMBERSHIP)
> \
> br0
> / \
> swp1 swp2
> | |
> QUERIER SOME-OTHER-HOST
>
> In the above setup, br0 will want to br_forward() reports for
> mcast-listener-process's group(s) via swp1 to QUERIER; but since the
> source hwdom is 0, the report is eligible for tx offloading, and is
> flooded by hardware to both swp1 and swp2, reaching SOME-OTHER-HOST as
> well. (Example and illustration provided by Tobias.)
>
> Fixes: 472111920f1c ("net: bridge: switchdev: allow the TX data plane forwarding to be offloaded")
> Signed-off-by: Joseph Huang <Joseph.Huang@...min.com>
> ---
> v1: https://lore.kernel.org/netdev/20250701193639.836027-1-Joseph.Huang@garmin.com/
> v2: https://lore.kernel.org/netdev/20250714150101.1168368-1-Joseph.Huang@garmin.com/
> Updated commit message.
> v3: Return early if it's an IGMP/MLD packet.
> ---
> net/bridge/br_switchdev.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/net/bridge/br_switchdev.c b/net/bridge/br_switchdev.c
> index 95d7355a0407..9a910cf0256e 100644
> --- a/net/bridge/br_switchdev.c
> +++ b/net/bridge/br_switchdev.c
> @@ -17,6 +17,9 @@ static bool nbp_switchdev_can_offload_tx_fwd(const struct net_bridge_port *p,
> if (!static_branch_unlikely(&br_switchdev_tx_fwd_offload))
> return false;
>
> + if (br_multicast_igmp_type(skb))
> + return false;
> +
> return (p->flags & BR_TX_FWD_OFFLOAD) &&
> (p->hwdom != BR_INPUT_SKB_CB(skb)->src_hwdom);
> }
LGTM,
Acked-by: Nikolay Aleksandrov <razor@...ckwall.org>
Powered by blists - more mailing lists