[ovs-discuss] check_pkt_larger precision

Numan Siddique numans at ovn.org
Wed Jun 3 18:09:17 UTC 2020


On Wed, Jun 3, 2020 at 8:27 PM Miroslav Kubiczek <
miroslav.kubiczek at adaptivemobile.com> wrote:

>
> On 29. 05. 20 12:51, Numan Siddique wrote:
>
> This email was sent from an external sender. Do not click links or open
> attachments unless you recognize the sender and know the content is safe.
>
>
>
> On Fri, May 29, 2020 at 3:41 PM Miroslav Kubiczek <
> miroslav.kubiczek at adaptivemobile.com> wrote:
>
>>
>> On 29. 05. 20 11:29, Numan Siddique wrote:
>>
>> On Fri, May 29, 2020 at 2:25 PM Miroslav Kubiczek <
>> miroslav.kubiczek at adaptivemobile.com> wrote:
>>
>>> Hi,
>>>
>>> I have finally implemented flows with check_pkt_larger action. Partial flow dump is here:
>>>
>>> table=0, priority=100 actions=check_pkt_larger(60)->NXM_NX_REG0[0],resubmit(,1)
>>> table=1, priority=1000,reg0=0x1 actions=resubmit(,2)
>>> table=1, priority=100,reg0=0 actions=resubmit(,3)
>>>
>>> I run a test which sends UDP packets (with VLAN) with size: 58, 59, 62, 63 and 69 in a loop. Only the packet with 69 match the action (1st line in table=1).
>>>
>>> In 2nd test I set check_pkt_larger just by one byte less to 59 and then all the above packets match. So the precision seems to be rounded to 8 bytes or something like that.
>>> Can this be fixed to be more precise ideally to exact 1 byte?
>>>
>>>
>> Can you try without VLAN and see the accuracy ?
>>
>> I tried without VLAN, it's not accurate.
>>
>
> This is how the pkt length comparison is done
>
> in vswitchd -
> https://github.com/openvswitch/ovs/blob/master/ofproto/ofproto-dpif-xlate.c#L6265
> in kernel datapath -
> https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux/+/refs/heads/master/net/openvswitch/actions.c#1183
>
> I can see the problem only when using DPDK. Does it use the same code?
>
For flow translation the same code is hit.
I think for ovs-dpdk datapath flows, the code here [1] should get hit.

[1] - https://github.com/openvswitch/ovs/blob/master/lib/odp-execute.c#L766

I never tested with ovs-dpdk when I worked on it.

Thanks
Numan

When tested with non DPDK then it's working fine. Both versions are:
> $ ovs-ofctl --version
> ovs-ofctl (Open vSwitch) 2.13.0
> OpenFlow versions 0x1:0x6
>
> Thanks,
> Miro
>
>
> Thanks
> Numan
>
>
>>
>>
>
>> man ovs-actions for check_pkt_larger says
>>
>> ****
>> Syntax:
>>        check_pkt_larger(pkt_len)->dst
>>
>>        Checks if the packet is larger than the specified length in
>> pkt_len. If so, stores 1 in dst, which should be a 1-bit field; if not,
>> stores 0.
>>
>>        The packet length to check againt the argument pkt_len includes
>> the L2 header and L2 payload of the packet, but not the VLAN tag (if
>> present).
>>
>>        Examples:
>>               ·      check_pkt_larger(1500)->reg0[0]
>>               ·      check_pkt_larger(8000)->reg9[10]
>>
>> ******
>>
>> Thanks
>> Numan
>>
>> Thanks,
>>> Miro
>>>
>>>
>>>
>>>
>>> _______________________________________________
>> discuss mailing list
>> discuss at openvswitch.org
>> https://mail.openvswitch.org/mailman/listinfo/ovs-discuss
>>
> _______________________________________________
> discuss mailing list
> discuss at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-discuss/attachments/20200603/375f22d2/attachment.html>


More information about the discuss mailing list