[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <6b4e864a-5509-4cc2-caf3-b6f5f8edc2ed@ti.com>
Date: Fri, 9 Jul 2021 16:23:58 +0300
From: Grygorii Strashko <grygorii.strashko@...com>
To: Vladimir Oltean <vladimir.oltean@....com>,
<netdev@...r.kernel.org>, Jakub Kicinski <kuba@...nel.org>,
"David S. Miller" <davem@...emloft.net>
CC: Andrew Lunn <andrew@...n.ch>,
Florian Fainelli <f.fainelli@...il.com>,
Vivien Didelot <vivien.didelot@...il.com>,
Jiri Pirko <jiri@...nulli.us>,
Ido Schimmel <idosch@...sch.org>,
Tobias Waldekranz <tobias@...dekranz.com>,
Roopa Prabhu <roopa@...dia.com>,
Nikolay Aleksandrov <nikolay@...dia.com>,
Stephen Hemminger <stephen@...workplumber.org>,
<bridge@...ts.linux-foundation.org>,
Alexander Duyck <alexander.duyck@...il.com>
Subject: Re: [RFC PATCH v2 net-next 02/10] net: bridge: disambiguate
offload_fwd_mark
Hi
On 03/07/2021 14:56, Vladimir Oltean wrote:
> From: Tobias Waldekranz <tobias@...dekranz.com>
>
> Before this change, four related - but distinct - concepts where named
> offload_fwd_mark:
>
> - skb->offload_fwd_mark: Set by the switchdev driver if the underlying
> hardware has already forwarded this frame to the other ports in the
> same hardware domain.
>
> - nbp->offload_fwd_mark: An idetifier used to group ports that share
> the same hardware forwarding domain.
>
> - br->offload_fwd_mark: Counter used to make sure that unique IDs are
> used in cases where a bridge contains ports from multiple hardware
> domains.
>
> - skb->cb->offload_fwd_mark: The hardware domain on which the frame
> ingressed and was forwarded.
>
> Introduce the term "hardware forwarding domain" ("hwdom") in the
> bridge to denote a set of ports with the following property:
>
> If an skb with skb->offload_fwd_mark set, is received on a port
> belonging to hwdom N, that frame has already been forwarded to all
> other ports in hwdom N.
>
> By decoupling the name from "offload_fwd_mark", we can extend the
> term's definition in the future - e.g. to add constraints that
> describe expected egress behavior - without overloading the meaning of
> "offload_fwd_mark".
>
> - nbp->offload_fwd_mark thus becomes nbp->hwdom.
>
> - br->offload_fwd_mark becomes br->last_hwdom.
>
> - skb->cb->offload_fwd_mark becomes skb->cb->src_hwdom. The slight
> change in naming here mandates a slight change in behavior of the
> nbp_switchdev_frame_mark() function. Previously, it only set this
> value in skb->cb for packets with skb->offload_fwd_mark true (ones
> which were forwarded in hardware). Whereas now we always track the
> incoming hwdom for all packets coming from a switchdev (even for the
> packets which weren't forwarded in hardware, such as STP BPDUs, IGMP
> reports etc). As all uses of skb->cb->offload_fwd_mark were already
> gated behind checks of skb->offload_fwd_mark, this will not introduce
> any functional change, but it paves the way for future changes where
> the ingressing hwdom must be known for frames coming from a switchdev
> regardless of whether they were forwarded in hardware or not
> (basically, if the skb comes from a switchdev, skb->cb->src_hwdom now
> always tracks which one).
>
> A typical example where this is relevant: the switchdev has a fixed
> configuration to trap STP BPDUs, but STP is not running on the bridge
> and the group_fwd_mask allows them to be forwarded. Say we have this
> setup:
>
> br0
> / | \
> / | \
> swp0 swp1 swp2
>
> A BPDU comes in on swp0 and is trapped to the CPU; the driver does not
> set skb->offload_fwd_mark. The bridge determines that the frame should
> be forwarded to swp{1,2}. It is imperative that forward offloading is
> _not_ allowed in this case, as the source hwdom is already "poisoned".
>
> Recording the source hwdom allows this case to be handled properly.
>
> Signed-off-by: Tobias Waldekranz <tobias@...dekranz.com>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@....com>
> ---
> net/bridge/br_if.c | 2 +-
> net/bridge/br_private.h | 10 +++++-----
> net/bridge/br_switchdev.c | 16 ++++++++--------
> 3 files changed, 14 insertions(+), 14 deletions(-)
>
[...]
Thank you. I very much like this patch by itself as it clarifies
properly things which caused much headache (at least for me).
I hope it can be moved forward regardless of the rest of the series.
Minor comment - It will good to add in-code doc for added/renamed struct fields.
Reviewed-by: Grygorii Strashko <grygorii.strashko@...com>
--
Best regards,
grygorii
Powered by blists - more mailing lists