On 1 April 2017 at 20:50, Roi Dayan <r...@mellanox.com> wrote: > > > On 31/03/2017 01:11, Marcelo Ricardo Leitner wrote: >> >> On Thu, Mar 30, 2017 at 03:43:36PM -0300, Marcelo Ricardo Leitner wrote: >>> >>> On Wed, Mar 29, 2017 at 03:43:10PM +0300, Roi Dayan wrote: >>>> >>>> This patch series introduces rule offload functionality to dpif-netlink >>>> via netdev ports new flow offloading API. The user can specify whether >>>> to >>>> enable rule offloading or not via OVS configuration. Netdev providers >>>> are able to implement netdev flow offload API in order to offload rules. >>>> >>>> This patch series also implements one offload scheme for netdev-linux, >>>> using TC flower classifier, which was chosen because its sort of natural >>>> to state OVS DP rules for this classifier. However, the code can be >>>> extended to support other classifiers such as U32, eBPF, etc which >>>> support >>>> offload as well. >>>> >>>> The use-case we are currently addressing is the newly sriov switchdev >>>> mode >>>> in the Linux kernel which was introduced in version 4.8 [1][2]. >>>> This series was tested against sriov vfs vports representors of the >>>> Mellanox 100G ConnectX-4 series exposed by the mlx5 kernel driver. >>>> >>>> >>>> V5->V6: >>>> - Rebase over master branch, fix compilation issue >>>> - Add Nicira copyright to tc interface >>> >>> >>> Hi, >>> >>> I built rpm packages based on OVS upstream commit 36664f336664. Then I >> >> >> Please s/36664f336664/36664f377d048/g in this email. >> This was the commit used as base for the test: >> commit 36664f377d04857256c1d8582057e1cf3e0e3923 >> Author: Ben Pfaff <b...@ovn.org> >> Date: Mon Mar 20 10:56:22 2017 -0700 >> >> ovsdb-server: Drop unnecessary find_db() function. >> >> Thanks >> >>> built a new set of packages with this patchset, v6, applied. >>> >>> When offloading is enabled, the rules are merged in an unexpected way. >>> See the results below from the two scenarios. >>> >>> openvswitch-2.7.90-1.fc24.36664f336664.x86_64.rpm >>> ^^^^^^^^^^^^ upstream ovs commit >>> >>> [root@wsfd-netdev36 ~]# ovs-ofctl dump-flows ovs_pvp_br0 >>> NXST_FLOW reply (xid=0x4): >>> cookie=0x0, duration=12.501s, table=0, n_packets=1022759, >>> n_bytes=61365540, idle_age=0, ip,in_port=1,nw_src=16.0.0.1,nw_dst=1.0.0.1 >>> actions=output:2 >>> cookie=0x0, duration=12.501s, table=0, n_packets=1020990, >>> n_bytes=61259400, idle_age=0, ip,in_port=1,nw_src=16.0.0.2,nw_dst=1.0.0.2 >>> actions=output:2 >>> cookie=0x0, duration=12.500s, table=0, n_packets=1023860, >>> n_bytes=61431600, idle_age=0, ip,in_port=1,nw_src=16.0.0.3,nw_dst=1.0.0.3 >>> actions=output:2 >>> cookie=0x0, duration=12.500s, table=0, n_packets=1022554, >>> n_bytes=61353240, idle_age=0, ip,in_port=1,nw_src=16.0.0.4,nw_dst=1.0.0.4 >>> actions=output:2 >>> cookie=0x0, duration=12.500s, table=0, n_packets=1021516, >>> n_bytes=61290960, idle_age=0, ip,in_port=1,nw_src=16.0.0.5,nw_dst=1.0.0.5 >>> actions=output:2 >>> cookie=0x0, duration=12.500s, table=0, n_packets=1020599, >>> n_bytes=61235940, idle_age=0, ip,in_port=1,nw_src=16.0.0.6,nw_dst=1.0.0.6 >>> actions=output:2 >>> cookie=0x0, duration=12.500s, table=0, n_packets=1022285, >>> n_bytes=61337100, idle_age=0, ip,in_port=1,nw_src=16.0.0.7,nw_dst=1.0.0.7 >>> actions=output:2 >>> cookie=0x0, duration=12.500s, table=0, n_packets=1021725, >>> n_bytes=61303500, idle_age=0, ip,in_port=1,nw_src=16.0.0.8,nw_dst=1.0.0.8 >>> actions=output:2 >>> cookie=0x0, duration=12.500s, table=0, n_packets=1022281, >>> n_bytes=61336860, idle_age=0, ip,in_port=1,nw_src=16.0.0.9,nw_dst=1.0.0.9 >>> actions=output:2 >>> cookie=0x0, duration=12.500s, table=0, n_packets=1022449, >>> n_bytes=61346940, idle_age=0, ip,in_port=1,nw_src=16.0.0.10,nw_dst=1.0.0.10 >>> actions=output:2 >>> cookie=0x0, duration=12.208s, table=0, n_packets=2580, n_bytes=154800, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.1,nw_dst=1.0.0.1 actions=output:1 >>> cookie=0x0, duration=12.208s, table=0, n_packets=2675, n_bytes=160500, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.2,nw_dst=1.0.0.2 actions=output:1 >>> cookie=0x0, duration=12.208s, table=0, n_packets=2520, n_bytes=151200, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.3,nw_dst=1.0.0.3 actions=output:1 >>> cookie=0x0, duration=12.208s, table=0, n_packets=2587, n_bytes=155220, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.4,nw_dst=1.0.0.4 actions=output:1 >>> cookie=0x0, duration=12.208s, table=0, n_packets=2640, n_bytes=158400, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.5,nw_dst=1.0.0.5 actions=output:1 >>> cookie=0x0, duration=12.208s, table=0, n_packets=2593, n_bytes=155580, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.6,nw_dst=1.0.0.6 actions=output:1 >>> cookie=0x0, duration=12.208s, table=0, n_packets=2634, n_bytes=158040, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.7,nw_dst=1.0.0.7 actions=output:1 >>> cookie=0x0, duration=12.208s, table=0, n_packets=2549, n_bytes=152940, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.8,nw_dst=1.0.0.8 actions=output:1 >>> cookie=0x0, duration=12.207s, table=0, n_packets=2627, n_bytes=157620, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.9,nw_dst=1.0.0.9 actions=output:1 >>> cookie=0x0, duration=12.207s, table=0, n_packets=2530, n_bytes=151800, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.10,nw_dst=1.0.0.10 actions=output:1 >>> >>> [root@wsfd-netdev36 ~]# ovs-dpctl dump-flows >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.7,dst=1.0.0.7,frag=no), >>> packets:1162916, bytes:69774960, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.10,dst=1.0.0.10,frag=no), >>> packets:1163402, bytes:69804120, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.6,dst=1.0.0.6,frag=no), >>> packets:2969, bytes:178140, used:0.011s, actions:2 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.4,dst=1.0.0.4,frag=no), >>> packets:2940, bytes:176400, used:0.011s, actions:2 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.2,dst=1.0.0.2,frag=no), >>> packets:3028, bytes:181680, used:0.011s, actions:2 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.9,dst=1.0.0.9,frag=no), >>> packets:3025, bytes:181500, used:0.011s, actions:2 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.5,dst=1.0.0.5,frag=no), >>> packets:3008, bytes:180480, used:0.011s, actions:2 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.3,dst=1.0.0.3,frag=no), >>> packets:1164847, bytes:69890820, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.4,dst=1.0.0.4,frag=no), >>> packets:1162983, bytes:69778980, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.6,dst=1.0.0.6,frag=no), >>> packets:1161018, bytes:69661080, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.8,dst=1.0.0.8,frag=no), >>> packets:2876, bytes:172560, used:0.011s, actions:2 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.1,dst=1.0.0.1,frag=no), >>> packets:2968, bytes:178080, used:0.011s, actions:2 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.8,dst=1.0.0.8,frag=no), >>> packets:1161890, bytes:69713400, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.9,dst=1.0.0.9,frag=no), >>> packets:1163228, bytes:69793680, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.2,dst=1.0.0.2,frag=no), >>> packets:1161539, bytes:69692340, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.5,dst=1.0.0.5,frag=no), >>> packets:1161402, bytes:69684120, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.10,dst=1.0.0.10,frag=no), >>> packets:2880, bytes:172800, used:0.011s, actions:2 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.1,dst=1.0.0.1,frag=no), >>> packets:1163599, bytes:69815940, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.7,dst=1.0.0.7,frag=no), >>> packets:2984, bytes:179040, used:0.011s, actions:2 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.3,dst=1.0.0.3,frag=no), >>> packets:2889, bytes:173340, used:0.011s, actions:2 >>> >>> >>> Now with >>> openvswitch-2.7.90-1.fc24.36664f336664.v6.x86_64.rpm >>> ^^^^^^^^^^^^^^^ this upstream commit + V6 >>> patchset >>> >>> [root@wsfd-netdev36 ~]# ovs-ofctl dump-flows ovs_pvp_br0 >>> NXST_FLOW reply (xid=0x4): >>> cookie=0x0, duration=6.876s, table=0, n_packets=171, n_bytes=10260, >>> idle_age=5, ip,in_port=1,nw_src=16.0.0.1,nw_dst=1.0.0.1 actions=output:2 >>> cookie=0x0, duration=6.877s, table=0, n_packets=139976996, >>> n_bytes=8398290046, idle_age=0, ip,in_port=1,nw_src=16.0.0.2,nw_dst=1.0.0.2 >>> actions=output:2 >>> cookie=0x0, duration=6.877s, table=0, n_packets=171, n_bytes=10260, >>> idle_age=5, ip,in_port=1,nw_src=16.0.0.3,nw_dst=1.0.0.3 actions=output:2 >>> cookie=0x0, duration=6.877s, table=0, n_packets=170, n_bytes=10200, >>> idle_age=5, ip,in_port=1,nw_src=16.0.0.4,nw_dst=1.0.0.4 actions=output:2 >>> cookie=0x0, duration=6.877s, table=0, n_packets=170, n_bytes=10200, >>> idle_age=5, ip,in_port=1,nw_src=16.0.0.5,nw_dst=1.0.0.5 actions=output:2 >>> cookie=0x0, duration=6.876s, table=0, n_packets=170, n_bytes=10200, >>> idle_age=5, ip,in_port=1,nw_src=16.0.0.6,nw_dst=1.0.0.6 actions=output:2 >>> cookie=0x0, duration=6.876s, table=0, n_packets=170, n_bytes=10200, >>> idle_age=5, ip,in_port=1,nw_src=16.0.0.7,nw_dst=1.0.0.7 actions=output:2 >>> cookie=0x0, duration=6.876s, table=0, n_packets=170, n_bytes=10200, >>> idle_age=5, ip,in_port=1,nw_src=16.0.0.8,nw_dst=1.0.0.8 actions=output:2 >>> cookie=0x0, duration=6.876s, table=0, n_packets=170, n_bytes=10200, >>> idle_age=5, ip,in_port=1,nw_src=16.0.0.9,nw_dst=1.0.0.9 actions=output:2 >>> cookie=0x0, duration=6.876s, table=0, n_packets=170, n_bytes=10200, >>> idle_age=5, ip,in_port=1,nw_src=16.0.0.10,nw_dst=1.0.0.10 actions=output:2 >>> cookie=0x0, duration=6.585s, table=0, n_packets=82, n_bytes=4920, >>> idle_age=5, ip,in_port=2,nw_src=16.0.0.1,nw_dst=1.0.0.1 actions=output:1 >>> cookie=0x0, duration=6.585s, table=0, n_packets=81, n_bytes=4860, >>> idle_age=5, ip,in_port=2,nw_src=16.0.0.2,nw_dst=1.0.0.2 actions=output:1 >>> cookie=0x0, duration=6.584s, table=0, n_packets=77, n_bytes=4620, >>> idle_age=5, ip,in_port=2,nw_src=16.0.0.3,nw_dst=1.0.0.3 actions=output:1 >>> cookie=0x0, duration=6.584s, table=0, n_packets=78, n_bytes=4680, >>> idle_age=5, ip,in_port=2,nw_src=16.0.0.4,nw_dst=1.0.0.4 actions=output:1 >>> cookie=0x0, duration=6.584s, table=0, n_packets=72, n_bytes=4320, >>> idle_age=5, ip,in_port=2,nw_src=16.0.0.5,nw_dst=1.0.0.5 actions=output:1 >>> cookie=0x0, duration=6.584s, table=0, n_packets=67, n_bytes=4020, >>> idle_age=5, ip,in_port=2,nw_src=16.0.0.6,nw_dst=1.0.0.6 actions=output:1 >>> cookie=0x0, duration=6.584s, table=0, n_packets=75, n_bytes=4500, >>> idle_age=5, ip,in_port=2,nw_src=16.0.0.7,nw_dst=1.0.0.7 actions=output:1 >>> cookie=0x0, duration=6.584s, table=0, n_packets=63, n_bytes=3780, >>> idle_age=5, ip,in_port=2,nw_src=16.0.0.8,nw_dst=1.0.0.8 actions=output:1 >>> cookie=0x0, duration=6.584s, table=0, n_packets=61708007, >>> n_bytes=3702480420, idle_age=0, ip,in_port=2,nw_src=16.0.0.9,nw_dst=1.0.0.9 >>> actions=output:1 >>> cookie=0x0, duration=6.583s, table=0, n_packets=65, n_bytes=3900, >>> idle_age=5, ip,in_port=2,nw_src=16.0.0.10,nw_dst=1.0.0.10 actions=output:1 >>> [root@wsfd-netdev36 ~]# ovs-dpctl dump-flows >>> in_port(1),eth(dst=00:00:00:00:00:01),eth_type(0x0800), packets:86436432, >>> bytes:5186185920, used:0.430s, actions:2 >>> in_port(2),eth(dst=00:00:00:00:00:01),eth_type(0x0800), >>> packets:196008690, bytes:11760191686, used:0.430s, actions:1 >>> ^--- issue above >>> listing tc filter rules gives exactly the rules above too, on both >>> interfaces. >>> >>> Then: >>> # ovs-vsctl set Open_vSwitch . other_config:hw-offload=false >>> # systemctl restart openvswitch.service >>> >>> [root@wsfd-netdev36 ~]# ovs-ofctl dump-flows ovs_pvp_br0 >>> NXST_FLOW reply (xid=0x4): >>> cookie=0x0, duration=5.710s, table=0, n_packets=399560, >>> n_bytes=23973600, idle_age=0, ip,in_port=1,nw_src=16.0.0.1,nw_dst=1.0.0.1 >>> actions=output:2 >>> cookie=0x0, duration=5.710s, table=0, n_packets=399256, >>> n_bytes=23955360, idle_age=0, ip,in_port=1,nw_src=16.0.0.2,nw_dst=1.0.0.2 >>> actions=output:2 >>> cookie=0x0, duration=5.710s, table=0, n_packets=400018, >>> n_bytes=24001080, idle_age=0, ip,in_port=1,nw_src=16.0.0.3,nw_dst=1.0.0.3 >>> actions=output:2 >>> cookie=0x0, duration=5.709s, table=0, n_packets=399667, >>> n_bytes=23980020, idle_age=0, ip,in_port=1,nw_src=16.0.0.4,nw_dst=1.0.0.4 >>> actions=output:2 >>> cookie=0x0, duration=5.709s, table=0, n_packets=400011, >>> n_bytes=24000660, idle_age=0, ip,in_port=1,nw_src=16.0.0.5,nw_dst=1.0.0.5 >>> actions=output:2 >>> cookie=0x0, duration=5.709s, table=0, n_packets=399651, >>> n_bytes=23979060, idle_age=0, ip,in_port=1,nw_src=16.0.0.6,nw_dst=1.0.0.6 >>> actions=output:2 >>> cookie=0x0, duration=5.709s, table=0, n_packets=400000, >>> n_bytes=24000000, idle_age=0, ip,in_port=1,nw_src=16.0.0.7,nw_dst=1.0.0.7 >>> actions=output:2 >>> cookie=0x0, duration=5.709s, table=0, n_packets=399198, >>> n_bytes=23951880, idle_age=0, ip,in_port=1,nw_src=16.0.0.8,nw_dst=1.0.0.8 >>> actions=output:2 >>> cookie=0x0, duration=5.709s, table=0, n_packets=400489, >>> n_bytes=24029340, idle_age=0, ip,in_port=1,nw_src=16.0.0.9,nw_dst=1.0.0.9 >>> actions=output:2 >>> cookie=0x0, duration=5.709s, table=0, n_packets=399782, >>> n_bytes=23986920, idle_age=0, ip,in_port=1,nw_src=16.0.0.10,nw_dst=1.0.0.10 >>> actions=output:2 >>> cookie=0x0, duration=5.419s, table=0, n_packets=1081, n_bytes=64860, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.1,nw_dst=1.0.0.1 actions=output:1 >>> cookie=0x0, duration=5.419s, table=0, n_packets=1037, n_bytes=62220, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.2,nw_dst=1.0.0.2 actions=output:1 >>> cookie=0x0, duration=5.419s, table=0, n_packets=1048, n_bytes=62880, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.3,nw_dst=1.0.0.3 actions=output:1 >>> cookie=0x0, duration=5.419s, table=0, n_packets=1072, n_bytes=64320, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.4,nw_dst=1.0.0.4 actions=output:1 >>> cookie=0x0, duration=5.418s, table=0, n_packets=1096, n_bytes=65760, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.5,nw_dst=1.0.0.5 actions=output:1 >>> cookie=0x0, duration=5.418s, table=0, n_packets=1028, n_bytes=61680, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.6,nw_dst=1.0.0.6 actions=output:1 >>> cookie=0x0, duration=5.418s, table=0, n_packets=1042, n_bytes=62520, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.7,nw_dst=1.0.0.7 actions=output:1 >>> cookie=0x0, duration=5.418s, table=0, n_packets=1017, n_bytes=61020, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.8,nw_dst=1.0.0.8 actions=output:1 >>> cookie=0x0, duration=5.418s, table=0, n_packets=1080, n_bytes=64800, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.9,nw_dst=1.0.0.9 actions=output:1 >>> cookie=0x0, duration=5.418s, table=0, n_packets=1055, n_bytes=63300, >>> idle_age=0, ip,in_port=2,nw_src=16.0.0.10,nw_dst=1.0.0.10 actions=output:1 >>> [root@wsfd-netdev36 ~]# ovs-dpctl dump-flows >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.2,dst=1.0.0.2,frag=no), >>> packets:608565, bytes:36513900, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.3,dst=1.0.0.3,frag=no), >>> packets:610002, bytes:36600120, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.5,dst=1.0.0.5,frag=no), >>> packets:1595, bytes:95700, used:0.013s, actions:2 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.5,dst=1.0.0.5,frag=no), >>> packets:609962, bytes:36597720, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.10,dst=1.0.0.10,frag=no), >>> packets:1573, bytes:94380, used:0.013s, actions:2 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.7,dst=1.0.0.7,frag=no), >>> packets:610297, bytes:36617820, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.9,dst=1.0.0.9,frag=no), >>> packets:1656, bytes:99360, used:0.013s, actions:2 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.6,dst=1.0.0.6,frag=no), >>> packets:608943, bytes:36536580, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.3,dst=1.0.0.3,frag=no), >>> packets:1595, bytes:95700, used:0.038s, actions:2 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.1,dst=1.0.0.1,frag=no), >>> packets:1627, bytes:97620, used:0.013s, actions:2 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.2,dst=1.0.0.2,frag=no), >>> packets:1588, bytes:95280, used:0.013s, actions:2 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.8,dst=1.0.0.8,frag=no), >>> packets:608778, bytes:36526680, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.4,dst=1.0.0.4,frag=no), >>> packets:1550, bytes:93000, used:0.013s, actions:2 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.4,dst=1.0.0.4,frag=no), >>> packets:609149, bytes:36548940, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.7,dst=1.0.0.7,frag=no), >>> packets:1574, bytes:94440, used:0.038s, actions:2 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.9,dst=1.0.0.9,frag=no), >>> packets:610471, bytes:36628260, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.8,dst=1.0.0.8,frag=no), >>> packets:1566, bytes:93960, used:0.013s, actions:2 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.1,dst=1.0.0.1,frag=no), >>> packets:609238, bytes:36554280, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=16.0.0.10,dst=1.0.0.10,frag=no), >>> packets:609208, bytes:36552480, used:0.000s, actions:1 >>> >>> recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=16.0.0.6,dst=1.0.0.6,frag=no), >>> packets:1573, bytes:94380, used:0.013s, actions:2 >>> ^--- rules are not merged anymore. >>> >>> devlink inline-mode = transport for all tests above. >>> >>> I can provide a packet capture if wanted. Replaying it should be enough >>> to trigger it, though these packets have nothing really especial. They >>> have all the same src/dst MAC addresses and increasing IP addresses, as >>> seen above. >>> >>> I tried checking ovs logs, but couldn't spot anything interesting. >>> >>> This is also observed from a performance point of view. It doesn't >>> matter if we add 10 or 10k flows with L3 matching, performance is always >>> the same, as it's matching using only 2 L2 rules. >>> >>> Please let me know if you need anything else. >>> >>> Thanks, >>> Marcelo > > > Hi Marcelo, > > thanks for the detailed report. I successfully reproduced an issue with L3 > IP matching. We'll check it out.
Hi Roi, any details on this? Can we eliminate this class of problems? One of the underlying concerns with this series is that users will push down rules, and everything will be OK, no errors or log messages, but the resulting datapath flows are wrong because the datapath ignored or dropped some pieces such as key fields, mask fields, or actions. I'd be curious to understand why the above bug happens. _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev