• Brett Creeley's avatar
    ice: Add outer_vlan_ops and VSI specific VLAN ops implementations · c31af68a
    Brett Creeley authored
    Add a new outer_vlan_ops member to the ice_vsi structure as outer VLAN
    ops are only available when the device is in Double VLAN Mode (DVM).
    Depending on the VSI type, the requirements for what operations to
    use/allow differ.
    
    By default all VSI's have unsupported inner and outer VSI VLAN ops. This
    implementation was chosen to prevent unexpected crashes due to null
    pointer dereferences. Instead, if a VSI calls an unsupported op, it will
    just return -EOPNOTSUPP.
    
    Add implementations to support modifying outer VLAN fields for VSI
    context. This includes the ability to modify VLAN stripping, insertion,
    and the port VLAN based on the outer VLAN handling fields of the VSI
    context.
    
    These functions should only ever be used if DVM is enabled because that
    means the firmware supports the outer VLAN fields in the VSI context. If
    the device is in DVM, then always use the outer_vlan_ops, else use the
    vlan_ops since the device is in Single VLAN Mode (SVM).
    
    Also, move adding the untagged VLAN 0 filter from ice_vsi_setup() to
    ice_vsi_vlan_setup() as the latter function is specific to the PF and
    all other VSI types that need an untagged VLAN 0 filter already do this
    in their specific flows. Without this change, Flow Director is failing
    to initialize because it does not implement any VSI VLAN ops.
    Signed-off-by: default avatarBrett Creeley <brett.creeley@intel.com>
    Tested-by: default avatarGurucharan G <gurucharanx.g@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    c31af68a
ice_vsi_vlan_lib.h 1.21 KB