Message ID | 20200916094845.10782-1-hongbo.wang@nxp.com |
---|---|
Headers | show |
Series | Add 802.1AD protocol support for dsa switch and ocelot driver | expand |
From: hongbo.wang@nxp.com Date: Wed, 16 Sep 2020 17:48:42 +0800 > 1. Overview > a) 0001* is for support to set dsa slave into 802.1AD(QinQ) mode. > b) 0002* is for vlan_proto support for br_switchdev_port_vlan_add and br_switchdev_port_vlan_del. > c) 0003* is for setting QinQ related registers in ocelot switch driver, after applying this patch, the switch(VSC99599)'s port can enable or disable QinQ mode. You're going to have to update every single SWITCHDEV_PORT_ADD_OBJ handler and subsequent helpers to check the validate the protocol value. You also are going to have to make sure that every instantiated switchdev_obj_port_vlan object initializes the vlan protocol field properly. Basically, now that this structure has a new member, everything that operates on that object must be updated to handle the new protocol value. And I do mean everything. You can't just add the protocol handling to the locations you care about for bridging and DSA. You also have to more fully address the feedback given by Vladimir in patch #3. Are the expectations on the user side a Linux based expectation, or one specific about how this ASIC is expected to behave by default. It is very unclear what you are talking about when you say customer and ISP etc. Thanks.
On 9/18/2020 5:20 PM, David Miller wrote: > From: hongbo.wang@nxp.com > Date: Wed, 16 Sep 2020 17:48:42 +0800 > >> 1. Overview >> a) 0001* is for support to set dsa slave into 802.1AD(QinQ) mode. >> b) 0002* is for vlan_proto support for br_switchdev_port_vlan_add and br_switchdev_port_vlan_del. >> c) 0003* is for setting QinQ related registers in ocelot switch driver, after applying this patch, the switch(VSC99599)'s port can enable or disable QinQ mode. > > You're going to have to update every single SWITCHDEV_PORT_ADD_OBJ handler > and subsequent helpers to check the validate the protocol value. > > You also are going to have to make sure that every instantiated > switchdev_obj_port_vlan object initializes the vlan protocol field > properly. > > Basically, now that this structure has a new member, everything that > operates on that object must be updated to handle the new protocol > value. > > And I do mean everything. > > You can't just add the protocol handling to the locations you care > about for bridging and DSA. > > You also have to more fully address the feedback given by Vladimir > in patch #3. Are the expectations on the user side a Linux based > expectation, or one specific about how this ASIC is expected to > behave by default. It is very unclear what you are talking about > when you say customer and ISP etc. Switch vendors like to refer to the outer tag as ISP VLAN tag and inner tag as customer VLAN tag, sometimes S-TAG and C-TAG terms are used, too...
> You're going to have to update every single SWITCHDEV_PORT_ADD_OBJ > handler and subsequent helpers to check the validate the protocol value. > > You also are going to have to make sure that every instantiated > switchdev_obj_port_vlan object initializes the vlan protocol field properly. > > Basically, now that this structure has a new member, everything that operates > on that object must be updated to handle the new protocol value. > > And I do mean everything. > > You can't just add the protocol handling to the locations you care about for > bridging and DSA. > > You also have to more fully address the feedback given by Vladimir in patch #3. > Are the expectations on the user side a Linux based expectation, or one specific > about how this ASIC is expected to behave by default. It is very unclear what > you are talking about when you say customer and ISP etc. > Hi David, Thanks for your comments. I understand your concerns, I will review the code. Generally, the packets from customer port will have only C-TAG, but the packets form ISP port will have both S-TAG and C-TAG. For ocelot switch, these two ports have different register config. Thanks hongbo
From: "hongbo.wang" <hongbo.wang@nxp.com> 1. Overview a) 0001* is for support to set dsa slave into 802.1AD(QinQ) mode. b) 0002* is for vlan_proto support for br_switchdev_port_vlan_add and br_switchdev_port_vlan_del. c) 0003* is for setting QinQ related registers in ocelot switch driver, after applying this patch, the switch(VSC99599)'s port can enable or disable QinQ mode. 2. Version log v6: a) put the code for switchdev into single patch b) change code according to latest mainline v5: a) add devlink to enable qinq_mode of ocelot's single port b) modify br_switchdev_port_vlan_add to pass bridge's vlan_proto to port driver c) enable NETIF_F_HW_VLAN_STAG_FILTER in ocelot driver v4: a) modify slave.c to support "ip set br0 type bridge vlan_protocol 802.1ad" b) modify ocelot.c, if enable QinQ, set VLAN_AWARE_ENA and VLAN_POP_CNT per port when vlan_filter=1 v3: combine two patches to one post hongbo.wang (3): net: dsa: Add protocol support for 802.1AD when adding or deleting vlan for dsa switch port net: switchdev: Add VLAN protocol support for switchdev port net: dsa: ocelot: Add support for QinQ Operation drivers/net/dsa/ocelot/felix.c | 123 +++++++++++++++++++++++++++++ drivers/net/ethernet/mscc/ocelot.c | 39 +++++++-- include/net/switchdev.h | 1 + include/soc/mscc/ocelot.h | 4 + net/bridge/br_switchdev.c | 24 ++++++ net/dsa/slave.c | 51 ++++++++---- 6 files changed, 221 insertions(+), 21 deletions(-)