[ovs-dev] [PATCH] tests/ofproto-dpif: Use vlog to test dpif behaviour.

YAMAMOTO Takashi yamamoto at valinux.co.jp
Tue Apr 8 01:53:43 UTC 2014


> To clarify, this patch is aimed at the following type of situation:
> * netdev-dummy puts the packet on the queue.
> * Upcall handler receives the packet, installs a flow.
> * Revalidator decides to delete the flow (examples are the flow fails
> revalidation, or flow is deemed unimportant, other such situations have
> been reproduced on an upcoming patchset)

can they happen with the current code and tests?

> * The test script attempts to dump flows from the datapath, but there are
> no flows.

thanks for explanation.

now i inderstand that your patch attempts to fix different races
from my patch.  right?

YAMAMOTO Takashi

> 
> 
> 
> 
> On 7 April 2014 16:50, Joe Stringer <joe at wand.net.nz> wrote:
> 
>> From: Joe Stringer <joestringer at nicira.com>
>>
>> Previously we made heavy use of the 'ovs-appctl dpif/dump-flows' command
>> to verify that flows were being installed into the datapath correctly.
>> However this is sensitive to timing, particularly when the behaviour of
>> revalidator threads is modified.
>>
>> This patch reworks the tests to make use of the vlog facility for dpif,
>> checking for flow installation and flow dump messages. Most tests are
>> converted to check for flow installation, which should reduce race
>> conditions significantly. For tests that require packet counts, these
>> will continue to check for flow_dump messages. Race conditions for these
>> should be reduced but not eliminated.
>>
>> Signed-off-by: Joe Stringer <joestringer at nicira.com>
>> ---
>>  tests/ofproto-dpif.at |  219
>> ++++++++++++++++++++++++++++++-------------------
>>  1 file changed, 133 insertions(+), 86 deletions(-)
>>
>> diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
>> index f2ddda9..93bc866 100644
>> --- a/tests/ofproto-dpif.at
>> +++ b/tests/ofproto-dpif.at
>> @@ -11,6 +11,17 @@ m4_define([STRIP_XOUT], [[sed '
>>      s/packets:[0-9]*/packets:0/
>>      s/bytes:[0-9]*/bytes:0/
>>  ' | sort]])
>> +m4_define([FILTER_FLOW_INSTALL], [[
>> +grep ' put' | sed '
>> +    s/.*put\[create\]\[modify\] //
>> +' | sort | uniq]])
>> +m4_define([FILTER_FLOW_STATS], [[
>> +grep -e 'flow_del ' -e 'flow_dump ' | sed '
>> +    s/.*flow_del //
>> +    s/.*flow_dump //
>> +    s/used:[0-9]*\.[0-9]*/used:0.0/
>> +    s/, actions:.*//
>> +' | sort | uniq]])
>>
>>  AT_SETUP([ofproto-dpif - dummy interface])
>>  # Create br0 with interfaces p1 and p7
>> @@ -25,6 +36,7 @@ OVS_VSWITCHD_START(
>>                    fail-mode=secure -- \
>>     add-port br1 p2 -- set interface p2 type=dummy
>> options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
>>     add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>
>>  AT_CHECK([ovs-ofctl add-flow br0 action=normal])
>>  AT_CHECK([ovs-ofctl add-flow br1 action=normal])
>> @@ -35,14 +47,11 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p8
>> 'in_port(8),eth(src=50:54:00:00:00:
>>  ovs-appctl time/warp 100
>>  sleep 1  # wait for forwarders process packets
>>
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> -])
>> -
>> -AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>> @@ -2392,7 +2401,7 @@ in_port=2 actions=output:1
>>  ])
>>  AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>
>> -odp_flow="in_port(p1)"
>> +odp_flow="in_port(1)"
>>  br_flow="in_port=1"
>>  # Test command: ofproto/trace odp_flow with in_port as a name.
>>  AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
>> @@ -3490,6 +3499,7 @@ AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows
>> - MPLS actions that result i
>>  OVS_VSWITCHD_START([dnl
>>     add-port br0 p1 -- set Interface p1 type=dummy
>>  ])
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ON_EXIT([kill `cat ovs-ofctl.pid`])
>>
>>  AT_CAPTURE_FILE([ofctl_monitor.log])
>> @@ -3511,8 +3521,8 @@ dnl     192.168.0.1.80 > 192.168.0.2.0: Flags
>> [none], cksum 0x7744 (correct), se
>>  for dl_src in 00 01; do
>>      AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007
>> 6066666666$dl_src 8847 00014020 00014120 45 00 00 2c 00 00 00 00 40 06 3b
>> 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10
>> 77 44 00 00 48 4f 47 45"])
>>
>> -    AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/"
>> | STRIP_USED], [0], [dnl
>> -skb_priority(0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120),
>> packets:0, bytes:0, used:never,
>> actions:userspace(pid=0,slow_path(controller))
>> +    AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep
>> ":$dl_src/"], [0], [dnl
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120),
>> actions:userspace(pid=0,slow_path(controller))
>>  ])
>>  done
>>
>> @@ -3524,6 +3534,7 @@ AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows
>> - MPLS actions that result i
>>  OVS_VSWITCHD_START([dnl
>>     add-port br0 p1 -- set Interface p1 type=dummy
>>  ])
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ON_EXIT([kill `cat ovs-ofctl.pid`])
>>
>>  AT_CAPTURE_FILE([ofctl_monitor.log])
>> @@ -3548,8 +3559,8 @@ dnl     192.168.0.1.80 > 192.168.0.2.0: Flags
>> [none], cksum 0x7744 (correct), se
>>  for dl_src in 00 01; do
>>      AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007
>> 6066666666$dl_src 8847 00014020 00014120 45 00 00 2c 00 00 00 00 40 06 3b
>> 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10
>> 77 44 00 00 48 4f 47 45"])
>>
>> -    AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/"
>> | STRIP_USED], [0], [dnl
>> -skb_priority(0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120),
>> packets:0, bytes:0, used:never,
>> actions:userspace(pid=0,slow_path(controller))
>> +    AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep
>> ":$dl_src/"], [0], [dnl
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120),
>> actions:userspace(pid=0,slow_path(controller))
>>  ])
>>  done
>>
>> @@ -3566,6 +3577,7 @@ ADD_OF_PORTS([br0], [2])
>>  ADD_OF_PORTS([br1], [3])
>>
>>  AT_CHECK([ovs-appctl time/stop])
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>
>>  AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
>>  AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
>> @@ -3584,7 +3596,7 @@ for i in $(seq 1 5); do
>>      fi
>>  done
>>
>> -AT_CHECK([ovs-appctl time/warp 500], [0],
>> +AT_CHECK([ovs-appctl time/warp 1000], [0],
>>  [warped
>>  ])
>>
>> @@ -3600,11 +3612,16 @@ dummy at ovs-dummy: hit:13 missed:2
>>                 pbr1 1/none: (patch: peer=pbr0)
>>  ])
>>
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
>> -skb_priority(0),in_port(100),eth_type(0x0800),ipv4(src=
>> 192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:9, bytes:540, used:0.0s, actions:101,3,2
>> -]),
>> -AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
>> -skb_priority(0),in_port(101),eth_type(0x0800),ipv4(src=
>> 192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:4, bytes:240, used:0.0s, actions:100,2,3
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL], [0], [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions:101,3,2
>>
>> +skb_priority(0),skb_mark(0/0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions:100,2,3
>> +])
>> +
>> +AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' |
>> FILTER_FLOW_STATS], [0], [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> packets:9, bytes:540, used:0.0s
>> +])
>> +AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' |
>> FILTER_FLOW_STATS], [0], [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> packets:4, bytes:240, used:0.0s
>>  ])
>>
>>  AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
>> @@ -3644,6 +3661,7 @@ AT_BANNER([ofproto-dpif -- megaflows])
>>
>>  AT_SETUP([ofproto-dpif megaflow - port classification])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1 actions=output(2)
>> @@ -3652,14 +3670,15 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:0.0s, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - L2 classification])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
>> @@ -3668,15 +3687,16 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - L3 classification])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create
>> Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
>>  AT_DATA([flows.txt], [dnl
>> @@ -3686,15 +3706,16 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create
>> Flow_Table name=t0 prefixes=ipv6_dst,ipv6_src], [0], [ignore], [])
>>  AT_DATA([flows.txt], [dnl
>> @@ -3704,15 +3725,16 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1,dst=2001:db8:3c4d:1:2:3:4:1,label=0,proto=99,tclass=0x70,hlimit=64,frag=no)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,dst=fe80::2/::,label=0/0,proto=10/0,tclass=0x70/0,hlimit=128/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> -skb_priority(0),in_port(1),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,dst=2001:db8:3c4d:1:2:3:4:1/::,label=0/0,proto=99/0,tclass=0x70/0,hlimit=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,dst=fe80::2/::,label=0/0,proto=10/0,tclass=0x70/0,hlimit=128/0,frag=no/0xff),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,dst=2001:db8:3c4d:1:2:3:4:1/::,label=0/0,proto=99/0,tclass=0x70/0,hlimit=64/0,frag=no/0xff),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - L4 classification])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
>> @@ -3720,28 +3742,30 @@ table=0 in_port=1,icmp,icmp_type=8
>> actions=output(2)
>>  AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0xff,code=0/0),
>> packets:0, bytes:0, used:0.0s, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0xff,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - normal])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_CHECK([ovs-ofctl add-flow br0 action=normal])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - mpls])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
>> @@ -3751,9 +3775,9 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1),
>> packets:0, bytes:0, used:never, actions: <del>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>> @@ -3764,6 +3788,7 @@ AT_CLEANUP
>>  m4_define([CHECK_MEGAFLOW_NETFLOW],
>>    [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
>>    OVS_VSWITCHD_START
>> +  AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>    ADD_OF_PORTS([br0], [1], [2])
>>
>>    dnl NetFlow configuration disables wildcarding relevant fields
>> @@ -3780,9 +3805,9 @@ m4_define([CHECK_MEGAFLOW_NETFLOW],
>>    AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>    AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>    sleep 1
>> -  AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0),
>> packets:0, bytes:0, used:never, actions: <del>
>> +  AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT],
>> [0], [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0),
>> actions: <del>
>>  ])
>>    OVS_VSWITCHD_STOP
>>    AT_CLEANUP])
>> @@ -3798,14 +3823,15 @@ OVS_VSWITCHD_START(
>>     set interface p3 type=dummy ofport_request=3])
>>  AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
>>  ])
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>
>>  AT_CHECK([ovs-ofctl add-flow br0 action=normal])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>> @@ -3818,14 +3844,15 @@ OVS_VSWITCHD_START(
>>     set interface p3 type=dummy ofport_request=3])
>>  AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
>>  ])
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>
>>  AT_CHECK([ovs-ofctl add-flow br0 action=normal])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>> @@ -3852,6 +3879,7 @@ OVS_VSWITCHD_START(
>>
>>  AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
>>  ])
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [7])
>>  AT_CHECK([ovs-ofctl add-flow br0 action=normal])
>>  AT_CHECK([ovs-ofctl add-flow br1 action=normal])
>> @@ -3860,15 +3888,16 @@ ovs-appctl time/warp 5000
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p7
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p7
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - resubmit port action])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1,ip actions=resubmit(90)
>> @@ -3878,15 +3907,16 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - resubmit table action])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1,ip actions=resubmit(,1)
>> @@ -3897,15 +3927,16 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=
>>  1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - goto_table action])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1,ip actions=goto_table(1)
>> @@ -3915,15 +3946,16 @@ AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0
>> flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2], [3])
>>  ovs-vsctl \
>>          set Bridge br0 mirrors=@m --\
>> @@ -3937,14 +3969,15 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:0.0s, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2], [3])
>>  ovs-vsctl \
>>          set Bridge br0 mirrors=@m --\
>> @@ -3958,15 +3991,16 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=11,pcp=7),encap(eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0))'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>>
>> -skb_priority(0),in_port(1),eth_type(0x8100),vlan(vid=11/0xfff,pcp=7/0x0,cfi=1/1),encap(eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff)),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8100),vlan(vid=11/0xfff,pcp=7/0x0,cfi=1/1),encap(eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0)),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - move action])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1
>> ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
>> @@ -3977,15 +4011,16 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - push action])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
>> @@ -3994,15 +4029,16 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - learning])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1
>> actions=load:2->NXM_NX_REG0[[0..15]],learn(table=1,priority=65535,NXM_OF_ETH_SRC[[]],NXM_OF_VLAN_TCI[[0..11]],output:NXM_NX_REG0[[0..15]]),output:2
>> @@ -4020,9 +4056,9 @@ for i in 1 2; do
>>  done
>>  sleep 1
>>  dnl The original flow is missing due to a revalidation.
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:0.0s, actions: <del>
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:0.0s, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>> @@ -4030,6 +4066,7 @@ AT_CLEANUP
>>  AT_SETUP([ofproto-dpif megaflow - tunnels])
>>  OVS_VSWITCHD_START(
>>    [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
>>       options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
>>  AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
>> @@ -4049,16 +4086,17 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p3
>> 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p3
>> 'in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0x3,ttl=128/0,frag=no/0xff),
>> packets:0, bytes:0, used:0.0s, actions: <del>
>> -skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0xff,ttl=128/0xff,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> -skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0x1/0xff,ttl=64/0xff,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0x3,ttl=128/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0xff,ttl=128/0xff,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> +skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0x1/0xff,ttl=64/0xff,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - dec_ttl])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create
>> Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
>>  AT_DATA([flows.txt], [dnl
>> @@ -4068,15 +4106,16 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions: <del>
>> -skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),
>> packets:0, bytes:0, used:never, actions: <del>
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8/0,code=0/0),
>> actions: <del>
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - set dl_dst])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
>> @@ -4095,15 +4134,16 @@ dnl ofproto-dpif).  The second entry actually
>> updates the destination
>>  dnl MAC, so both the source and destination MAC addresses are
>>  dnl un-wildcarded, since the ODP commit functions update both the source
>>  dnl and destination MAC addresses.
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/ff:ff:ff:ff:ff:ff),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions:2
>>
>> -skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never,
>> actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL], [0], [dnl
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/ff:ff:ff:ff:ff:ff),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions:2
>>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>>
>>  AT_SETUP([ofproto-dpif megaflow - disabled])
>>  OVS_VSWITCHD_START
>> +AT_CHECK([ovs-appctl vlog/set dpif:dbg])
>>  ADD_OF_PORTS([br0], [1], [2])
>>  AT_DATA([flows.txt], [dnl
>>  table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
>> @@ -4118,9 +4158,16 @@ for i in 1 2 3 4; do
>>      AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>  done
>>  sleep 1
>> -AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
>> -skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0),
>> packets:3, bytes:180, used:0.0s, actions:2
>> -skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0),
>> packets:3, bytes:180, used:0.0s, actions:drop
>> +AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL], [0], [dnl
>> +skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0),
>> actions:2
>> +skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0),
>> actions:drop
>> +])
>> +ovs-appctl time/warp 500
>> +AT_CHECK([cat ovs-vswitchd.log | grep '00:09.*packets:3' |
>> FILTER_FLOW_STATS], [0], [dnl
>> +skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0),
>> packets:3, bytes:180, used:0.0s
>> +])
>> +AT_CHECK([cat ovs-vswitchd.log | grep '00:0b.*packets:3' |
>> FILTER_FLOW_STATS], [0], [dnl
>> +skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0),
>> packets:3, bytes:180, used:0.0s
>>  ])
>>  OVS_VSWITCHD_STOP
>>  AT_CLEANUP
>> --
>> 1.7.10.4
>>
>>



More information about the dev mailing list