You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.6 KiB
43 lines
1.6 KiB
From f596cb198e65ff6839d35763d824399eb407adab Mon Sep 17 00:00:00 2001 |
|
From: Hyong Youb Kim <hyonkim@cisco.com> |
|
Date: Wed, 10 Jan 2018 01:17:04 -0800 |
|
Subject: [PATCH] net/enic: fix L4 Rx ptype comparison |
|
|
|
[ upstream commit 5dbff3af25a4a68980992f5040246e1d7f20b4cd ] |
|
|
|
For non-UDP/TCP packets, enic may wrongly set PKT_RX_L4_CKSUM_BAD in |
|
ol_flags. The comparison that checks if a packet is UDP or TCP assumes |
|
that RTE_PTYPE_L4 values are bit flags, but they are not. For example, |
|
the following evaluates to true because NONFRAG is 0x600 and UDP is |
|
0x200, and causes the current code to think the packet is UDP. |
|
|
|
!!(RTE_PTYPE_L4_NONFRAG & RTE_PTYPE_L4_UDP) |
|
|
|
So, fix this by comparing the packet type against UDP and TCP |
|
individually. |
|
|
|
Fixes: 453d15059b58 ("net/enic: use new Rx checksum flags") |
|
|
|
Signed-off-by: Hyong Youb Kim <hyonkim@cisco.com> |
|
Reviewed-by: John Daley <johndale@cisco.com> |
|
--- |
|
drivers/net/enic/enic_rxtx.c | 3 ++- |
|
1 file changed, 2 insertions(+), 1 deletion(-) |
|
|
|
diff --git a/dpdk-17.11/drivers/net/enic/enic_rxtx.c b/dpdk-17.11/drivers/net/enic/enic_rxtx.c |
|
index a3663d516..831c90a1c 100644 |
|
--- a/dpdk-17.11/drivers/net/enic/enic_rxtx.c |
|
+++ b/dpdk-17.11/drivers/net/enic/enic_rxtx.c |
|
@@ -285,7 +285,8 @@ enic_cq_rx_to_pkt_flags(struct cq_desc *cqd, struct rte_mbuf *mbuf) |
|
else |
|
pkt_flags |= PKT_RX_IP_CKSUM_BAD; |
|
|
|
- if (l4_flags & (RTE_PTYPE_L4_UDP | RTE_PTYPE_L4_TCP)) { |
|
+ if (l4_flags == RTE_PTYPE_L4_UDP || |
|
+ l4_flags == RTE_PTYPE_L4_TCP) { |
|
if (enic_cq_rx_desc_tcp_udp_csum_ok(cqrd)) |
|
pkt_flags |= PKT_RX_L4_CKSUM_GOOD; |
|
else |
|
-- |
|
2.14.3 |
|
|
|
|