• Vladimir Oltean's avatar
    enetc: permit configuration of rx-vlan-filter with ethtool · 7070eea5
    Vladimir Oltean authored
    Each ENETC station interface (SI) has a VLAN filter list and a port
    flag (PSIPVMR) by which it can be put in "VLAN promiscuous" mode, which
    enables the reception of VLAN-tagged traffic even if it is not in the
    VLAN filtering list.
    
    Currently the handling of this setting works like this: the port starts
    off as VLAN promiscuous, then it switches to enabling VLAN filtering as
    soon as the first VLAN is installed in its filter via
    .ndo_vlan_rx_add_vid. In practice that does not work out very well,
    because more often than not, the first VLAN to be installed is out of
    the control of the user: the 8021q module, if loaded, adds its rule for
    802.1p (VID 0) traffic upon bringing the interface up.
    
    What the user is currently seeing in ethtool is this:
    ethtool -k eno2
    rx-vlan-filter: on [fixed]
    
    which doesn't match the intention of the code, but the practical reality
    of having the 8021q module install its VID which has the side-effect of
    turning on VLAN filtering in this driver. All in all, a slightly
    confusing experience.
    
    So instead of letting this driver switch the VLAN filtering state by
    itself, just wire it up with the rx-vlan-filter feature from ethtool,
    and let it be user-configurable just through that knob, except for one
    case, see below.
    
    In promiscuous mode, it is more intuitive that all traffic is received,
    including VLAN tagged traffic. It appears that it is necessary to set
    the flag in PSIPVMR for that to be the case, so VLAN promiscuous mode is
    also temporarily enabled. On exit from promiscuous mode, the setting
    made by ethtool is restored.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarClaudiu Manoil <claudiu.manoil@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7070eea5
enetc_pf.c 23.9 KB