Skip to content

Commit b803d1f

Browse files
haiyangzdavem330
authored andcommitted
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, 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@microsoft.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 998b85f commit b803d1f

1 file changed

Lines changed: 17 additions & 2 deletions

File tree

drivers/net/ethernet/microsoft/mana/mana_en.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,14 @@ netdev_tx_t mana_start_xmit(struct sk_buff *skb, struct net_device *ndev)
179179
pkg.tx_oob.s_oob.short_vp_offset = txq->vp_offset;
180180
}
181181

182+
if (skb_vlan_tag_present(skb)) {
183+
pkt_fmt = MANA_LONG_PKT_FMT;
184+
pkg.tx_oob.l_oob.inject_vlan_pri_tag = 1;
185+
pkg.tx_oob.l_oob.pcp = skb_vlan_tag_get_prio(skb);
186+
pkg.tx_oob.l_oob.dei = skb_vlan_tag_get_cfi(skb);
187+
pkg.tx_oob.l_oob.vlan_id = skb_vlan_tag_get_id(skb);
188+
}
189+
182190
pkg.tx_oob.s_oob.pkt_fmt = pkt_fmt;
183191

184192
if (pkt_fmt == MANA_SHORT_PKT_FMT) {
@@ -1457,6 +1465,12 @@ static void mana_rx_skb(void *buf_va, struct mana_rxcomp_oob *cqe,
14571465
skb_set_hash(skb, hash_value, PKT_HASH_TYPE_L3);
14581466
}
14591467

1468+
if (cqe->rx_vlantag_present) {
1469+
u16 vlan_tci = cqe->rx_vlan_id;
1470+
1471+
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tci);
1472+
}
1473+
14601474
u64_stats_update_begin(&rx_stats->syncp);
14611475
rx_stats->packets++;
14621476
rx_stats->bytes += pkt_len;
@@ -2451,8 +2465,9 @@ static int mana_probe_port(struct mana_context *ac, int port_idx,
24512465
ndev->hw_features |= NETIF_F_RXCSUM;
24522466
ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
24532467
ndev->hw_features |= NETIF_F_RXHASH;
2454-
ndev->features = ndev->hw_features;
2455-
ndev->vlan_features = 0;
2468+
ndev->features = ndev->hw_features | NETIF_F_HW_VLAN_CTAG_TX |
2469+
NETIF_F_HW_VLAN_CTAG_RX;
2470+
ndev->vlan_features = ndev->features;
24562471
ndev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
24572472
NETDEV_XDP_ACT_NDO_XMIT;
24582473

0 commit comments

Comments
 (0)