app/testpmd: fix IP next proto in set raw decap/encap

Message ID b1f31771c7056183433874dd498e7864383eceaa.1572515534.git.jackmin@mellanox.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series app/testpmd: fix IP next proto in set raw decap/encap |

Checks

Context Check Description
ci/Intel-compilation success Compilation OK
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-compilation success Compile Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/travis-robot success Travis build: passed
ci/checkpatch success coding style OK

Commit Message

Xiaoyu Min Oct. 31, 2019, 10:11 a.m. UTC
  The IP's next protocol will be specified by user when set IP-in-IP
tunnel header via set raw decap/encap commands.

Currently this field is wrongly set to zero if there is no upper layer.
This leads to the encapsulated IP-in-IP tunnel header is not correct.

This next protocol field should be leave it as-is if there is no upper
layer or value is already set.

Fixes: 30626def03d6 ("app/testpmd: support raw encap/decap actions")
Cc: stable@dpdk.org

Signed-off-by: Xiaoyu Min <jackmin@mellanox.com>
---
 app/test-pmd/cmdline_flow.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
  

Comments

Ori Kam Oct. 31, 2019, 6:22 p.m. UTC | #1
> -----Original Message-----
> From: Xiaoyu Min <jackmin@mellanox.com>
> Sent: Thursday, October 31, 2019 12:11 PM
> To: Ori Kam <orika@mellanox.com>; Adrien Mazarguil
> <adrien.mazarguil@6wind.com>; Wenzhuo Lu <wenzhuo.lu@intel.com>;
> Jingjing Wu <jingjing.wu@intel.com>; Bernard Iremonger
> <bernard.iremonger@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org
> Subject: [PATCH] app/testpmd: fix IP next proto in set raw decap/encap
> 
> The IP's next protocol will be specified by user when set IP-in-IP
> tunnel header via set raw decap/encap commands.
> 
> Currently this field is wrongly set to zero if there is no upper layer.
> This leads to the encapsulated IP-in-IP tunnel header is not correct.
> 
> This next protocol field should be leave it as-is if there is no upper
> layer or value is already set.
> 
> Fixes: 30626def03d6 ("app/testpmd: support raw encap/decap actions")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Xiaoyu Min <jackmin@mellanox.com>

Acked-by: Ori Kam <orika@mellanox.com>
Thanks,
Ori
  
Slava Ovsiienko Oct. 31, 2019, 6:51 p.m. UTC | #2
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Xiaoyu Min
> Sent: Thursday, October 31, 2019 12:11
> To: Ori Kam <orika@mellanox.com>; Adrien Mazarguil
> <adrien.mazarguil@6wind.com>; Wenzhuo Lu <wenzhuo.lu@intel.com>;
> Jingjing Wu <jingjing.wu@intel.com>; Bernard Iremonger
> <bernard.iremonger@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org
> Subject: [dpdk-dev] [PATCH] app/testpmd: fix IP next proto in set raw
> decap/encap
> 
> The IP's next protocol will be specified by user when set IP-in-IP tunnel
> header via set raw decap/encap commands.
> 
> Currently this field is wrongly set to zero if there is no upper layer.
> This leads to the encapsulated IP-in-IP tunnel header is not correct.
> 
> This next protocol field should be leave it as-is if there is no upper layer or
> value is already set.
> 
> Fixes: 30626def03d6 ("app/testpmd: support raw encap/decap actions")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Xiaoyu Min <jackmin@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
  
Ferruh Yigit Nov. 6, 2019, 5:48 p.m. UTC | #3
On 10/31/2019 6:22 PM, Ori Kam wrote:
> 
> 
>> -----Original Message-----
>> From: Xiaoyu Min <jackmin@mellanox.com>
>> Sent: Thursday, October 31, 2019 12:11 PM
>> To: Ori Kam <orika@mellanox.com>; Adrien Mazarguil
>> <adrien.mazarguil@6wind.com>; Wenzhuo Lu <wenzhuo.lu@intel.com>;
>> Jingjing Wu <jingjing.wu@intel.com>; Bernard Iremonger
>> <bernard.iremonger@intel.com>
>> Cc: dev@dpdk.org; stable@dpdk.org
>> Subject: [PATCH] app/testpmd: fix IP next proto in set raw decap/encap
>>
>> The IP's next protocol will be specified by user when set IP-in-IP
>> tunnel header via set raw decap/encap commands.
>>
>> Currently this field is wrongly set to zero if there is no upper layer.
>> This leads to the encapsulated IP-in-IP tunnel header is not correct.
>>
>> This next protocol field should be leave it as-is if there is no upper
>> layer or value is already set.
>>
>> Fixes: 30626def03d6 ("app/testpmd: support raw encap/decap actions")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Xiaoyu Min <jackmin@mellanox.com>
> 
> Acked-by: Ori Kam <orika@mellanox.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 0d0bc0a5b2..d5ad64bc8b 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -5996,11 +5996,13 @@  update_fields(uint8_t *buf, struct rte_flow_item *item, uint16_t next_proto)
 	case RTE_FLOW_ITEM_TYPE_IPV4:
 		ipv4 = (struct rte_flow_item_ipv4 *)buf;
 		ipv4->hdr.version_ihl = 0x45;
-		ipv4->hdr.next_proto_id = (uint8_t)next_proto;
+		if (next_proto && ipv4->hdr.next_proto_id == 0)
+			ipv4->hdr.next_proto_id = (uint8_t)next_proto;
 		break;
 	case RTE_FLOW_ITEM_TYPE_IPV6:
 		ipv6 = (struct rte_flow_item_ipv6 *)buf;
-		ipv6->hdr.proto = (uint8_t)next_proto;
+		if (next_proto && ipv6->hdr.proto == 0)
+			ipv6->hdr.proto = (uint8_t)next_proto;
 		ipv6_vtc_flow = rte_be_to_cpu_32(ipv6->hdr.vtc_flow);
 		ipv6_vtc_flow &= 0x0FFFFFFF; /*< reset version bits. */
 		ipv6_vtc_flow |= 0x60000000; /*< set ipv6 version. */
@@ -6182,9 +6184,11 @@  cmd_set_raw_parsed(const struct buffer *in)
 			break;
 		case RTE_FLOW_ITEM_TYPE_GRE_KEY:
 			size = sizeof(rte_be32_t);
+			proto = 0x0;
 			break;
 		case RTE_FLOW_ITEM_TYPE_MPLS:
 			size = sizeof(struct rte_flow_item_mpls);
+			proto = 0x0;
 			break;
 		case RTE_FLOW_ITEM_TYPE_NVGRE:
 			size = sizeof(struct rte_flow_item_nvgre);