On 5/29/20 12:51 PM, Numan Siddique wrote:
> 
> 
> 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
> 
> Thanks
> Numan
>  
> 

Is it maybe related to minimum ethernet frame size (which should be
64B). I didn't check any of the code though to see if padding is added
anywhere or if the padding is considered in dp_packet_size().

Regards,
Dumitru

>      
> 
>>
>>     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
> 

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

Reply via email to