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.
44 lines
1.6 KiB
44 lines
1.6 KiB
6 years ago
|
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
|
||
|
|