On 3/1/23 14:08, Chris Mi wrote:
> On 3/1/2023 8:44 PM, Ilya Maximets wrote:
>> On 2/28/23 14:05, Chris Mi wrote:
>>> On 2/24/2023 4:16 AM, Ilya Maximets wrote:
>>>> On 2/23/23 12:26, Chris Mi wrote:
>>>>> Initialize psample socket. Add sFlow recv API to receive sampled
>>>>> packets from psample socket. Add sFow recv wait API to add psample
>>>>> socket fd to poll list.
>>>>>
>>>>> Signed-off-by: Chris Mi <[email protected]>
>>>>> Reviewed-by: Roi Dayan <[email protected]>
>>>>> ---
>>>>>  lib/dpif.h                    |   7 ++
>>>>>  lib/netdev-offload-provider.h |  11 ++
>>>>>  lib/netdev-offload-tc.c       | 188 ++++++++++++++++++++++++++++++++++
>>>>>  3 files changed, 206 insertions(+)
>>>>>
>> <snip>
>>
>>>>> +{
>>>>> +    int read_tries = 0;
>>>>> +
>>>>> +    if (!psample_sock) {
>>>>> +        return ENOENT;
>>>>> +    }
>>>>> +
>>>>> +    for (;;) {
>>>>> +        struct offload_psample psample;
>>>>> +        struct offload_sflow sflow;
>>>>> +        int error;
>>>>> +
>>>>> +        if (++read_tries > 50) {
>>>>> +            return EAGAIN;
>>>>> +        }
>>>>> +
>>>>> +        error = nl_sock_recv(psample_sock, buf, NULL, false);
>>>>> +        if (error == ENOBUFS) {
>>>>> +            continue;
>>>>> +        }
>>>>> +
>>>>> +        if (error) {
>>>>> +            if (error == EAGAIN) {
>>>>> +                break;
>>>>> +            }
>>>>> +            return error;
>>>>> +        }
>>>>> +
>>>>> +        error = psample_from_ofpbuf(&psample, buf);
>>>>> +        if (!error) {
>>>>> +            return psample_parse_packet(&psample, &sflow, upcall);
>>>>> +        } else if (error) {
>>>> Condition here is always true.
>>> I copied from dpif_netlink_recv_cpu_dispatch(). And I also think it is ok.
>> The 'if' condition in dpif_netlink_recv_cpu_dispatch() is different
>> and so the 'else if (error)' is not always true there.  But it is
>> always true here, hence makes no practical sense.
> OK, I see. I'll change the code like this:
> 
>         error = psample_from_ofpbuf(&psample, buf);
>         if (!error) {
>             return psample_parse_packet(&psample, upcall);
>         } else {
>             return error;
>         }

The 'else' condition is unnecessary, since we do always return
at this point.  In the dpif-netlink code there is a case where
we continue, but here there is no such case.

So, I'd suggest:

    error = psample_from_ofpbuf(&psample, buf);
    if (error) {
        return error;
    }

    return psample_parse_packet(&psample, upcall);

Or even just a ternary operator:

    error = psample_from_ofpbuf(&psample, buf);

    return error ? error : psample_parse_packet(&psample, upcall);

Best regards, Ilya Maximets.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to