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 <[email protected] <mailto:[email protected]>> wrote:


    On 29. 05. 20 11:29, Numan Siddique wrote:
    On Fri, May 29, 2020 at 2:25 PM Miroslav Kubiczek
    <[email protected]
    <mailto:[email protected]>> 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?
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
    [email protected] <mailto:[email protected]>
    https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

_______________________________________________
discuss mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Reply via email to