On 11/6/2020 2:10 PM, Bing Zhao wrote:
Hi Ferruh,

Thanks for your review and comments, PSB.

-----Original Message-----
From: Ferruh Yigit <ferruh.yi...@intel.com>
Sent: Friday, November 6, 2020 7:20 PM
To: Bing Zhao <bi...@nvidia.com>; Slava Ovsiienko
<viachesl...@nvidia.com>; Matan Azrad <ma...@nvidia.com>
Cc: dev@dpdk.org; Ori Kam <or...@nvidia.com>; Raslan Darawsheh
<rasl...@nvidia.com>; sta...@dpdk.org
Subject: Re: [dpdk-dev] [PATCH] net/mlx5: fix the eCPRI common
header endianness

External email: Use caution opening links or attachments


On 11/3/2020 5:41 AM, Bing Zhao wrote:
The input header of a RTE flow item is with network byte order. In
the
host with little endian, the bit field order are the same as the
byte
order.
When checking the an eCPRI message type, the wrong field will be
selected. Right now, since the whole u32 is being checked and for
all
types, the following implementation is unique. There is no
functional
risk but it is still an error to fix.
  >

Isn't the 'ecpri_v' filled by application (CPU), why there is an
assumption that it is big endian?


Yes, this is filled by the application SW. I checked the current code of other 
headers and current implementation.
1. In the testpmd flow example, all the headers of network stack like IPv4 are translated 
into to be in BE, "ARGS_ENTRY_HTON"
2. All fields are with "rte_be*_t"type, even though only a typedef, it should 
be considered in BE.
3. RTE flow will just pass the flow items pointer to the PMD drivers, so in the 
PMD part, the headers should be treated as in BE.
So, to my understanding, this is not an assumption but some constraint.
Correct me if my understanding is wrong.

I missed in 'cmdline_flow.c' big endian conversion done via 'arg->hton' check, so yes PMD getting big endian values makes sense, thanks for clarification.


And even if it is big endian, it should be broken previously right?
Since it was checking wrong field as 'type' as you said, why there
were no functional risk?

In the PMD driver, the first u32 *value containing this type is already used for 
matching. And a checking is used for the following "sub-headers"
matching. Indeed, the first u32 *mask is used to confirm if the following 
sub-header need to be matched.
Since different types will lead to different variants of the packets, the 
switch-of-type is used.
But all the 3 types supported in PMD now almost have the same results (part of 
the second u32, remaining will be all 0s).
So even if the type of the value is always "0" by mistake, the cases are the 
same and it still works by coincidence.

if 'type' is '0' I see it works, but what if the 'type' is something other than values covered in 'switch', than it may fail matching 'sub-headers' and I guess that can happen based on value of 'size' field.

Anyway, since you are already fixing it, will you be OK if I drop last two sentences from the commit log and proceed?

Reply via email to