From mboxrd@z Thu Jan 1 00:00:00 1970 From: Florian Fainelli Subject: Re: [PATCH RFC] net: dsa: Make switches VLAN aware when enslaved into a bridge Date: Wed, 24 Oct 2018 15:10:35 -0700 Message-ID: References: <20181024193657.24012-1-f.fainelli@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: jiri@mellanox.com, petr@mellanox.com, idosch@mellanox.com, privat@egil-hjelmeland.no, Woojung.Huh@microchip.com, tristram.ha@microchip.com, Andrew Lunn , Vivien Didelot , "David S. Miller" , open list To: netdev@vger.kernel.org Return-path: In-Reply-To: <20181024193657.24012-1-f.fainelli@gmail.com> Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org On 10/24/18 12:36 PM, Florian Fainelli wrote: > Commit 2ea7a679ca2a ("net: dsa: Don't add vlans when vlan filtering is > disabled") changed the behavior of DSA switches when the switch ports > are enslaved into the bridge and only pushed the VLAN configuration down > to the switch if the bridge is configured with VLAN filtering enabled. > > This is unfortunately wrong, because what vlan_filtering configures is a > policy on the acceptance of VLAN tagged frames with an unknown VID. > > vlan_filtering=0 means a frame with a VLAN tag that is not part of the > VLAN table should be allowed to ingress the switch, and vlan_fltering=1 > would reject that frame. > > Fixes: 2ea7a679ca2a ("net: dsa: Don't add vlans when vlan filtering is disabled") > Signed-off-by: Florian Fainelli > --- > Andrew, > > I checked with Jiri and he confirmed that our interpretention of > vlan_filtering in DSA was incorrect and that it does denote whether the > switch should be doing VID ingress policy checking. > > You mentioned in the commit message some problems without being too > specific about them which is why I am putting the same checks in > mv88e6xxx in order not to break your use cases. Let me know if you want > to drop that hunk entirely. > > Thanks! > > drivers/net/dsa/mv88e6xxx/chip.c | 7 ++++++- > net/dsa/port.c | 10 ++-------- > 2 files changed, 8 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c > index 8da3d39e3218..df411e776911 100644 > --- a/drivers/net/dsa/mv88e6xxx/chip.c > +++ b/drivers/net/dsa/mv88e6xxx/chip.c > @@ -1684,13 +1684,14 @@ static int _mv88e6xxx_port_vlan_add(struct mv88e6xxx_chip *chip, int port, > static void mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port, > const struct switchdev_obj_port_vlan *vlan) > { > + struct dsa_port *dp = &ds->ports[i]; This should obviously be port instead of i, but I would still appreciate a review, thanks! -- Florian