])
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl Check ARP request
AT_CHECK([ovs-vsctl -- set Interface p0 options:pcap=p0.pcap])
])
AT_CHECK([ovs-ofctl del-flows int-br])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl Check decapsulation of ERSPAN v1
dnl Hex dump: GRE:(100088be)
])
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl Check ARP request
AT_CHECK([ovs-vsctl -- set Interface p0 options:pcap=p0.pcap])
[Datapath actions: pop_eth,tnl_push(tnl_port(2152),header(size=50,type=110,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=2152,csum=0x0),gtpu(flags=0x30,msgtype=255,teid=0x7b)),out_port(100)),1
])
AT_CHECK([ovs-ofctl del-flows int-br])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl Check decapsulation of VXLAN packet
AT_CHECK([ovs-appctl netdev-dummy/receive p0 'aa55aa550000001b213cab6408004500004e00010000401173e90101025c0101025812b512b5003a00000800000000007b00fe71d883724fbeb6f4e1494a08004500001c0001000040013ede1e0000011e0000020000ffff00000000'])
dnl Send out packets received from L3GRE tunnel back to L3GRE tunnel
AT_CHECK([ovs-ofctl del-flows int-br])
AT_CHECK([ovs-ofctl add-flow int-br "in_port=7,actions=set_field:3->in_port,7"])
+AT_CHECK([ovs-appctl revalidator/wait])
AT_CHECK([ovs-vsctl -- set Interface br0 options:pcap=br0.pcap])
AT_CHECK([ovs-appctl netdev-dummy/receive p0 'aa55aa550000001b213cab6408004500007079464000402fba630101025c0101025820000800000001c845000054ba200000400184861e0000011e00000200004227e75400030af3195500000000f265010000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637'])
AT_CHECK([ovs-ofctl del-flows int-br])
AT_CHECK([ovs-ofctl add-flow int-br "tun_metadata0=0xa/0xf,actions=5,controller"])
+AT_CHECK([ovs-appctl revalidator/wait])
AT_CHECK([ovs-appctl netdev-dummy/receive p0 'aa55aa550000001b213cab64080045000096794640004011ba5b0101025c01010258308817c1008200000400655800007b00ffff80010000000affff00010000000bfe71d883724fbeb6f4e1494a080045000054ba200000400184861e0000011e00000200004227e75400030af3195500000000f265010000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637'])
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2])
])
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl This ARP reply from p0 has two effects:
dnl 1. The ARP cache will learn that 1.1.2.92 is at f8:bc:12:44:34:b6.
dnl Output to tunnel from a int-br internal port
AT_CHECK([ovs-ofctl add-flow int-br "in_port=LOCAL,actions=output:2"])
+AT_CHECK([ovs-appctl revalidator/wait])
AT_CHECK([ovs-appctl netdev-dummy/receive int-br '50540000000a5054000000091234'])
OVS_WAIT_UNTIL([test `ovs-pcap p0.pcap | grep 50540000000a5054000000091234 | wc -l` -ge 1])
Cached: 1.1.2.0/24 dev br0 SRC 1.1.2.88 local
])
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl This ARP reply from p0 has two effects:
dnl 1. The ARP cache will learn that 1.1.2.92 is at f8:bc:12:44:34:b6.
dnl Output to tunnel from a int-br internal port.
dnl Checking that the packet arrived and it was correctly encapsulated.
AT_CHECK([ovs-ofctl add-flow int-br "in_port=LOCAL,actions=debug_slow,output:2"])
+AT_CHECK([ovs-appctl revalidator/wait])
AT_CHECK([ovs-appctl netdev-dummy/receive int-br "${packet}4"])
OVS_WAIT_UNTIL([test `ovs-pcap p0.pcap | grep -E "${encap}${packet}4" | wc -l` -ge 1])
dnl Sending again to exercise the non-miss upcall path.
])
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
AT_CHECK([ovs-ofctl add-flow int-br action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl This ARP reply from p0 has two effects:
dnl 1. The ARP cache will learn that 1.1.2.92 is at f8:bc:12:44:34:b6.
])
AT_CHECK([ovs-ofctl add-flow br0 'arp,priority=1,action=normal'])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl Use arp reply to achieve tunnel next hop mac binding
AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)'])
dnl Direct traffic from the integration bridge to the GRE tunnel
AT_CHECK([ovs-ofctl add-flow int-br action=3])
+AT_CHECK([ovs-appctl revalidator/wait])
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=17,tos=0,ttl=64,frag=no),udp(src=51283,dst=4789)'], [0], [stdout])
AT_CHECK([tail -1 stdout], [0],
Cached: 1.1.2.0/24 dev br0 SRC 1.1.2.88 local
])
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl This ARP reply from p0 has two effects:
dnl 1. The ARP cache will learn that 1.1.2.92 is at f8:bc:12:44:34:b6.
dnl Send an ARP reply to port b8 on br0, so that packets will be forwarded
dnl to learned port.
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),dnl
eth(src=aa:55:aa:66:00:00,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),dnl
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
AT_CHECK([ovs-ofctl del-flows ovs-tun0])
AT_CHECK([ovs-ofctl add-flow ovs-tun0 "in_port=p7,actions=tun0"])
+AT_CHECK([ovs-appctl revalidator/wait])
AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),dnl
eth(src=aa:55:aa:66:00:00,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),dnl
arp(sip=10.0.0.11,tip=10.0.0.2,op=2,sha=aa:55:aa:66:00:00,tha=00:00:00:00:00:00)'])
dnl Perform a negative check to make sure clone is still present.
AT_CHECK([ovs-ofctl del-flows ovs-tun0])
AT_CHECK([ovs-ofctl add-flow ovs-tun0 "in_port=p7,actions=tun0,in_port"])
+AT_CHECK([ovs-appctl revalidator/wait])
AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),dnl
eth(src=aa:55:aa:66:00:00,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),dnl
arp(sip=10.0.0.11,tip=10.0.0.2,op=2,sha=aa:55:aa:66:00:00,tha=00:00:00:00:00:00)'])
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
AT_CHECK([ovs-ofctl add-flow int-br action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl Use arp request and reply to achieve tunnel next hop mac binding.
dnl By default, vtep0's MAC address is aa:55:aa:55:00:03.
AT_CHECK([ovs-ofctl add-flow br0 in_port=p0,action=normal])
AT_CHECK([ovs-ofctl add-flow int-br action=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl This ARP reply from p0 has two effects:
dnl 1. The ARP cache will learn that 1.1.2.92 is at f8:bc:12:44:34:b6.
AT_CHECK([ovs-ofctl add-flow br-ext actions=normal])
AT_CHECK([ovs-ofctl add-flow br0 actions=normal])
+AT_CHECK([ovs-appctl revalidator/wait])
dnl Make sure ephemeral ports stay static across tests.
AT_CHECK([ovs-appctl tnl/egress_port_range 35190 35190], [0], [OK