[PATCH][lunar/linux-azure] net: mana: Add support for vlan tagging

Andrei Gherzan andrei.gherzan at canonical.com
Wed Jun 14 08:00:10 UTC 2023


On 23/06/13 02:09PM, Tim Gardner wrote:
> From: Haiyang Zhang <haiyangz at microsoft.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/2023695
> 
> 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, and save it to
> tx_oob for the NIC to transmit. For vlan tags on the payload, they
> are accepted by the NIC too.
> 
> For RX, extract the vlan tag from CQE and put it into skb.
> 
> Signed-off-by: Haiyang Zhang <haiyangz at microsoft.com>
> Signed-off-by: David S. Miller <davem at davemloft.net>
> (backported from commit b803d1fded4085d268507a432dac8077ead68971 linux-next)

Initially I thought this was a small typo and supposed to be a
clean cherrypick but after trying to apply it I could see that it
doesn't. As such, we should also include a backport comment - it looks
like this is due to the same XDP missing features.

> Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
> ---
>  drivers/net/ethernet/microsoft/mana/mana_en.c | 19 +++++++++++++++++--
>  1 file changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c
> index 202f2f34f016..a3b239b401bb 100644
> --- a/drivers/net/ethernet/microsoft/mana/mana_en.c
> +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
> @@ -179,6 +179,14 @@ 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;
>  	}
>  
> +	if (skb_vlan_tag_present(skb)) {
> +		pkt_fmt = MANA_LONG_PKT_FMT;
> +		pkg.tx_oob.l_oob.inject_vlan_pri_tag = 1;
> +		pkg.tx_oob.l_oob.pcp = skb_vlan_tag_get_prio(skb);
> +		pkg.tx_oob.l_oob.dei = skb_vlan_tag_get_cfi(skb);
> +		pkg.tx_oob.l_oob.vlan_id = skb_vlan_tag_get_id(skb);
> +	}
> +
>  	pkg.tx_oob.s_oob.pkt_fmt = pkt_fmt;
>  
>  	if (pkt_fmt == MANA_SHORT_PKT_FMT) {
> @@ -1461,6 +1469,12 @@ static void mana_rx_skb(void *buf_va, struct mana_rxcomp_oob *cqe,
>  			skb_set_hash(skb, hash_value, PKT_HASH_TYPE_L3);
>  	}
>  
> +	if (cqe->rx_vlantag_present) {
> +		u16 vlan_tci = cqe->rx_vlan_id;
> +
> +		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tci);
> +	}
> +
>  	u64_stats_update_begin(&rx_stats->syncp);
>  	rx_stats->packets++;
>  	rx_stats->bytes += pkt_len;
> @@ -2461,8 +2475,9 @@ static int mana_probe_port(struct mana_context *ac, int port_idx,
>  	ndev->hw_features |= NETIF_F_RXCSUM;
>  	ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
>  	ndev->hw_features |= NETIF_F_RXHASH;
> -	ndev->features = ndev->hw_features;
> -	ndev->vlan_features = 0;
> +	ndev->features = ndev->hw_features | NETIF_F_HW_VLAN_CTAG_TX |
> +			 NETIF_F_HW_VLAN_CTAG_RX;
> +	ndev->vlan_features = ndev->features;
>  
>  	err = register_netdev(ndev);
>  	if (err) {
> -- 
> 2.34.1

-- 
Andrei Gherzan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20230614/f8464a8a/attachment.sig>


More information about the kernel-team mailing list