Hi Ilya,

> On 13 Nov 2023, at 22:25, Ilya Maximets <[email protected]> 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 <[email protected]> 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.

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

> 
> Best regards, Ilya Maximets.
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Regards,
Vladislav Odintsov

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

Reply via email to