b4e4d7ac9f
This patch adds support setting VF PVID by hns3 PF kernel ethdev driver on the host by "ip link set <eth num> vf <vf id> vlan <vlan tag>" command. Because of the hardware constraints, the striped VLAN tag will always in Rx descriptors which should has been dropped when PVID is enabled and the PVID will overwrite the outer VLAN tag in Tx descriptor. So, hns3 PMD driver need to change the processing of VLAN tags in the process of Tx and Rx according to whether PVID is enabled. 1) If the hns3 PF kernel ethdev driver sets the PVID for VF device before the initialization of the related VF device, hns3 VF PMD driver should get the PVID state from PF driver through mailbox and update the related state in txq and rxq maintained by hns3 VF driver to change the process of Tx and Rx. 2) If the hns3 PF kernel ethdev driver sets the PVID for VF device after initialization of the related VF device, the PF driver will notify VF driver to update the PVID state. The VF driver will update the PVID configuration state immediately to ensure that the VLAN process in Tx and Rx is correct. But in the window period of this state transition, packets loss or packets with wrong VLAN may occur. 3) Due to hardware limitations, we only support two-layer VLAN hardware offload in Tx direction based on hns3 network engine, so when PVID is enabled, QinQ insert is no longer supported. And when PVID is enabled, in the following two cases: i) packets with more than two VLAN tags. ii) packets with one VLAN tag while the hardware VLAN insert is enabled. The packets will be regarded as abnormal packets and discarded by hardware in Tx direction. For debugging purposes, a validation check for these types of packets is added to the '.tx_pkt_prepare' ops implementation function named hns3_prep_pkts to inform users that these packets will be discarded. Signed-off-by: Chengchang Tang <tangchengchang@huawei.com> Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com> |
||
---|---|---|
.. | ||
hns3_cmd.c | ||
hns3_cmd.h | ||
hns3_dcb.c | ||
hns3_dcb.h | ||
hns3_ethdev_vf.c | ||
hns3_ethdev.c | ||
hns3_ethdev.h | ||
hns3_fdir.c | ||
hns3_fdir.h | ||
hns3_flow.c | ||
hns3_intr.c | ||
hns3_intr.h | ||
hns3_logs.h | ||
hns3_mbx.c | ||
hns3_mbx.h | ||
hns3_mp.c | ||
hns3_mp.h | ||
hns3_regs.c | ||
hns3_regs.h | ||
hns3_rss.c | ||
hns3_rss.h | ||
hns3_rxtx.c | ||
hns3_rxtx.h | ||
hns3_stats.c | ||
hns3_stats.h | ||
Makefile | ||
meson.build | ||
rte_pmd_hns3_version.map |