RE: [PATCH net-next] net: mana: Add support for vlan tagging
From: Haiyang Zhang <haiyangz@microsoft.com>
Date: 2023-06-07 20:45:26
Also in:
bpf, linux-hyperv, linux-rdma, lkml
quoted hunk ↗ jump to hunk
-----Original Message----- From: LKML haiyangz <redacted> On Behalf Of Haiyang Zhang Sent: Wednesday, June 7, 2023 2:38 PM To: linux-hyperv@vger.kernel.org; netdev@vger.kernel.org Cc: Haiyang Zhang <haiyangz@microsoft.com>; Dexuan Cui [off-list ref]; KY Srinivasan [off-list ref]; Paul Rosswurm [off-list ref]; olaf@aepfle.de; vkuznets@redhat.com; davem@davemloft.net; wei.liu@kernel.org; edumazet@google.com; kuba@kernel.org; pabeni@redhat.com; leon@kernel.org; Long Li [off-list ref]; ssengar@linux.microsoft.com; linux- rdma@vger.kernel.org; daniel@iogearbox.net; john.fastabend@gmail.com; bpf@vger.kernel.org; ast@kernel.org; Ajay Sharma [off-list ref]; hawk@kernel.org; tglx@linutronix.de; shradhagupta@linux.microsoft.com; linux-kernel@vger.kernel.org Subject: [PATCH net-next] net: mana: Add support for vlan tagging To support vlan, use MANA_LONG_PKT_FMT if vlan tag is present in TX skb. Then extract the vlan tag from the skb struct or the frame, and save it to tx_oob for the NIC to transmit. For RX, extract the vlan tag from CQE and put it into skb. Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com> --- drivers/net/ethernet/microsoft/mana/mana_en.c | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-)diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.cb/drivers/net/ethernet/microsoft/mana/mana_en.c index d907727c7b7a..1d76ac66908c 100644--- a/drivers/net/ethernet/microsoft/mana/mana_en.c +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c@@ -179,6 +179,31 @@ netdev_tx_t mana_start_xmit(struct sk_buff *skb,struct net_device *ndev) pkg.tx_oob.s_oob.short_vp_offset = txq->vp_offset; } + /* When using AF_PACKET we need to move VLAN header from + * the frame to the SKB struct to allow the NIC to xmit + * the 802.1Q packet. + */ + if (skb->protocol == htons(ETH_P_8021Q)) { + u16 vlan_tci; + + skb_reset_mac_header(skb); + if (eth_type_vlan(eth_hdr(skb)->h_proto)) { + if (unlikely(__skb_vlan_pop(skb, &vlan_tci))) + goto tx_drop_count; + + __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), + vlan_tci); + } + }
Not necessary to extract inband tag, because our NIC accepts inband tags too. The change is in the next version.