app/testpmd: fix IP next proto in set raw decap/encap
Checks
Commit Message
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
> -----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
> -----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>
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.
@@ -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);