On 8/23/19 9:32 AM, Vladimir Oltean wrote: > Hi Florian, > > On Fri, 23 Aug 2019 at 19:23, Florian Fainelli <f.faine...@gmail.com> wrote: >> >> On 8/22/19 4:44 PM, Vladimir Oltean wrote: >>> On Fri, 23 Aug 2019 at 02:43, Vivien Didelot <vivien.dide...@gmail.com> >>> wrote: >>>> >>>> Hi Vladimir, >>>> >>>> On Fri, 23 Aug 2019 01:06:58 +0300, Vladimir Oltean <olte...@gmail.com> >>>> wrote: >>>>> Hi Vivien, >>>>> >>>>> On 8/22/19 11:13 PM, Vivien Didelot wrote: >>>>>> Currently dsa_port_vid_add returns 0 if the switch returns -EOPNOTSUPP. >>>>>> >>>>>> This function is used in the tag_8021q.c code to offload the PVID of >>>>>> ports, which would simply not work if .port_vlan_add is not supported >>>>>> by the underlying switch. >>>>>> >>>>>> Do not skip -EOPNOTSUPP in dsa_port_vid_add but only when necessary, >>>>>> that is to say in dsa_slave_vlan_rx_add_vid. >>>>>> >>>>> >>>>> Do you know why Florian suppressed -EOPNOTSUPP in 061f6a505ac3 ("net: >>>>> dsa: Add ndo_vlan_rx_{add, kill}_vid implementation")? >>>>> I forced a return value of -EOPNOTSUPP here and when I create a VLAN >>>>> sub-interface nothing breaks, it just says: >>>>> RTNETLINK answers: Operation not supported >>>>> which IMO is expected. >>>> >>>> I do not know what you mean. This patch does not change the behavior of >>>> dsa_slave_vlan_rx_add_vid, which returns 0 if -EOPNOTSUPP is caught. >>>> >>> >>> Yes, but what's wrong with just forwarding -EOPNOTSUPP? >> >> It makes us fail adding the VLAN to the slave network device, which >> sounds silly, if we can't offload it in HW, that's fine, we can still do >> a SW VLAN instead, see net/8021q/vlan_core.c::vlan_add_rx_filter_info(). >> >> Maybe a more correct solution is to set the NETIF_F_HW_VLAN_CTAG_FILTER >> feature bit only if we have the ability to offload, now that I think >> about it. Would you want me to cook a patch doing that? > > sja1105 doesn't support offloading NETIF_F_HW_VLAN_CTAG_FILTER even > though it does support programming VLANs.
The additional of the ndo_vlan_rx_{add,kill}_vid() is such that standalone DSA ports continue to work while there is a bridge with vlan_filtering=1 spanning other ports. In order for that ndo operation to be called, we need to advertise the NETIF_F_HW_VLAN_CTAG_FILTER feature. > Adding an offloaded VLAN sub-interface on a standalone switch port > (vlan_filtering=0, uses dsa_8021q) would make the driver insert a VLAN > entry whilst the TPID is ETH_P_DSA_8021Q. > Maybe just let the driver set the netdev features, similar to how it > does for the number of TX queues? Why should we bend the framework because sja1105 and dsa_8021q are special? Let me counter the argument: if the tagging is DSA_8021Q, why not clear the feature then? -- Florian