> On 18 Oct 2023, at 18:43, Ilya Maximets via discuss > <ovs-discuss@openvswitch.org> wrote: > > On 10/18/23 16:24, Vladislav Odintsov wrote: >> Hi Ilya, >> >> thanks for your response! >> >>> On 18 Oct 2023, at 15:59, Ilya Maximets via discuss >>> <ovs-discuss@openvswitch.org> wrote: >>> >>> On 10/17/23 16:30, Vladislav Odintsov via discuss wrote: >>>> Hi, >>>> >>>> I’m testing OVS hardware offload with tc flower with Mellanox/NVidia >>>> ConnectX-6 Dx smartnic and see next warning in ovs-vswitchd log: >>>> >>>> 2023-10-17T14:23:15.116Z|00386|tc(handler20)|WARN|Kernel flower >>>> acknowledgment does not match request! Set dpif_netlink to dbg to see >>>> which rule caused this error. >>>> >>>> With dpif_netlink debug logs enabled, after this message appears two >>>> additional lines: >>>> >>>> 2023-10-17T14:23:15.117Z|00387|dpif_netlink(handler20)|DBG|added flow >>>> 2023-10-17T14:23:15.117Z|00388|dpif_netlink(handler20)|DBG|system@ovs-system: >>>> put[create] ufid:d8a3ab6d-77d1-4574-8bbf-634b01a116f3 >>>> recirc_id(0),dp_hash(0/0),skb_priority(0/0),tunnel(tun_id=0x10,src=10.1.0.105,dst=10.1.0.109,ttl=64/0,tp_src=59507/0,tp_dst=6081/0,geneve({class=0x102,type=0x80,len=4,0x60002}),flags(-df+csum+key)),in_port(4),skb_mark(0/0),ct_state(0/0x2f),ct_zone(0/0),ct_mark(0/0),ct_label(0/0x3),eth(src=00:00:ba:a4:6e:ad,dst=00:01:ba:a4:6e:ad),eth_type(0x0800),ipv4(src=172.32.2.4/0.0.0.0,dst=172.32.1.4/0.0.0.0,proto=1,tos=0/0x3,ttl=63/0,frag=no),icmp(type=8/0,code=0/0), >>>> >>>> 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 >>>> >>> >>> Could you also enable debug logs for 'tc' module in OVS? >>> It shoudl give more infomation about where exactly is the >>> difference between what OVS asked for and what the kenrel >>> reported back. >>> >>> In general this warning typically signifies a kernel bug, >>> but it could be that OVS doesn't format something correctly >>> as well. >> >> With enabled tc logs I see mismatches in expected/real keys and actions: >> >> 2023-10-18T13:33:35.882Z|00118|tc(handler21)|DBG|tc flower compare failed >> action compare >> Expected Mask: >> 00000000 ff ff 00 00 ff ff ff ff-ff ff ff ff ff ff ff ff >> 00000030 00 00 2f 00 00 00 00 00-00 00 00 00 00 00 00 00 >> 00000040 03 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 >> 00000050 00 00 00 00 ff ff ff ff-00 00 00 00 00 00 00 00 >> 00000060 00 00 00 00 ff 00 00 00-00 00 00 00 00 00 00 00 >> 00000090 00 00 00 00 00 00 00 00-ff ff ff ff ff ff ff ff >> 000000c0 ff 00 00 00 ff ff 00 00-ff ff ff ff ff ff ff ff >> 000000d0 08 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 >> 000000e0 ff ff ff 01 ff ff ff ff-00 00 00 00 00 00 00 00 >> >> Received Mask: >> 00000000 ff ff 00 00 ff ff ff ff-ff ff ff ff ff ff ff ff >> 00000030 00 00 2f 00 00 00 00 00-00 00 00 00 00 00 00 00 >> 00000040 03 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 >> 00000050 00 00 00 00 ff ff ff ff-00 00 00 00 00 00 00 00 >> 00000060 00 00 00 00 ff 00 00 00-00 00 00 00 00 00 00 00 >> 00000090 00 00 00 00 00 00 00 00-ff ff ff ff ff ff ff ff >> 000000c0 ff 00 00 00 ff ff 00 00-ff ff ff ff ff ff ff ff >> 000000d0 08 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 >> 000000e0 ff ff ff 01 ff ff ff ff-00 00 00 00 00 00 00 00 >> >> Expected Key: >> 00000000 08 06 00 00 ff ff ff ff-ff ff 00 00 ba a4 6e ad >> 00000050 a9 fe 64 01 a9 fe 64 03-00 00 ba a4 6e ad 00 00 <— mismatch in >> this line >> 00000060 00 00 00 00 01 00 00 00-00 00 00 00 00 00 00 00 >> 00000090 00 00 00 00 00 00 00 00-0a 01 00 68 0a 01 00 6d >> 000000c0 00 40 c0 5b 17 c1 00 00-00 00 00 00 00 00 00 10 <— mismatch in >> this line >> 000000d0 08 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 >> 000000e0 01 02 80 01 00 03 00 02-00 00 00 00 00 00 00 00 >> >> Received Key: >> 00000000 08 06 00 00 ff ff ff ff-ff ff 00 00 ba a4 6e ad >> 00000050 00 00 00 00 a9 fe 64 03-00 00 00 00 00 00 00 00 <— mismatch in >> this line >> 00000060 00 00 00 00 01 00 00 00-00 00 00 00 00 00 00 00 >> 00000090 00 00 00 00 00 00 00 00-0a 01 00 68 0a 01 00 6d >> 000000c0 00 00 00 00 17 c1 00 00-00 00 00 00 00 00 00 10 <— mismatch in >> this line >> 000000d0 08 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 >> 000000e0 01 02 80 01 00 03 00 02-00 00 00 00 00 00 00 00 > > These are not very important, it is expected that the kernel clears out > fields that are not coverd by a mask. We do not have the difference > in the masks and we do not have a diference in the masked keys, so that > is fine. > >> >> Expected Masked Key: >> 00000000 08 06 00 00 ff ff ff ff-ff ff 00 00 ba a4 6e ad >> 00000050 00 00 00 00 a9 fe 64 03-00 00 00 00 00 00 00 00 >> 00000060 00 00 00 00 01 00 00 00-00 00 00 00 00 00 00 00 >> 00000090 00 00 00 00 00 00 00 00-0a 01 00 68 0a 01 00 6d >> 000000c0 00 00 00 00 17 c1 00 00-00 00 00 00 00 00 00 10 >> 000000d0 08 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 >> 000000e0 01 02 80 01 00 03 00 02-00 00 00 00 00 00 00 00 >> >> Received Masked Key: >> 00000000 08 06 00 00 ff ff ff ff-ff ff 00 00 ba a4 6e ad >> 00000050 00 00 00 00 a9 fe 64 03-00 00 00 00 00 00 00 00 >> 00000060 00 00 00 00 01 00 00 00-00 00 00 00 00 00 00 00 >> 00000090 00 00 00 00 00 00 00 00-0a 01 00 68 0a 01 00 6d >> 000000c0 00 00 00 00 17 c1 00 00-00 00 00 00 00 00 00 10 >> 000000d0 08 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 >> 000000e0 01 02 80 01 00 03 00 02-00 00 00 00 00 00 00 00 >> >> Action 0 mismatch: > > We do have the difference in the actions, that is the main issue here. > >> - Expected Action: >> 0x1000000000000000000000000ff0011c05b17c1004000000a01006d0a010112000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000010280010018000b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000 >> - Received Action: >> 0x1000000000000000000000000ff0011000017c1004000000a01006d0a010112000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000010280010018000b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000 >> 2023-10-18T13:33:35.882Z|00119|tc(handler21)|WARN|Kernel flower >> acknowledgment does not match request! Set dpif_netlink to dbg to see which >> rule caused this error. >> 2023-10-18T13:33:35.882Z|00120|dpif_netlink(handler21)|DBG|added flow >> 2023-10-18T13:33:35.882Z|00121|dpif_netlink(handler21)|DBG|system@ovs-system: >> put[create] ufid:dc160f96-84ef-4bf7-919a-3729c19382b8 >> recirc_id(0),dp_hash(0/0),skb_priority(0/0),tunnel(tun_id=0x10,src=10.1.0.104,dst=10.1.0.109,ttl=64/0,tp_src=49243/0,tp_dst=6081/0,geneve({class=0x102,type=0x80,len=4,0x30002}),flags(-df+csum+key)),in_port(4),skb_mark(0/0),ct_state(0/0x2f),ct_zone(0/0),ct_mark(0/0),ct_label(0/0x3),eth(src=00:00:ba:a4:6e:ad,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:ba:a4:6e:ad/00:00:00:00:00:00,tha=00:00:00:00:00:00/00:00:00:00:00:00), >> >> actions:set(tunnel(tun_id=0xff0011,src=10.1.0.109,dst=10.1.1.18,ttl=64,tp_src=49243,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x18000b}),flags(df|csum|key))),4 >> >> Is there any documentation or maybe code in OVS (or kernel, etc) to read to >> understand the reason for this mismatch in more details? >> Or, maybe you have a good next steps to advice? > > Unfortunately, that is just a direct hex dump of the tc_action structure: > > https://github.com/openvswitch/ovs/blob/c29ba54018520f957c48d947325ed50c9442b831/lib/tc.h#L233 > > The only way to figure out what exactly is wrong here is to find which > bytes in the expected and received actions are different and find which > field in the tc_action structure the difference is in. That's not fun. > > The following patch may make the spotting the difference a little easier: > > diff --git a/lib/tc.c b/lib/tc.c > index f85703633..39fe9c5cc 100644 > --- a/lib/tc.c > +++ b/lib/tc.c > @@ -3875,12 +3875,13 @@ log_tc_flower_match(const char *msg, > > for (int i = 0; i < a->action_count; i++, action_a++, action_b++) { > if (memcmp(action_a, action_b, sizeof *action_a)) { > - ds_put_format(&s, > - "\nAction %d mismatch:\n - Expected Action: ", > - i); > - ds_put_hex(&s, action_a, sizeof *action_a); > + ds_put_format(&s, "\nAction %d mismatch:" > + "\n - Expected Action:\n", i); > + ds_put_sparse_hex_dump(&s, action_a, sizeof *action_a, > + 0, false); > ds_put_cstr(&s, "\n - Received Action: "); > - ds_put_hex(&s, action_b, sizeof *action_b); > + ds_put_sparse_hex_dump(&s, action_b, sizeof *action_b, > + 0, false); > } > } > } > --- > > You may also need to use something like pahole on your OVS binary > to see the exact layout of the structure.
Unfortunately, I’m not experienced with pahole, so need some assistance from you if possible. I’ve built OVS with modified RPM spec file adding '--with-debug' to configure flags. Then I’ve installed the rebuilt openvswitch and openvswitch-debuginfo RPMs and ran pahole, but got error "unable to find type": # pahole -C tc_action /usr/lib/debug/usr/lib64/libopenvswitch-3.1.so.0.0.3-3.1.3-1.el8_4.x86_64.debug WARNING: DW_TAG_partial_unit used, some types will not be considered! Probably this was optimized using a tool like 'dwz' A future version of pahole will support this. pahole: type 'tc_action' not found I’m sure there should be a trivial mistake, but I couldn’t solve it. > > > The difference seems to be in these 2 bytes: > > 0x 1000000000000000000000000ff0011c05b17c1004000000a01006d0a010112 > 0x 1000000000000000000000000ff0011000017c1004000000a01006d0a010112 > ^^^^ > So, 16 byte offset within the structure. Let's guess it is an encap > field. Then it must be encap.tp_src. And that checks out, because > 0xc05b equals 49243, which is indeed a source port for the tunnel > encapsulation. > > So, it seems like for some reason kernel decided to not populate > the tunnel source port in the tunnel key after decapsulation, > even though it was asked to do so. > > @Eelco, @Marcelo, do you have some thoughts on that? > >> >>> >>>> The test system is a CentOS 8.4 with installed elrepo mainline kernel >>>> 6.5.5, OVS 3.1.1 and OVN 22.09.1. >>> >>> 3.1.1 contains some known bugs in TC offloading code, so >>> you may want to try the latest 3.1.3. Though it's unlikely >>> to be related ot the issue you're facing here. >> >> I’ve upgraded OVS to 3.1.3 to eliminate the possible known OVS bugs, but >> this didn’t help. >> Same warnings and mismatches still are reported. >> >>> >>>> The workload I’m testing is a L3 Gateway for OVN IC (cross-az traffic). >>>> >>>> tc monitor at the same moment outputs next: >>>> >>>> replaced filter dev genev_sys_6081 ingress protocol ip pref 2 flower chain >>>> 0 handle 0x3 >>>> dst_mac 00:01:ba:a4:6e:ad >>>> src_mac 00:00:ba:a4:6e:ad >>>> eth_type ipv4 >>>> ip_proto icmp >>>> ip_tos 0/0x3 >>>> enc_dst_ip 10.1.0.109 >>>> enc_src_ip 10.1.0.105 >>>> enc_key_id 16 >>>> enc_dst_port 6081 >>>> enc_tos 0 >>>> geneve_opts 0102:80:00060002/ffff:ff:ffffffff >>>> ip_flags nofrag >>>> ct_state -trk-new-est >>>> ct_label 00000000000000000000000000000000/030000000000000000000000000000 >>>> in_hw in_hw_count 2 >>>> action order 1: tunnel_key unset pipe >>>> index 5 ref 1 bind 1 >>>> no_percpu >>>> used_hw_stats delayed >>>> >>>> action order 2: tunnel_key set >>>> src_ip 10.1.0.109 >>>> dst_ip 10.1.1.18 >>>> key_id 16711697 >>>> dst_port 6081 > > And we can see here, TC only populates the dst_port, not the src_port > into the tunnel key, even though the source port was in the tunnel(set()) > action OVS requested. > >>>> geneve_opts 0102:80:0018000b >>>> csum >>>> ttl 64 pipe >>>> index 6 ref 1 bind 1 >>>> no_percpu >>>> used_hw_stats delayed >>>> >>>> action order 3: mirred (Egress Redirect to device genev_sys_6081) stolen >>>> index 3 ref 1 bind 1 >>>> cookie 6daba3d87445d1774b63bf8bf316a101 >>>> no_percpu >>>> used_hw_stats delayed >>>> >>>> >>>> Despite of these warnings, the flow is finally offloaded and the traffic >>>> traverses this gw node well, only first packets of an ICMP sequence reach >>>> CPU (seen in tcpdump): >>> >>> The warning is a warning. It doesn't prevent the flow to be installed. >>> Though the installed flow may be incorrect and the traffic may be >>> handled in the wrong way. Enabling debug logs for tc should show what >>> exacltly is wrong. >>> >>>> >>>> # ovs-appctl dpctl/dump-flows type=offloaded >>>> tunnel(tun_id=0x10,src=10.1.0.107,dst=10.1.0.109,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x50002}),flags(+key)),ct_state(-new-est-rel-rpl-trk),ct_label(0/0x3),recirc_id(0),in_port(4),eth(src=00:00:ba:a4:6e:ad,dst=00:01:ba:a4:6e:ad),eth_type(0x0800),ipv4(proto=1,tos=0/0x3,frag=no), >>>> packets:3192, bytes:312816, used:1.240s, >>>> actions:set(tunnel(tun_id=0xff0011,src=10.1.0.109,dst=10.1.1.18,ttl=64,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x18000b}),flags(csum|key))),4 >>>> tunnel(tun_id=0xff0011,src=10.1.1.18,dst=10.1.0.109,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0xb0018}),flags(+key)),ct_state(-new-est-rel-rpl-trk),ct_label(0/0x3),recirc_id(0),in_port(4),eth(src=00:01:ba:a4:6e:ad,dst=00:00:ba:a4:6e:ad),eth_type(0x0800),ipv4(src=172.32.1.0/255.255.255.0,dst=172.32.0.4,proto=1,tos=0/0x3,ttl=63,frag=no), >>>> packets:3192, bytes:312816, used:1.240s, >>>> actions:set(tunnel(tun_id=0x11,src=10.1.0.109,dst=10.1.0.107,ttl=64,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x10002}),flags(csum|key))),set(eth(src=d0:fe:00:00:00:1d,dst=0a:00:66:ec:f7:40)),set(ipv4(ttl=62)),4 >>>> tunnel(tun_id=0x10,src=10.1.0.105,dst=10.1.0.109,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x60002}),flags(+key)),ct_state(-new-est-rel-rpl-trk),ct_label(0/0x3),recirc_id(0),in_port(4),eth(src=00:00:ba:a4:6e:ad,dst=00:01:ba:a4:6e:ad),eth_type(0x0800),ipv4(proto=1,tos=0/0x3,frag=no), >>>> packets:293, bytes:28714, used:1.240s, >>>> actions:set(tunnel(tun_id=0xff0011,src=10.1.0.109,dst=10.1.1.18,ttl=64,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x18000b}),flags(csum|key))),4 >>>> tunnel(tun_id=0xff0011,src=10.1.1.18,dst=10.1.0.109,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0xb0018}),flags(+key)),ct_state(-new-est-rel-rpl-trk),ct_label(0/0x3),recirc_id(0),in_port(4),eth(src=00:01:ba:a4:6e:ad,dst=00:00:ba:a4:6e:ad),eth_type(0x0800),ipv4(src=172.32.1.0/255.255.255.0,dst=172.32.2.4,proto=1,tos=0/0x3,ttl=63,frag=no), >>>> packets:293, bytes:28714, used:1.240s, >>>> actions:set(tunnel(tun_id=0x17,src=10.1.0.109,dst=10.1.0.105,ttl=64,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x10002}),flags(csum|key))),set(eth(src=d0:fe:00:00:00:8e,dst=0a:00:40:c2:76:a0)),set(ipv4(ttl=62)),4 >>>> tunnel(tun_id=0x10,src=10.1.0.104,dst=10.1.0.109,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x30002}),flags(+key)),ct_state(-new-est-rel-rpl-trk),ct_label(0/0x3),recirc_id(0),in_port(4),eth(src=00:00:ba:a4:6e:ad,dst=00:01:ba:a4:6e:ad),eth_type(0x0800),ipv4(proto=6,tos=0/0x3,frag=no), >>>> packets:0, bytes:0, used:never, >>>> actions:set(tunnel(tun_id=0xff0011,src=10.1.0.109,dst=10.1.1.18,ttl=64,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x18000b}),flags(csum|key))),4 >>>> tunnel(tun_id=0xff0011,src=10.1.1.18,dst=10.1.0.109,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0xb0018}),flags(+key)),ct_state(-new-est-rel-rpl-trk),ct_label(0/0x3),recirc_id(0),in_port(4),eth(src=00:01:ba:a4:6e:ad,dst=00:00:ba:a4:6e:ad),eth_type(0x0800),ipv4(src=169.254.96.0/255.255.252.0,dst=169.254.99.0,proto=6,tos=0/0x3,ttl=254,frag=no), >>>> packets:0, bytes:0, used:never, >>>> actions:set(tunnel(tun_id=0xe,src=10.1.0.109,dst=10.1.0.104,ttl=64,tp_dst=6081,geneve({class=0x102,type=0x80,len=4,0x20001}),flags(csum|key))),set(eth(src=10:00:ba:a4:6e:ad,dst=02:00:ba:a4:6e:ad)),set(ipv4(ttl=253)),4 >>>> >>>> >>>> I’m wonder, whether this is a known issue (I couldn’t find any related >>>> messages searching in internet). >>>> Could someone give any advice/help with this? >>>> >>>> Thanks in advance. >>>> >>>> Regards, >>>> Vladislav Odintsov >>> >>> _______________________________________________ >>> discuss mailing list >>> disc...@openvswitch.org <mailto:disc...@openvswitch.org> >>> <mailto:disc...@openvswitch.org> >>> https://mail.openvswitch.org/mailman/listinfo/ovs-discuss >>> <https://mail.openvswitch.org/mailman/listinfo/ovs-discuss> >> >> >> Regards, >> Vladislav Odintsov >> > > _______________________________________________ > discuss mailing list > disc...@openvswitch.org <mailto:disc...@openvswitch.org> > https://mail.openvswitch.org/mailman/listinfo/ovs-discuss Regards, Vladislav Odintsov
_______________________________________________ discuss mailing list disc...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-discuss