Commit 8b46168c authored by Huanhuan Wang's avatar Huanhuan Wang Committed by David S. Miller
Browse files

nfp: fix incorrectly set csum flag for nfdk path



The csum flag of IPsec packet are set repeatedly. Therefore, the csum
flag set of IPsec and non-IPsec packet need to be distinguished.

As the ipv6 header does not have a csum field, so l3-csum flag is not
required to be set for ipv6 case.

Fixes: 436396f2 ("nfp: support IPsec offloading for NFP3800")
Signed-off-by: default avatarHuanhuan Wang <huanhuan.wang@corigine.com>
Reviewed-by: default avatarLouis Peens <louis.peens@corigine.com>
Signed-off-by: default avatarSimon Horman <simon.horman@corigine.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3e04419c
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -387,6 +387,7 @@ netdev_tx_t nfp_nfdk_tx(struct sk_buff *skb, struct net_device *netdev)
	if (!skb_is_gso(skb)) {
		real_len = skb->len;
		/* Metadata desc */
		if (!ipsec)
			metadata = nfp_nfdk_tx_csum(dp, r_vec, 1, skb, metadata);
		txd->raw = cpu_to_le64(metadata);
		txd++;
@@ -395,6 +396,7 @@ netdev_tx_t nfp_nfdk_tx(struct sk_buff *skb, struct net_device *netdev)
		(txd + 1)->raw = nfp_nfdk_tx_tso(r_vec, txbuf, skb);
		real_len = txbuf->real_len;
		/* Metadata desc */
		if (!ipsec)
			metadata = nfp_nfdk_tx_csum(dp, r_vec, txbuf->pkt_cnt, skb, metadata);
		txd->raw = cpu_to_le64(metadata);
		txd += 2;
+6 −2
Original line number Diff line number Diff line
@@ -9,9 +9,13 @@
u64 nfp_nfdk_ipsec_tx(u64 flags, struct sk_buff *skb)
{
	struct xfrm_state *x = xfrm_input_state(skb);
	struct iphdr *iph = ip_hdr(skb);

	if (x->xso.dev && (x->xso.dev->features & NETIF_F_HW_ESP_TX_CSUM))
		flags |= NFDK_DESC_TX_L3_CSUM | NFDK_DESC_TX_L4_CSUM;
	if (x->xso.dev && (x->xso.dev->features & NETIF_F_HW_ESP_TX_CSUM)) {
		if (iph->version == 4)
			flags |= NFDK_DESC_TX_L3_CSUM;
		flags |= NFDK_DESC_TX_L4_CSUM;
	}

	return flags;
}