Hi Ilya,

> On 15 Nov 2023, at 21:51, Ilya Maximets <i.maxim...@ovn.org> wrote:
> 
> On 11/15/23 14:13, Vladislav Odintsov wrote:
>> Hi Ilya,
>> 
>>> On 13 Nov 2023, at 22:25, Ilya Maximets <i.maxim...@ovn.org> wrote:
>>> 
>>> On 11/13/23 13:13, Eelco Chaudron wrote:
>>>> 
>>>> 
>>>> On 13 Nov 2023, at 12:43, Vladislav Odintsov wrote:
>>>> 
>>>>>> On 13 Nov 2023, at 14:17, Eelco Chaudron <echau...@redhat.com> wrote:
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On 8 Nov 2023, at 14:39, Vladislav Odintsov wrote:
>>>>>> 
>>>>>>> Hi Ilya, Eelco,
>>>>>>> 
>>>>>>> I’ve tried this patch against 3.1 and latest master branch. There are 
>>>>>>> no warnings anymore,
>>>>>>> but it seems that in my installation it has broken offload capability.
>>>>>> 
>>>>>> Yes, this is expected, this specific flow can not be offloaded with TC 
>>>>>> and therefore will be processed by the kernel datapath.
>>>>> 
>>>>> But why did it work before the patch? The traffic was offloaded to it was 
>>>>> flowing correctly.
>>>> 
>>>> It seemed to work, but your rule had an action to set the source port to 
>>>> 59507, however, this is not happening with tc.
>>>> 
>>>>  
>>>> actions:set(tunnel(tun_id=0xff0011,src=10.1.0.109,dst=10.1.1.18,ttl=64,tp_src=59507,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x18000b}),flags(df|csum|key))),4
>>>> 
>>>> If you still want to offload this flow, you should not configure the 
>>>> tp_src for this action, and it will be offloaded.
>>>> 
>>>> Ilya, is this done by OVN? If so, it might need a change there also.
>>> 
>>> I don't think there is a direct way to force the tp_src into the action.
>>> OVS is making decision based on the set of flows it has, but I'm not
>>> sure why exactly.
>>> 
>>> Vladislav, could you try running ofproto/trace for the packet of interest
>>> on your setup?  This may shed some light on why exactly OVS wants this
>>> field to be part of the action.
>> 
>> There were no DP flows with tp_src in action in ovs-appctl dpctl/dump-flows
>> output, so I grab such flow (with tp_src set in action) from ovs-vswitchd 
>> logs
>> with enabled dpif_netlink dbg loglevel:
>> 
>> 2023-11-15T12:52:36.279Z|00056|dpif_netlink(handler3)|DBG|added flow
>> 2023-11-15T12:52:36.279Z|00057|dpif_netlink(handler3)|DBG|system@ovs-system: 
>> put[create] ufid:23548c16-67c6-47af-a710-2d80cab0a361 
>> recirc_id(0),dp_hash(0/0),skb_priority(0/0),tunnel(tun_id=0x6,src=10.1.0.103,dst=10.1.0.109,ttl=64/0,tp_src=3275/0,tp_dst=6081/0,geneve({class=0x102,type=0x80,len=4,0x40003}),flags(-df+csum+key)),in_port(5),skb_mark(0/0),ct_state(0/0x2f),ct_zone(0/0),ct_mark(0/0),ct_label(0/0x3),eth(src=00:00:c9:99:bd:0e,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=169.254.100.1/0.0.0.0,tip=169.254.100.3,op=1,sha=00:00:c9:99:bd:0e/00:00:00:00:00:00,tha=00:00:00:00:00:00/00:00:00:00:00:00),
>>  
>> actions:set(tunnel(tun_id=0xff0002,src=10.1.0.109,dst=10.1.1.18,ttl=64,tp_src=3275,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x55008e}),flags(df|csum|key))),5
>> 
>> and tracing:
>> 
>> # ovs-appctl ofproto/trace 
>> 'recirc_id(0),dp_hash(0/0),skb_priority(0/0),tunnel(tun_id=0x6,src=10.1.0.103,dst=10.1.0.109,ttl=64/0,tp_src=3275/0,tp_dst=6081/0,geneve({class=0x102,type=0x80,len=4,0x40003}),flags(-df+csum+key)),in_port(5),skb_mark(0/0),ct_state(0/0x2f),ct_zone(0/0),ct_mark(0/0),ct_label(0/0x3),eth(src=00:00:c9:99:bd:0e,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=169.254.100.1/0.0.0.0,tip=169.254.100.3,op=1,sha=00:00:c9:99:bd:0e/00:00:00:00:00:00,tha=00:00:00:00:00:00/00:00:00:00:00:00)'
>> Flow: 
>> arp,tun_id=0x6,tun_src=10.1.0.103,tun_dst=10.1.0.109,tun_ipv6_src=::,tun_ipv6_dst=::,tun_gbp_id=0,tun_gbp_flags=0,tun_tos=0,tun_ttl=64,tun_erspan_ver=0,gtpu_flags=0,gtpu_msgtype=0,tun_flags=csum|key,tun_metadata0=0x40003,in_port=17,vlan_tci=0x0000,dl_src=00:00:c9:99:bd:0e,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=169.254.100.1,arp_tpa=169.254.100.3,arp_op=1,arp_sha=00:00:c9:99:bd:0e,arp_tha=00:00:00:00:00:00
>> 
>> bridge("br-int")
>> ----------------
>>  0. in_port=17, priority 100
>>     move:NXM_NX_TUN_ID[0..23]->OXM_OF_METADATA[0..23]
>>      -> OXM_OF_METADATA[0..23] is now 0x6
>>     move:NXM_NX_TUN_METADATA0[16..30]->NXM_NX_REG14[0..14]
>>      -> NXM_NX_REG14[0..14] is now 0x4
>>     move:NXM_NX_TUN_METADATA0[0..15]->NXM_NX_REG15[0..15]
>>      -> NXM_NX_REG15[0..15] is now 0x3
>>     resubmit(,38)
>> 38. reg15=0x3,metadata=0x6, priority 100, cookie 0xdb490628
>>     set_field:0x2->reg15
>>     set_field:0x2->reg11
>>     set_field:0x6->reg12
>>     resubmit(,39)
>> 39. priority 0
>>     set_field:0->reg0
>>     set_field:0->reg1
>>     set_field:0->reg2
>>     set_field:0->reg3
>>     set_field:0->reg4
>>     set_field:0->reg5
>>     set_field:0->reg6
>>     set_field:0->reg7
>>     set_field:0->reg8
>>     set_field:0->reg9
>>     resubmit(,40)
>> 40. metadata=0x6, priority 0, cookie 0xc3547f56
>>     set_field:0/0x10->xreg4
>>     resubmit(,41)
>> 41. metadata=0x6, priority 0, cookie 0x64834c48
>>     resubmit(,42)
>> 42. metadata=0x6, priority 0, cookie 0xc1a1d8a2
>>     resubmit(,43)
>> 43. metadata=0x6, priority 0, cookie 0x20edcb50
>>     resubmit(,44)
>> 44. metadata=0x6, priority 0, cookie 0xb22206a8
>>     resubmit(,45)
>> 45. metadata=0x6, priority 0, cookie 0xe07a9d12
>>     resubmit(,46)
>> 46. reg15=0x2,metadata=0x6, priority 100, cookie 0x1261fd96
>>     resubmit(,64)
>> 64. priority 0
>>     resubmit(,65)
>> 65. reg15=0x2,metadata=0x6, priority 100, cookie 0x903b6c1d
>>     
>> clone(ct_clear,set_field:0->reg11,set_field:0->reg12,set_field:0->reg13,set_field:0xc->reg11,set_field:0x9->reg12,set_field:0xff0002->metadata,set_field:0x55->reg14,set_field:0->reg10,set_field:0->reg15,set_field:0->reg0,set_field:0->reg1,set_field:0->reg2,set_field:0->reg3,set_field:0->reg4,set_field:0->reg5,set_field:0->reg6,set_field:0->reg7,set_field:0->reg8,set_field:0->reg9,resubmit(,8))
>>     ct_clear
>>     set_field:0->reg11
>>     set_field:0->reg12
>>     set_field:0->reg13
>>     set_field:0xc->reg11
>>     set_field:0x9->reg12
>>     set_field:0xff0002->metadata
>>     set_field:0x55->reg14
>>     set_field:0->reg10
>>     set_field:0->reg15
>>     set_field:0->reg0
>>     set_field:0->reg1
>>     set_field:0->reg2
>>     set_field:0->reg3
>>     set_field:0->reg4
>>     set_field:0->reg5
>>     set_field:0->reg6
>>     set_field:0->reg7
>>     set_field:0->reg8
>>     set_field:0->reg9
>>     resubmit(,8)
>>  8. metadata=0xff0002, priority 50, cookie 0x577856d6
>>     set_field:0/0x1000->reg10
>>     resubmit(,73)
>>     73. No match.
>>             drop
>>     move:NXM_NX_REG10[12]->NXM_NX_XXREG0[111]
>>      -> NXM_NX_XXREG0[111] is now 0
>>     resubmit(,9)
>>  9. metadata=0xff0002, priority 0, cookie 0x5ccc67cb
>>     resubmit(,10)
>> 10. metadata=0xff0002, priority 0, cookie 0xfa1655a9
>>     resubmit(,11)
>> 11. metadata=0xff0002, priority 0, cookie 0x573cb297
>>     resubmit(,12)
>> 12. metadata=0xff0002, priority 0, cookie 0x9484d696
>>     resubmit(,13)
>> 13. metadata=0xff0002,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00, priority 
>> 110, cookie 0x318d5cd4
>>     resubmit(,14)
>> 14. metadata=0xff0002, priority 0, cookie 0x2e0a4e13
>>     resubmit(,15)
>> 15. metadata=0xff0002, priority 65535, cookie 0x9f411194
>>     resubmit(,16)
>> 16. metadata=0xff0002, priority 65535, cookie 0x83a5ca2c
>>     resubmit(,17)
>> 17. metadata=0xff0002, priority 0, cookie 0xe87f9407
>>     resubmit(,18)
>> 18. metadata=0xff0002, priority 0, cookie 0x75403eb9
>>     resubmit(,19)
>> 19. metadata=0xff0002, priority 0, cookie 0xc18625c0
>>     resubmit(,20)
>> 20. metadata=0xff0002, priority 0, cookie 0xb81b324
>>     resubmit(,21)
>> 21. metadata=0xff0002, priority 0, cookie 0x1d3cdf0d
>>     resubmit(,22)
>> 22. metadata=0xff0002, priority 0, cookie 0xe7e06c1e
>>     resubmit(,23)
>> 23. metadata=0xff0002, priority 0, cookie 0x46d2ac7d
>>     resubmit(,24)
>> 24. metadata=0xff0002, priority 0, cookie 0x3b63f9de
>>     resubmit(,25)
>> 25. metadata=0xff0002, priority 0, cookie 0x3a0b4c7c
>>     resubmit(,26)
>> 26. metadata=0xff0002, priority 0, cookie 0x4868c582
>>     resubmit(,27)
>> 27. metadata=0xff0002, priority 0, cookie 0xe247626
>>     resubmit(,28)
>> 28. metadata=0xff0002, priority 0, cookie 0xd0f0fe80
>>     resubmit(,29)
>> 29. metadata=0xff0002, priority 0, cookie 0xa1decea3
>>     resubmit(,30)
>> 30. metadata=0xff0002, priority 0, cookie 0x72a20311
>>     resubmit(,31)
>> 31. arp,metadata=0xff0002,dl_src=00:00:c9:99:bd:0e,arp_op=1, priority 75, 
>> cookie 0x1baa2454
>>     set_field:0x8004->reg15
>>     resubmit(,37)
>> 37. reg15=0x8004,metadata=0xff0002, priority 100, cookie 0xfef4a15e
>>     set_field:0x8e->reg15
>>     set_field:0xff0002/0xffffff->tun_id
>>     set_field:0x8e->tun_metadata0
>>     move:NXM_NX_REG14[0..14]->NXM_NX_TUN_METADATA0[16..30]
>>      -> NXM_NX_TUN_METADATA0[16..30] is now 0x55
>>     output:9
>>      -> output to kernel tunnel
>>     set_field:0x8004->reg15
>> 
>> Final flow: 
>> arp,reg11=0x2,reg12=0x6,reg14=0x4,reg15=0x2,tun_id=0x6,tun_src=10.1.0.103,tun_dst=10.1.0.109,tun_ipv6_src=::,tun_ipv6_dst=::,tun_gbp_id=0,tun_gbp_flags=0,tun_tos=0,tun_ttl=64,tun_erspan_ver=0,gtpu_flags=0,gtpu_msgtype=0,tun_flags=csum|key,tun_metadata0=0x40003,metadata=0x6,in_port=17,vlan_tci=0x0000,dl_src=00:00:c9:99:bd:0e,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=169.254.100.1,arp_tpa=169.254.100.3,arp_op=1,arp_sha=00:00:c9:99:bd:0e,arp_tha=00:00:00:00:00:00
>> Megaflow: 
>> recirc_id=0,ct_state=-new-est-rel-rpl-trk,ct_label=0/0x3,eth,arp,tun_id=0x6,tun_src=10.1.0.103,tun_dst=10.1.0.109,tun_tos=0,tun_flags=-df+csum+key,tun_metadata0=0x40003,in_port=17,dl_src=00:00:c9:99:bd:0e,dl_dst=ff:ff:ff:ff:ff:ff,arp_tpa=169.254.100.3,arp_op=1
>> Datapath actions: 
>> set(tunnel(tun_id=0xff0002,src=10.1.0.109,dst=10.1.1.18,ttl=64,tp_src=3275,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x55008e}),flags(df|csum|key))),5
>> 
>> The traffic is an OVN interconnection usecase, where there is a transit 
>> switch
>> and two LRs are connected to it on different Availability Zones.  LR on AZ1
>> tries to resolve ARP for LR in another AZ.
>> 
>> I’d like to add here, that I see if there is a tp_src field in match portion,
>> there will be tp_src in action part.  And vice versa.
> 
> OK, I see what is going on here.  The traffic is received from one tunnel
> and is being sent to a different one.  It's technically not necessary to
> set the tp_src in this particular case, so we may be abe to improve this
> and allow offloading.  But some very careful checks needed, since the
> filled value may come not only from the previous tunnel metadata, but also
> can be set through other actions, in which case we can't simply drop it.
> Needs some investigation.
> 
> BTW, is this only for ARP traffic, or some heavy datapath traffic like
> TCP/UDP is also flowing through this path and you actually care for it
> to be offloaded?

ICMP/tcp also not offloaded with patch applied, but offload is working on 
current master branch.

> 
>> 
>>> 
>>> But, as Eelco said, as long as this field is part of the action, we
>>> can't allow it to be offloaded, just because TC doesn't support it.
>> 
>> Do I understand correctly, that this patch introduced a kind of regression in
>> my case because earlier kernel ignored tp_src, which was set by OVS and the 
>> tc
>> rule was installed and traffic was HW-offloaded and worked fine.
>> And now OVS sees it tries to offload a flow with tp_src set and it decides 
>> such
>> flow is not allowed to be offloaded?
> 
> Yes.  Currently the vaue is just getting ignored, because there is no
> way to deliver it to TC and offloading kind of "works".  With the fix
> applied, OVS doesn't allow that to happen.
> 
>> 
>>> 
>>> Best regards, Ilya Maximets.
>>> _______________________________________________
>>> dev mailing list
>>> d...@openvswitch.org <mailto:d...@openvswitch.org>
>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>> 
>> 
>> Regards,
>> Vladislav Odintsov
>> 
> 
> _______________________________________________
> dev mailing list
> d...@openvswitch.org <mailto:d...@openvswitch.org>
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Regards,
Vladislav Odintsov

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to