On 13/10/2024 21:55, Eric Woudstra wrote: > If handed a bridge port, use the bridge master to fill the forward path. > > Signed-off-by: Eric Woudstra <ericwouds@xxxxxxxxx> > --- > net/bridge/br_device.c | 20 +++++++++++++++----- > 1 file changed, 15 insertions(+), 5 deletions(-) > > diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c > index 26b79feb385d..e242e091b4a6 100644 > --- a/net/bridge/br_device.c > +++ b/net/bridge/br_device.c > @@ -384,15 +384,25 @@ static int br_fill_forward_path(struct net_device_path_ctx *ctx, > struct net_device_path *path) > { > struct net_bridge_fdb_entry *f; > - struct net_bridge_port *dst; > + struct net_bridge_port *src, *dst; > + struct net_device *br_dev; reverse xmas tree order > struct net_bridge *br; > > - if (netif_is_bridge_port(ctx->dev)) > - return -1; > + if (netif_is_bridge_port(ctx->dev)) { > + br_dev = netdev_master_upper_dev_get_rcu((struct net_device *)ctx->dev); > + if (!br_dev) > + return -1; > + > + br = netdev_priv(br_dev); > > - br = netdev_priv(ctx->dev); > + src = br_port_get_rcu(ctx->dev); > > - br_vlan_fill_forward_path_pvid(br, ctx, path); > + br_vlan_fill_forward_path_pvid(br, src, ctx, path); > + } else { > + br = netdev_priv(ctx->dev); > + > + br_vlan_fill_forward_path_pvid(br, NULL, ctx, path); > + } > > f = br_fdb_find_rcu(br, ctx->daddr, path->bridge.vlan_id); > if (!f)