iavf: disable VLAN stripping when VLAN offload is set in caps

Type: fix

Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
Change-Id: I4cc7433a707649c46d501249477949b62199c8a2
This commit is contained in:
Mohsin Kazmi
2024-04-30 16:48:45 +00:00
committed by Damjan Marion
parent 04880a94c1
commit fb113ca560
+30 -19
View File
@@ -42,29 +42,35 @@ iavf_port_vlan_strip_disable (vlib_main_t *vm, vnet_dev_port_t *port)
vnet_dev_t *dev = port->dev;
iavf_port_t *ap = vnet_dev_get_port_data (port);
virtchnl_vlan_caps_t vc;
vnet_dev_rv_t rv;
vnet_dev_rv_t rv = VNET_DEV_ERR_NOT_SUPPORTED;
u32 outer, inner;
const u32 mask = VIRTCHNL_VLAN_ETHERTYPE_8100;
if ((ap->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN_V2) == 0)
if (ap->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN_V2)
{
if ((rv = iavf_vc_op_get_offload_vlan_v2_caps (vm, dev, &vc)))
return rv;
outer = vc.offloads.stripping_support.outer;
inner = vc.offloads.stripping_support.inner;
outer = outer & VIRTCHNL_VLAN_TOGGLE ? outer & mask : 0;
inner = inner & VIRTCHNL_VLAN_TOGGLE ? inner & mask : 0;
virtchnl_vlan_setting_t vs = {
.vport_id = ap->vsi_id,
.outer_ethertype_setting = outer,
.inner_ethertype_setting = inner,
};
if ((rv = iavf_vc_op_disable_vlan_stripping_v2 (vm, dev, &vs)))
return rv;
}
if (ap->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN)
return iavf_vc_op_disable_vlan_stripping (vm, dev);
if ((rv = iavf_vc_op_get_offload_vlan_v2_caps (vm, dev, &vc)))
return rv;
outer = vc.offloads.stripping_support.outer;
inner = vc.offloads.stripping_support.inner;
outer = outer & VIRTCHNL_VLAN_TOGGLE ? outer & mask : 0;
inner = inner & VIRTCHNL_VLAN_TOGGLE ? inner & mask : 0;
virtchnl_vlan_setting_t vs = {
.vport_id = ap->vsi_id,
.outer_ethertype_setting = outer,
.inner_ethertype_setting = inner,
};
return iavf_vc_op_disable_vlan_stripping_v2 (vm, dev, &vs);
return rv;
}
vnet_dev_rv_t
@@ -275,7 +281,12 @@ iavf_port_init (vlib_main_t *vm, vnet_dev_port_t *port)
u64_bit_set (&ap->intr_mode_per_rxq_bitmap, q->queue_id, 1);
if ((rv = iavf_port_vlan_strip_disable (vm, port)))
return rv;
{
if (rv == VNET_DEV_ERR_NOT_SUPPORTED)
log_warn (port->dev, "device doesn't support vlan stripping");
else
return rv;
}
if ((rv = iavf_port_init_rss (vm, port)))
return rv;