On 03. 06. 20 20:09, 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 Wed, Jun 3, 2020 at 8:27 PM Miroslav Kubiczek <[email protected] <mailto:[email protected]>> 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
    <[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?

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, I added logging and I can see in that dp_packet_size(packet) is always greater or equal 60 even if the real packet size is 59 or less.



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
        [email protected] <mailto:[email protected]>
        https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

    _______________________________________________
    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