1 AT_BANNER([ofproto-dpif])
3 AT_SETUP([ofproto-dpif - revalidator/wait])
5 AT_CHECK([ovs-appctl revalidator/wait])
9 AT_SETUP([ofproto-dpif - active-backup bonding])
10 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
11 # and br1 with interfaces p3, p4 and p8.
12 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
14 [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
15 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
16 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
17 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
19 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
20 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
22 add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
23 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
24 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
25 WAIT_FOR_DUMMY_PORTS([p3], [p4])
26 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
28 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
29 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
30 ovs-appctl netdev-dummy/set-admin-state up
31 ovs-appctl time/warp 100
32 ovs-appctl netdev-dummy/set-admin-state p2 down
34 ovs-appctl time/warp 100
35 AT_CHECK([ovs-appctl netdev-dummy/receive p7 '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,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
36 AT_CHECK([ovs-appctl netdev-dummy/receive p7 '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.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
37 ovs-appctl time/warp 100
38 ovs-appctl netdev-dummy/set-admin-state p2 up
39 ovs-appctl netdev-dummy/set-admin-state p1 down
40 ovs-appctl time/warp 100
41 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
42 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
43 ovs-appctl time/warp 200 100
45 AT_CHECK([grep 'in_port([[348]])' ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl
46 recirc_id(0),in_port(3),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
47 recirc_id(0),in_port(3),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
48 recirc_id(0),in_port(4),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(frag=no), actions: <del>
49 recirc_id(0),in_port(4),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(frag=no), actions: <del>
50 recirc_id(0),in_port(4),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035), actions: <del>
51 recirc_id(0),in_port(4),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035), actions: <del>
56 AT_SETUP([ofproto-dpif - balance-slb bonding])
57 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
58 # and br1 with interfaces p4, p5, p6 and p8.
59 # p1 <-> p4, p2 <-> p5, p3 <-> p6
60 # Send some traffic, make sure the traffic are spread based on source mac.
62 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
63 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
64 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
65 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
66 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
68 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
69 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
71 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
72 add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
73 add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
74 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
75 WAIT_FOR_DUMMY_PORTS([p4], [p5], [p6])
76 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
77 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
78 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
81 ovs-appctl time/warp 100
83 for i in `seq 0 100 |xargs printf '%02x\n'`;
85 pkt="in_port(7),eth(src=50:54:00:00:00:$i,dst=50:54:00:00:01:00),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)"
86 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
89 ovs-appctl time/warp 100
90 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
91 # Make sure there is resonable distribution to all three ports.
92 # We don't want to make this check precise, in case hash function changes.
93 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
94 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
95 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
99 AT_SETUP([ofproto-dpif - balance-tcp bonding])
100 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
101 # and br1 with interfaces bond1(p4, p5, p6) and p8.
103 # Send some traffic, make sure the traffic are spread based on L4 headers.
105 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
106 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
107 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
108 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
109 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
110 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
112 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
113 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
114 fail-mode=secure -- \
115 add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
116 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
117 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
118 set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
119 set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
120 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
121 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
123 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
124 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
125 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
127 OVS_WAIT_WHILE([ovs-appctl bond/show | grep "may_enable: false"])
129 ovs-appctl time/warp 100
130 ovs-appctl lacp/show > lacp.txt
131 ovs-appctl bond/show > bond.txt
133 for i in `seq 0 255` ;
135 pkt="in_port(7),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=$i),tcp_flags(ack)"
136 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
139 ovs-appctl time/warp 300 100
140 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
141 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
142 # Make sure there is resonable distribution to all three ports.
143 # We don't want to make this check precise, in case hash function changes.
144 AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 24])
145 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24])
146 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24])
151 # Makes sure recirculation does not change the way packet is handled.
152 AT_SETUP([ofproto-dpif - balance-tcp bonding, different recirc flow ])
154 [add-bond br0 bond0 p1 p2 bond_mode=balance-tcp lacp=active \
155 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
156 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
157 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
159 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
160 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
161 fail-mode=standalone -- \
162 add-bond br1 bond1 p3 p4 bond_mode=balance-tcp lacp=active \
163 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
164 set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
165 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
166 add-port br1 br1- -- set interface br1- type=patch options:peer=br1+ ofport_request=100 -- \
168 set bridge br-int other-config:hwaddr=aa:77:aa:77:00:00 -- \
169 set bridge br-int datapath-type=dummy other-config:datapath-id=1235 \
170 fail-mode=secure -- \
171 add-port br-int br1+ -- set interface br1+ type=patch options:peer=br1- ofport_request=101 -- \
172 add-port br-int p5 -- set interface p5 ofport_request=5 type=dummy
174 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
177 # Waits for all ifaces enabled.
178 OVS_WAIT_UNTIL([test `ovs-appctl bond/show | grep -- "may_enable: true" | wc -l` -ge 4])
180 # The dl_vlan flow should not be ever matched,
181 # since recirculation should not change the flow handling.
182 AT_DATA([flows.txt], [dnl
183 table=0 priority=1 in_port=5 actions=mod_vlan_vid:1,output(101)
184 table=0 priority=2 in_port=5 dl_vlan=1 actions=drop
186 AT_CHECK([ovs-ofctl add-flows br-int flows.txt])
188 # Sends a packet to trigger recirculation.
189 AT_CHECK([ovs-appctl netdev-dummy/receive p5 "in_port(5),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1)"])
191 # Collects flow stats.
192 AT_CHECK([ovs-appctl revalidator/purge], [0])
194 # Checks the flow stats in br1, should only be one flow with non-zero
195 # 'n_packets' from internal table.
196 AT_CHECK([ovs-appctl bridge/dump-flows br1 | ofctl_strip | grep -- "n_packets" | grep -- "table_id" | sed -e 's/output:[[0-9]][[0-9]]*/output/'] , [0], [dnl
197 table_id=254, n_packets=1, n_bytes=38, priority=20,recirc_id=0x0,dp_hash=0x0/0xff,actions=output
200 # Checks the flow stats in br-int, should be only one match.
201 AT_CHECK([ovs-ofctl dump-flows br-int | ofctl_strip | sort], [0], [dnl
202 n_packets=1, n_bytes=34, priority=1,in_port=5 actions=mod_vlan_vid:1,output:101
203 priority=2,in_port=5,dl_vlan=1 actions=drop
210 AT_SETUP([ofproto-dpif - resubmit])
212 add_of_ports br0 1 10 11 12 13 14 15 16 17 18 19 20 21
213 AT_DATA([flows.txt], [dnl
214 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
215 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
216 table=0 in_port=3 priority=2000 icmp actions=output(20)
217 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
218 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
219 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
221 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
222 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=p1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
223 AT_CHECK([tail -1 stdout], [0],
224 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
229 AT_SETUP([ofproto-dpif - goto table])
231 add_of_ports br0 1 10 11
232 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
233 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
234 echo "table=64 actions=output(11)" >> flows.txt
235 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
236 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
237 AT_CHECK([tail -1 stdout], [0],
238 [Datapath actions: 10,11
243 AT_SETUP([ofproto-dpif - write actions])
245 add_of_ports br0 1 10 11 12 13
246 AT_DATA([flows.txt], [dnl
247 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
248 table=1 ip actions=write_actions(output(13)),goto_table(2)
249 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
251 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
252 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
253 AT_CHECK([tail -2 stdout], [0],
254 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
255 Datapath actions: 10,set(ipv4(src=192.168.3.91)),11,set(ipv4(src=192.168.3.90)),13
260 AT_SETUP([ofproto-dpif - modify IPv6 Neighbor Solitication (ND)])
262 add_of_ports br0 1 10 11 12 13
263 AT_DATA([flows.txt], [dnl
264 table=0 in_port=1,icmp6,icmpv6_type=135 actions=output(10),write_actions(set_field:fe80::3->nd_target,set_field:aa:aa:aa:aa:aa:aa->nd_sll,output(12)),goto_table(1)
265 table=1 icmp6 actions=write_actions(output(13)),goto_table(2)
266 table=2 in_port=1,icmp6,icmpv6_type=135 actions=set_field:fe80::4->nd_target,set_field:cc:cc:cc:cc:cc:cc->nd_sll,output(11)
268 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
269 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,icmp6,ipv6_src=fe80::1,ipv6_dst=fe80::2,nw_tos=0,nw_ttl=128,icmpv6_type=135,nd_target=fe80::2020,nd_sll=66:55:44:33:22:11'], [0], [stdout])
270 AT_CHECK([tail -4 stdout], [0],
271 [Megaflow: recirc_id=0,icmp6,in_port=1,nw_frag=no,icmp_type=0x87/0xff,icmp_code=0x0/0xff,nd_target=fe80::2020,nd_sll=66:55:44:33:22:11
272 Datapath actions: 10,set(nd(target=fe80::4,sll=cc:cc:cc:cc:cc:cc)),11,set(nd(target=fe80::3,sll=aa:aa:aa:aa:aa:aa)),13
273 This flow is handled by the userspace slow path because it:
274 - Uses action(s) not supported by datapath.
279 AT_SETUP([ofproto-dpif - clear actions])
281 add_of_ports br0 1 10 11 12
282 AT_DATA([flows.txt], [dnl
283 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
284 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
286 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
287 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=9'], [0], [stdout])
288 AT_CHECK([tail -2 stdout], [0],
289 [Megaflow: recirc_id=0,tcp,in_port=1,nw_frag=no,tp_src=8
290 Datapath actions: 10,set(tcp(src=91)),11
295 AT_SETUP([ofproto-dpif - group chaining])
297 add_of_ports br0 1 10 11
298 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=set_field:192.168.3.90->ip_src,group:123,bucket=output:11'])
299 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=123,type=all,bucket=output:10'])
300 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
301 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
302 AT_CHECK([tail -1 stdout], [0],
303 [Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
308 AT_SETUP([ofproto-dpif - all group in action list])
310 add_of_ports br0 1 10 11
311 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
312 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
313 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
314 # Must match on the source address to be able to restore it's value for
316 AT_CHECK([tail -2 stdout], [0],
317 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
318 Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
323 AT_SETUP([ofproto-dpif - indirect group in action list])
325 add_of_ports br0 1 10
326 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
327 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
328 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
329 AT_CHECK([tail -1 stdout], [0],
330 [Datapath actions: 10
335 AT_SETUP([ofproto-dpif - group actions have no effect afterwards])
337 add_of_ports br0 1 10
338 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=set_field:192.168.3.90->ip_src,output:10'])
339 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234,output:10'])
340 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
341 AT_CHECK([tail -1 stdout], [0],
342 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2)),10
347 AT_SETUP([ofproto-dpif - all group in action set])
349 add_of_ports br0 1 10 11
350 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
351 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
352 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
353 # Must match on the source address to be able to restore it's value for
355 AT_CHECK([tail -2 stdout], [0],
356 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
357 Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
362 AT_SETUP([ofproto-dpif - indirect group in action set])
364 add_of_ports br0 1 10
365 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
366 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
367 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
368 AT_CHECK([tail -1 stdout], [0],
369 [Datapath actions: 10
374 AT_SETUP([ofproto-dpif - select group])
376 add_of_ports br0 1 10 11
377 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
378 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
380 # Try a bunch of different flows and make sure that they get distributed
382 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
383 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:0$d,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0"], [0], [stdout])
384 tail -1 stdout >> results
386 sort results | uniq -c
387 AT_CHECK([sort results | uniq], [0],
388 [Datapath actions: 10
394 AT_SETUP([ofproto-dpif - select group with watch port])
396 add_of_ports br0 1 10 11
397 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
398 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
399 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
400 AT_CHECK([tail -1 stdout], [0],
401 [Datapath actions: 11
406 AT_SETUP([ofproto-dpif - select group with weight])
408 add_of_ports br0 1 10 11 12
409 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2000,bucket=output:12,weight=0'])
410 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
411 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
412 AT_CHECK([tail -1 stdout], [0],
413 [Datapath actions: 11
418 AT_SETUP([ofproto-dpif - select group with hash selection method])
420 add_of_ports br0 1 10 11
421 # Check that parse failures after 'fields' parsing work
422 AT_CHECK([ovs-ofctl -O OpenFlow10 add-group br0 'group_id=1,type=select,fields(eth_dst),bukket=output:10'], [1], ,[dnl
423 ovs-ofctl: unknown keyword bukket
425 AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 'group_id=1234,type=select,selection_method=hash,fields(eth_dst,ip_dst,tcp_dst),bucket=output:10,bucket=output:11'])
426 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 'ip actions=write_actions(group:1234)'])
428 # Try a bunch of different flows and make sure that they get distributed
430 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
431 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:0$d,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0"], [0], [stdout])
432 tail -1 stdout >> results
434 sort results | uniq -c
435 AT_CHECK([sort results | uniq], [0],
436 [Datapath actions: 10
441 # Try a bunch of different flows and make sure that they are not distributed
442 # as they only vary a field that is not hashed
443 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
444 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:0$d,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0"], [0], [stdout])
445 tail -1 stdout >> results
447 sort results | uniq -c
448 AT_CHECK([sort results | uniq | sed 's/1[[01]]/1?/'], [0],
449 [Datapath actions: 1?
452 # Check that fields are rejected without "selection_method=hash".
453 AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 'group_id=1235,type=select,fields(eth_dst,ip_dst,tcp_dst),bucket=output:10,bucket=output:11'], 1, [], [dnl
454 ovs-ofctl: fields may only be specified with "selection_method=hash"
457 # Check that selection_method_param without selection_method is rejected.
458 AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 'group_id=1235,type=select,selection_method_param=1,bucket=output:10,bucket=output:11'], 1, [], [dnl
459 ovs-ofctl: selection_method_param is only allowed with "selection_method"
465 AT_SETUP([ofproto-dpif - select group with dp_hash selection method])
467 add_of_ports br0 1 10 11
468 AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 'group_id=1234,type=select,selection_method=dp_hash,bucket=output:10,bucket=output:11'])
469 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 'ip,nw_src=192.168.0.1 actions=group:1234'])
471 # Try a bunch of different flows and make sure that they get distributed
473 for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
474 pkt="in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:01),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.1.$d,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
475 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
478 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/dp_hash(.*\/0x1)/dp_hash(0xXXXX\/0x1)/' | sed 's/packets.*actions:1/actions:1/' | strip_ufid | strip_used | sort], [0], [dnl
479 flow-dump from non-dpdk interfaces:
480 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:630, used:0.0s, actions:hash(hash_l4(0)),recirc(0x1)
481 recirc_id(0x1),dp_hash(0xXXXX/0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:10
482 recirc_id(0x1),dp_hash(0xXXXX/0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:11
485 AT_CHECK([ovs-appctl revalidator/purge], [0])
487 # Try a bunch of different flows and make sure that they are not distributed
488 # as they only vary a field that is not hashed
489 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
490 pkt="in_port(1),eth(src=50:54:00:00:00:$d,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
491 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
494 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/dp_hash(.*\/0x1)/dp_hash(0xXXXX\/0x1)/' | strip_ufid | strip_used | sort], [0], [dnl
495 flow-dump from non-dpdk interfaces:
496 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:630, used:0.0s, actions:hash(hash_l4(0)),recirc(0x2)
497 recirc_id(0x2),dp_hash(0xXXXX/0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:15, bytes:630, used:0.0s, actions:11
503 AT_SETUP([ofproto-dpif - fast failover group])
505 add_of_ports br0 1 10 11
506 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=ff,bucket=watch_port:10,output:10,bucket=watch_port:11,output:11'])
507 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
508 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
509 AT_CHECK([tail -1 stdout], [0],
510 [Datapath actions: drop
515 AT_SETUP([ofproto-dpif - group stats single bucket])
517 add_of_ports br0 1 10 11
518 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,weight=2000,bucket=output:11,weight=0'])
519 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
523 pkt="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),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)"
524 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
527 AT_CHECK([ovs-appctl revalidator/purge], [0])
528 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
529 AT_CHECK([strip_xids < stdout | sort], [0], [dnl
530 group_id=1234,ref_count=1,packet_count=3,byte_count=126,bucket0:packet_count=3,byte_count=126,bucket1:packet_count=0,byte_count=0
531 OFPST_GROUP reply (OF1.2):
536 AT_SETUP([ofproto-dpif - group stats all buckets])
538 add_of_ports br0 1 10 11
539 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:11'])
540 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
544 pkt="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),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)"
545 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
548 AT_CHECK([ovs-appctl revalidator/purge], [0])
549 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
550 AT_CHECK([strip_xids < stdout | sort], [0], [dnl
551 group_id=1234,ref_count=1,packet_count=3,byte_count=126,bucket0:packet_count=3,byte_count=126,bucket1:packet_count=3,byte_count=126
552 OFPST_GROUP reply (OF1.2):
557 AT_SETUP([ofproto-dpif - registers])
559 add_of_ports br0 20 21 22 33 90
560 AT_DATA([flows.txt], [dnl
561 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
562 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
563 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
564 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
566 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
567 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
568 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
569 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
570 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
571 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
572 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
573 in_port=9,reg0=0xdeadbeef actions=output:20
574 in_port=10,reg1=0xdeadbeef actions=output:21
575 in_port=11,reg2=0xeef22dea actions=output:22
577 dnl Sanilty check all registers
578 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
579 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
580 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
581 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
584 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
585 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
586 AT_CHECK([tail -1 stdout], [0],
587 [Datapath actions: 20,21,22,33
592 dnl Tests that the standardized xregs are mapped onto the legacy OVS registers
593 dnl in the manner documented in ovs-ofctl(8).
594 AT_SETUP([ofproto-dpif - extended registers])
596 add_of_ports br0 1 2 3
597 AT_DATA([flows.txt], [dnl
598 table=0 actions=load:0xfedcba9876543210->OXM_OF_PKT_REG1[[]],resubmit(,1)
599 table=1,reg2=0xfedcba98,reg3=0x76543210 actions=2
601 # These low-priority rules shouldn't match. They're here only to make really
602 # sure that the test fails if either of the above rules fails to match.
603 table=0,priority=0 actions=3
604 table=1,priority=0 actions=3
606 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
607 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
608 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
613 dnl Tests that the standardized xxregs are mapped onto the legacy OVS
614 dnl registers in the manner documented in ovs-ofctl(8).
615 AT_SETUP([ofproto-dpif - extended-extended registers])
617 add_of_ports br0 1 2 3
618 AT_DATA([flows.txt], [dnl
619 table=0 actions=load:0x0123456789abcdeffedcba9876543210->NXM_NX_XXREG1[[]],resubmit(,1)
620 table=1,reg4=0x01234567,reg5=0x89abcdef,reg6=0xfedcba98,reg7=0x76543210 actions=2
622 # These low-priority rules shouldn't match. They're here only to make really
623 # sure that the test fails if either of the above rules fails to match.
624 table=0,priority=0 actions=3
625 table=1,priority=0 actions=3
627 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
628 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
629 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
634 AT_SETUP([ofproto-dpif - load and move order])
636 add_of_ports br0 1 10 11
637 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,move:NXM_NX_REG1[[]]->NXM_OF_IP_SRC[[]],bucket=output:11'])
638 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(load:0xffffffff->NXM_NX_REG1[[]],move:NXM_NX_REG1[[]]->NXM_NX_REG2[[]],group:1234)'])
639 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
640 AT_CHECK([tail -2 stdout], [0],
641 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
642 Datapath actions: set(ipv4(src=255.255.255.255)),10,set(ipv4(src=192.168.0.1)),11
647 dnl Tests that 1.5 copy-field can copy into the standardized xregs.
648 AT_SETUP([ofproto-dpif - copy-field into extended registers])
650 add_of_ports br0 1 2 3
651 AT_DATA([flows.txt], [dnl
652 table=0 actions=move:OXM_OF_ETH_SRC[[0..47]]->OXM_OF_PKT_REG0[[0..47]],goto_table(1)
653 table=1,xreg0=0x0000505400000005 actions=2
655 # These low-priority rules shouldn't match. They're here only to make really
656 # sure that the test fails if either of the above rules fails to match.
657 table=0,priority=0 actions=3
658 table=1,priority=0 actions=3
660 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
661 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
662 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
667 dnl Tests that 1.5 set-field with mask in the metadata register.
668 AT_SETUP([ofproto-dpif - masked set-field into metadata])
670 add_of_ports br0 1 2 3
671 AT_DATA([flows.txt], [dnl
672 table=0 actions=set_field:0xfafafafa5a5a5a5a->metadata,goto_table(1)
673 table=1 actions=set_field:0x6b/0xff->metadata,goto_table(2)
674 table=2,metadata=0xfafafafa5a5a5a6b actions=2
676 # These low-priority rules shouldn't match. They're here only to make really
677 # sure that the test fails if either of the above rules fails to match.
678 table=0,priority=0 actions=3
679 table=1,priority=0 actions=3
680 table=2,priority=0 actions=3
682 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
683 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
684 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
690 AT_SETUP([ofproto-dpif - actset_output])
692 add_of_ports br0 1 2 3 4 5 6 7 8 9 10 11 12 13
693 AT_DATA([flows.txt], [dnl
694 table=0,actset_output=unset actions=write_actions(output(2)),goto_table(1)
695 table=1 actions=move:ONFOXM_ET_ACTSET_OUTPUT[[0..31]]->OXM_OF_PKT_REG0[[0..31]],goto_table(2)
697 # Verify that actset_output got set.
698 table=2,priority=20,actset_output=2 actions=4,goto_table(3)
699 table=2,priority=10 actions=5,goto_table(3)
701 # Verify that xreg0 got copied properly from actset_output.
702 table=3,priority=20,xreg0=2 actions=6,goto_table(4)
703 table=3,priority=10 actions=7,goto_table(4)
705 # Verify that xxreg0 got copied properly from actset_output.
706 table=3,priority=20,xxreg0=2 actions=6,goto_table(4)
707 table=3,priority=10 actions=7,goto_table(4)
709 # Verify that adding a group action unsets actset_output,
710 # even if output follows group.
711 table=4 actions=write_actions(group(5),output(10)),goto_table(5)
712 table=5,priority=20,actset_output=unset actions=8,goto_table(6)
713 table=5,priority=10 actions=9,goto_table(6)
715 # Verify that adding another output action doesn't change actset_output
716 # (since there's still a group).
717 table=6 actions=write_actions(output(3)),goto_table(7)
718 table=7,priority=20,actset_output=unset actions=10,goto_table(8)
719 table=7,priority=10 actions=11,goto_table(8)
721 # Verify that clearing the action set, then writing an output action,
722 # causes actset_output to be set again.
723 table=8,actions=clear_actions,write_actions(output(3),output(2)),goto_table(9)
724 table=9,priority=20,actset_output=2 actions=12
725 table=9,priority=10 actions=13
727 AT_CHECK([ovs-ofctl -O OpenFlow13 add-group br0 'group_id=5,type=all,bucket=output:1'])
728 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
729 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
730 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 4,6,8,10,12,2
735 AT_SETUP([ofproto-dpif - push-pop])
737 add_of_ports br0 20 21 22 33 90
738 AT_DATA([flows.txt], [dnl
739 in_port=90 actions=load:20->NXM_NX_REG0[[0..7]],load:21->NXM_NX_REG1[[0..7]],load:22->NXM_NX_REG2[[0..7]], load:33->NXM_NX_REG3[[0..7]], push:NXM_NX_REG0[[]], push:NXM_NX_REG1[[0..7]],push:NXM_NX_REG2[[0..15]], push:NXM_NX_REG3[[]], resubmit:2, resubmit:3, resubmit:4, resubmit:5
740 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
741 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
742 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
743 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
746 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
747 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
748 AT_CHECK([tail -1 stdout], [0],
749 [Datapath actions: 33,22,21,20
754 AT_SETUP([ofproto-dpif - output])
756 add_of_ports br0 1 9 10 11 55 66 77 88
757 AT_DATA([flows.txt], [dnl
758 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
759 in_port=2 actions=output:9
760 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
761 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
762 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
763 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
764 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
765 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
767 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
768 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
769 AT_CHECK([tail -1 stdout], [0],
770 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
775 AT_SETUP([ofproto-dpif - dec_ttl])
777 add_of_ports br0 1 2 3 4
778 AT_DATA([flows.txt], [dnl
779 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
780 table=1 in_port=1 action=dec_ttl,output:3
782 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
783 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
784 AT_CHECK([tail -4 stdout], [0],
785 [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=2,nw_frag=no
786 Datapath actions: set(ipv4(ttl=1)),2,4
787 This flow is handled by the userspace slow path because it:
788 - Sends "packet-in" messages to the OpenFlow controller.
790 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=3,frag=no)'], [0], [stdout])
791 AT_CHECK([tail -2 stdout], [0],
792 [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=3,nw_frag=no
793 Datapath actions: set(ipv4(ttl=2)),2,set(ipv4(ttl=1)),3,4
795 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
796 AT_CHECK([tail -2 stdout], [0],
797 [Megaflow: recirc_id=0,ipv6,in_port=1,nw_ttl=128,nw_frag=no
798 Datapath actions: set(ipv6(hlimit=127)),2,set(ipv6(hlimit=126)),3,4
801 AT_CAPTURE_FILE([ofctl_monitor.log])
802 AT_CHECK([ovs-ofctl -P nxt_packet_in monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
803 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
804 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
805 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
806 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
807 ip,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
812 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
813 dnl buffer to be resized just before pushing the id of the dec_ttl action.
814 dnl Thus the implementation must account for this by using the
815 dnl reallocated buffer rather than the original buffer.
817 dnl A number of similar rules are added to try and exercise
818 dnl xrealloc sufficiently that it returns a different base pointer
819 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
822 (for i in `seq 0 255`; do
823 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
825 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
829 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
830 dnl buffer to be resized just before pushing the id of the dec_ttl action.
831 dnl Thus the implementation must account for this by using the
832 dnl reallocated buffer rather than the original buffer.
834 dnl A number of similar rules are added to try and exercise
835 dnl xrealloc sufficiently that it returns a different base pointer
836 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
839 (for i in `seq 0 255`; do
840 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
842 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
846 dnl A note action at offset 24 in ofpacts will cause the ofpacts
847 dnl buffer to be resized just before pushing the id of the dec_ttl action.
848 dnl Thus the implementation must account for this by using the
849 dnl reallocated buffer rather than the original buffer.
851 dnl A number of similar rules are added to try and exercise
852 dnl xrealloc sufficiently that it returns a different base pointer
853 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
856 (for i in `seq 0 255`; do
857 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
859 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
863 dnl As of OVS-2.5, a note action after 4 set_field actions are likely to
864 dnl trigger ofpbuf reallocation during decode (~1KB into ofpacts buffer).
865 dnl Using `make check-valgrind' here checks for use-after-free in this
867 AT_SETUP([ofproto-dpif - note action deep inside ofpacts])
869 AT_CHECK([ovs-ofctl add-flow br0 'actions=set_field:0x1->metadata,set_field:0x2->metadata,set_field:0x3->metadata,set_field:0x4->metadata,note:00000000000000000000000000000000,note:00000000000000000000000000000000'])
873 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
877 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
879 # "in_port" defaults to OFPP_NONE if it's not specified.
880 flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,icmp_type=8,icmp_code=0"
881 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
882 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
891 AT_SETUP([ofproto-dpif - DSCP])
892 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
894 AT_DATA([flows.txt], [dnl
895 actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
897 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
898 AT_CHECK([ovs-vsctl -- \
899 set Port p1 qos=@newqos --\
900 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
901 --id=@q1 create Queue dscp=1 --\
902 --id=@q2 create Queue dscp=2], [0], [ignore])
903 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
904 AT_CHECK([tail -2 stdout], [0],
905 [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=9,nw_tos=252,nw_frag=no
906 Datapath actions: dnl
908 set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl
909 set(ipv4(tos=0x8/0xfc)),set(skb_priority(0x2)),1,dnl
911 set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl
912 set(ipv4(tos=0xfc/0xfc)),set(skb_priority(0)),1,dnl
913 set(ipv4(tos=0/0xfc)),1,100
918 AT_SETUP([ofproto-dpif - output/flood flags])
920 add_of_ports br0 1 2 3 4 5 6 7
922 AT_DATA([flows.txt], [dnl
923 in_port=local actions=local,flood
924 in_port=1 actions=flood
925 in_port=2 actions=all
926 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
927 in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
929 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
930 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
931 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
933 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
934 AT_CHECK([tail -1 stdout \
935 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
943 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
944 AT_CHECK([tail -1 stdout \
945 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
953 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
954 AT_CHECK([tail -1 stdout \
955 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
964 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
965 AT_CHECK([tail -1 stdout], [0],
966 [Datapath actions: 100,1,2,4,6,7
969 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
970 AT_CHECK([tail -1 stdout], [0],
971 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
976 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
977 OVS_VSWITCHD_START([dnl
978 add-port br0 p1 -- set Interface p1 type=dummy
980 on_exit 'kill `cat ovs-ofctl.pid`'
982 AT_CAPTURE_FILE([ofctl_monitor.log])
984 AT_CHECK([ovs-ofctl -P nxt_packet_in monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
987 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(syn)'
989 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
990 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
991 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
992 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
993 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=syn tcp_csum:2e7e
995 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
996 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=syn tcp_csum:2e7e
998 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
999 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=syn tcp_csum:2e7e
1002 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1003 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1010 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
1011 OVS_VSWITCHD_START([dnl
1012 add-port br0 p1 -- set Interface p1 type=dummy
1014 on_exit 'kill `cat ovs-ofctl.pid`'
1016 AT_CAPTURE_FILE([ofctl_monitor.log])
1017 AT_CHECK([ovs-ofctl del-flows br0])
1019 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1021 dnl Test that missed packets are dropped
1023 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(ack,syn)'
1025 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1027 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1030 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1031 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1032 OFPST_FLOW reply (OF1.3):
1038 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
1039 OVS_VSWITCHD_START([dnl
1040 add-port br0 p1 -- set Interface p1 type=dummy
1042 on_exit 'kill `cat ovs-ofctl.pid`'
1044 AT_CAPTURE_FILE([ofctl_monitor.log])
1045 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1047 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1050 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(urg|rst)'
1052 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1053 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1054 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1055 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1056 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=rst|urg tcp_csum:2e5c
1058 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1059 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=rst|urg tcp_csum:2e5c
1061 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1062 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=rst|urg tcp_csum:2e5c
1065 AT_CHECK([ovs-appctl revalidator/purge], [0])
1066 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1067 n_packets=3, n_bytes=162, actions=goto_table:1
1068 OFPST_FLOW reply (OF1.2):
1074 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
1075 OVS_VSWITCHD_START([dnl
1076 add-port br0 p1 -- set Interface p1 type=dummy
1078 on_exit 'kill `cat ovs-ofctl.pid`'
1080 AT_CAPTURE_FILE([ofctl_monitor.log])
1081 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1083 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1086 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1089 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1090 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1093 AT_CHECK([ovs-appctl revalidator/purge], [0])
1094 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1095 n_packets=3, n_bytes=162, actions=resubmit(1,1)
1096 OFPST_FLOW reply (OF1.2):
1102 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
1103 OVS_VSWITCHD_START([dnl
1104 add-port br0 p1 -- set Interface p1 type=dummy
1106 on_exit 'kill `cat ovs-ofctl.pid`'
1108 AT_CAPTURE_FILE([ofctl_monitor.log])
1109 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
1110 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1112 dnl Miss table 0, Hit table 1
1113 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1116 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1118 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1119 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1121 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1122 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1123 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1125 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1126 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1128 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1129 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1132 dnl Hit table 0, Miss all other tables, sent to controller
1133 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1136 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1138 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1139 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1141 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1142 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1143 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1145 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1146 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1148 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1149 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1152 AT_CHECK([ovs-appctl revalidator/purge], [0])
1153 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1154 table=1, n_packets=3, n_bytes=162, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1155 OFPST_FLOW reply (OF1.2):
1161 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
1162 OVS_VSWITCHD_START([dnl
1163 add-port br0 p1 -- set Interface p1 type=dummy
1165 on_exit 'kill `cat ovs-ofctl.pid`'
1167 AT_CAPTURE_FILE([ofctl_monitor.log])
1168 AT_DATA([flows.txt], [dnl
1169 table=0 actions=goto_table(1)
1170 table=2 dl_src=10:11:11:11:11:11 actions=controller
1172 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
1173 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1175 dnl Hit table 0, Miss table 1, Hit table 2
1176 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1179 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1181 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1182 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1184 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1185 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1186 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1188 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1189 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1191 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1192 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1195 dnl Hit table 1, Miss all other tables, sent to controller
1196 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1199 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1201 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1202 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1204 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1205 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1206 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1208 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1209 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1211 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1212 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1215 AT_CHECK([ovs-appctl revalidator/purge], [0])
1216 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1217 n_packets=6, n_bytes=324, actions=goto_table:1
1218 table=2, n_packets=3, n_bytes=162, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1219 OFPST_FLOW reply (OF1.2):
1225 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
1226 OVS_VSWITCHD_START([dnl
1227 add-port br0 p1 -- set Interface p1 type=dummy
1229 on_exit 'kill `cat ovs-ofctl.pid`'
1231 AT_CAPTURE_FILE([ofctl_monitor.log])
1232 AT_DATA([flows.txt], [dnl
1233 table=0 actions=resubmit(1,1)
1234 table=2 dl_src=10:11:11:11:11:11 actions=controller
1236 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
1237 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1239 dnl Hit table 0, Miss table 1, Dropped
1240 AT_CHECK([ovs-ofctl monitor br0 65534 -P standard --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1243 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1245 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1247 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1250 dnl Hit table 1, Dropped
1251 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1254 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1256 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1258 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1261 AT_CHECK([ovs-appctl revalidator/purge], [0])
1262 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1263 n_packets=6, n_bytes=324, actions=resubmit(1,1)
1264 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1265 OFPST_FLOW reply (OF1.2):
1271 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
1272 OVS_VSWITCHD_START([dnl
1273 add-port br0 p1 -- set Interface p1 type=dummy
1275 on_exit 'kill `cat ovs-ofctl.pid`'
1277 AT_CAPTURE_FILE([ofctl_monitor.log])
1278 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1280 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1282 dnl Test that missed packets are dropped
1284 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1286 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1288 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1291 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1292 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1299 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
1300 OVS_VSWITCHD_START([dnl
1301 add-port br0 p1 -- set Interface p1 type=dummy
1303 on_exit 'kill `cat ovs-ofctl.pid`'
1305 AT_CAPTURE_FILE([ofctl_monitor.log])
1306 AT_CHECK([ovs-ofctl del-flows br0])
1307 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1308 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1310 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1312 dnl Test that missed packets are dropped
1314 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1316 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1318 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1321 AT_CHECK([ovs-appctl revalidator/purge], [0])
1322 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1323 n_packets=3, n_bytes=162, actions=goto_table:1
1324 OFPST_FLOW reply (OF1.2):
1330 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1331 OVS_VSWITCHD_START([dnl
1332 add-port br0 p1 -- set Interface p1 type=dummy
1334 on_exit 'kill `cat ovs-ofctl.pid`'
1336 AT_CAPTURE_FILE([ofctl_monitor.log])
1337 AT_CHECK([ovs-ofctl del-flows br0])
1338 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1339 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1341 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1343 dnl Test that missed packets are dropped
1345 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1347 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1349 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1352 AT_CHECK([ovs-appctl revalidator/purge], [0])
1353 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1354 n_packets=3, n_bytes=162, actions=resubmit(1,1)
1355 OFPST_FLOW reply (OF1.2):
1361 AT_SETUP([ofproto-dpif - controller])
1362 OVS_VSWITCHD_START([dnl
1363 add-port br0 p1 -- set Interface p1 type=dummy
1365 on_exit 'kill `cat ovs-ofctl.pid`'
1367 AT_CAPTURE_FILE([ofctl_monitor.log])
1368 AT_DATA([flows.txt], [dnl
1369 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1370 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1371 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1373 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1374 cookie=0x4 table=2 in_port=81 actions=load:2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,controller,resubmit(82,3)
1375 cookie=0x5 table=3 in_port=82 actions=load:3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,controller,resubmit(83,4)
1376 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1377 cookie=0x7 table=5 in_port=84 actions=load:5->NXM_NX_REG4[[]],load:6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,controller,resubmit(85,6)
1378 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1379 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1380 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1381 cookie=0xd dl_src=80:88:88:88:88:88 arp actions=load:2->OXM_OF_ARP_OP[[]],controller,load:0xc0a88001->OXM_OF_ARP_SPA[[]],controller,load:0x404444444441->OXM_OF_ARP_THA[[]],load:0x01010101->OXM_OF_ARP_SPA[[]],load:0x02020202->OXM_OF_ARP_TPA[[]],controller
1383 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1386 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1389 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1391 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1392 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1394 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1395 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1396 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1398 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1399 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1401 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1402 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:2e70
1405 dnl Singleton controller action.
1406 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1409 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
1411 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1412 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1414 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1415 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1416 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
1418 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1419 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
1421 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1422 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
1425 dnl Modified controller action.
1426 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1429 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=30:33:33:33:33:33,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x001)'
1431 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1432 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1434 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1435 OFPT_PACKET_IN (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1436 tcp,dl_vlan=15,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=fin tcp_csum:2e7e
1438 OFPT_PACKET_IN (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1439 tcp,dl_vlan=15,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=fin tcp_csum:2e7e
1441 OFPT_PACKET_IN (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1442 tcp,dl_vlan=15,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=fin tcp_csum:2e7e
1445 dnl Modified VLAN controller action.
1446 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1449 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:41,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1451 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1452 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1454 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1455 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1456 ip,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1458 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1459 ip,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1461 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1462 ip,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1466 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1469 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=20:22:22:22:22:22,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=11),tcp_flags(0x001)'
1471 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1472 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1474 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1475 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1476 tcp,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:2e7d
1478 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=58 reg0=0x1,in_port=1 (via action) data_len=58 (unbuffered)
1479 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:2e7d
1481 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=58 reg0=0x1,reg1=0x2,in_port=1 (via action) data_len=58 (unbuffered)
1482 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:2e7d
1484 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,in_port=1 (via action) data_len=58 (unbuffered)
1485 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:2e7d
1487 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,in_port=1 (via action) data_len=58 (unbuffered)
1488 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:4880
1490 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=58 (unbuffered)
1491 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:6082
1493 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=58 (unbuffered)
1494 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=11,tcp_flags=fin tcp_csum:6035
1496 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=58 (unbuffered)
1497 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=fin tcp_csum:5fea
1499 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=58 (unbuffered)
1500 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=fin tcp_csum:5fea
1504 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1507 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 1C 00 00 00 00 00 11 00 00 C0 A8 00 01 C0 A8 00 02 00 08 00 0B 00 00 12 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
1509 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1510 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1512 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1513 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1514 udp,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1516 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 reg0=0x1,in_port=1 (via action) data_len=64 (unbuffered)
1517 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1519 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 reg0=0x1,reg1=0x2,in_port=1 (via action) data_len=64 (unbuffered)
1520 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1522 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,in_port=1 (via action) data_len=64 (unbuffered)
1523 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1525 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,in_port=1 (via action) data_len=64 (unbuffered)
1526 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:2c37
1528 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1529 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:4439
1531 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1532 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=11 udp_csum:43ec
1534 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1535 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1537 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1538 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1541 dnl Modified ARP controller action.
1542 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1545 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
1548 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1549 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1550 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1551 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1552 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1553 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1554 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1555 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1556 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1557 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1558 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1559 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1560 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1561 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1562 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1563 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1564 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1565 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1566 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1567 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1568 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1571 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1574 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1577 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 24 00 00 00 00 00 84 00 00 C0 A8 00 01 C0 A8 00 02 04 58 08 af 00 00 00 00 d9 d7 91 57 01 00 00 34 cf 28 ec 4e 00 01 40 00 00 0a ff ff b7 53 24 19 00 05 00 08 7f 00 00 01 00 05 00 08 c0 a8 02 07 00 0c 00 06 00 05 00 00 80 00 00 04 c0 00 00 04'
1580 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
1581 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1582 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1583 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1584 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1585 sctp,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1587 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 reg0=0x1,in_port=1 (via action) data_len=102 (unbuffered)
1588 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1590 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=102 reg0=0x1,reg1=0x2,in_port=1 (via action) data_len=102 (unbuffered)
1591 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1593 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,in_port=1 (via action) data_len=102 (unbuffered)
1594 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1596 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,in_port=1 (via action) data_len=102 (unbuffered)
1597 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1599 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
1600 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1602 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
1603 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=2223 sctp_csum:dd778f5f
1605 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
1606 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:62051f56
1608 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
1609 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:62051f56
1612 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1613 cookie=0x1, n_packets=3, n_bytes=212, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1614 cookie=0x2, n_packets=3, n_bytes=162, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1615 cookie=0x3, table=1, n_packets=3, n_bytes=212, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
1616 cookie=0x4, table=2, n_packets=3, n_bytes=212, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
1617 cookie=0x5, table=3, n_packets=3, n_bytes=212, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
1618 cookie=0x6, table=4, n_packets=3, n_bytes=212, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
1619 cookie=0x7, table=5, n_packets=3, n_bytes=212, in_port=84 actions=load:0x5->NXM_NX_REG4[[]],load:0x6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,CONTROLLER:65535,resubmit(85,6)
1620 cookie=0x8, table=6, n_packets=3, n_bytes=212, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1621 cookie=0x9, table=7, n_packets=3, n_bytes=212, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1622 cookie=0xa, n_packets=3, n_bytes=102, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
1623 cookie=0xd, n_packets=3, n_bytes=126, arp,dl_src=80:88:88:88:88:88 actions=load:0x2->NXM_OF_ARP_OP[[]],CONTROLLER:65535,load:0xc0a88001->NXM_OF_ARP_SPA[[]],CONTROLLER:65535,load:0x404444444441->NXM_NX_ARP_THA[[]],load:0x1010101->NXM_OF_ARP_SPA[[]],load:0x2020202->NXM_OF_ARP_TPA[[]],CONTROLLER:65535
1624 n_packets=3, n_bytes=162, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1631 AT_SETUP([ofproto-dpif - controller action without megaflows])
1635 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,action=controller])
1636 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [dnl
1640 AT_CAPTURE_FILE([ofctl_monitor.log])
1641 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1644 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(0x1234)'])
1647 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
1648 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1650 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
1651 flow-dump from non-dpdk interfaces:
1652 packets:1, bytes:14, used:0.001s, actions:userspace(pid=0,slow_path(controller))
1655 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1656 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
1657 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
1658 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
1659 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
1662 AT_CHECK([ovs-appctl revalidator/purge])
1663 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1665 dnl Add a controller meter.
1666 AT_CHECK([ovs-ofctl -O OpenFlow13 add-meter br0 'meter=controller pktps stats bands=type=drop rate=1'])
1668 dnl Advance time by 1 second.
1669 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
1671 for i in `seq 1 8`; do
1672 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(0x4321)'])
1675 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
1676 flow-dump from non-dpdk interfaces:
1677 packets:7, bytes:98, used:0.001s, actions:sample(sample=100.0%,actions(meter(0),userspace(pid=0,slow_path(controller))))
1680 AT_CHECK([ovs-appctl time/warp 1], [0], [ignore])
1681 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1683 dnl Out of 8 packets we sent, one executes the controller action via
1684 dnl miss upcall. Another one got passed the rate limiter.
1685 dnl The rest of packets are blocked by the rate limiter.
1686 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1687 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
1688 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x4321
1689 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
1690 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x4321
1692 dnl Check meter stats to make it gives the same picture;
1693 dnl 7 packets hit the meter, but 6 packets are dropped by band0.
1694 AT_CHECK([ovs-ofctl -O OpenFlow13 meter-stats br0 | strip_timers], [0], [dnl
1695 OFPST_METER reply (OF1.3) (xid=0x2):
1696 meter:controller flow_count:0 packet_in_count:7 byte_in_count:98 duration:0.0s bands:
1697 0: packet_count:6 byte_count:84
1703 AT_SETUP([ofproto-dpif - MPLS handling])
1704 OVS_VSWITCHD_START([dnl
1705 add-port br0 p1 -- set Interface p1 type=dummy
1707 on_exit 'kill `cat ovs-ofctl.pid`'
1709 AT_CAPTURE_FILE([ofctl_monitor.log])
1710 AT_DATA([flows.txt], [dnl
1711 cookie=0xa dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
1712 cookie=0xa dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,controller
1713 cookie=0xa dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
1714 cookie=0xa dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
1715 cookie=0xa dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,controller
1716 cookie=0xa dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),controller
1717 cookie=0xa dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),controller
1718 cookie=0xa dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,controller
1719 cookie=0xa mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:10->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1720 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1721 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1722 cookie=0xc dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:1000->OXM_OF_MPLS_LABEL[[]],load:7->OXM_OF_MPLS_TC[[]],controller
1724 cookie=0xd dl_src=60:66:66:66:00:01 actions=pop_mpls:0x0800,dec_ttl,controller
1725 cookie=0xd dl_src=60:66:66:66:00:02 actions=pop_mpls:0x0800,load:0xa000001->OXM_OF_IPV4_DST[[]],controller
1726 cookie=0xd dl_src=60:66:66:66:00:03 actions=pop_mpls:0x0800,move:OXM_OF_IPV4_DST[[]]->OXM_OF_IPV4_SRC[[]],controller
1727 cookie=0xd dl_src=60:66:66:66:00:04 actions=pop_mpls:0x0800,push:OXM_OF_IPV4_DST[[]],pop:OXM_OF_IPV4_SRC[[]],controller
1728 cookie=0xd dl_src=60:66:66:66:00:05 actions=pop_mpls:0x0800,multipath(eth_src,50,modulo_n,1,0,OXM_OF_IPV4_SRC[[0..7]]),controller
1729 cookie=0xd dl_src=60:66:66:66:00:06 actions=pop_mpls:0x0800,bundle_load(eth_src,50,hrw,ofport,OXM_OF_IPV4_SRC[[0..15]],slaves:1,2),controller
1730 cookie=0xd dl_src=60:66:66:66:00:07 actions=pop_mpls:0x0800,learn(table=1,hard_timeout=60,eth_type=0x800,nw_proto=6,OXM_OF_IPV4_SRC[[]]=OXM_OF_IPV4_DST[[]]),controller
1732 cookie=0xd dl_src=60:66:66:66:00:08 actions=pop_mpls:0x0806,resubmit(1,1)
1733 cookie=0xd table=1 arp actions=controller
1735 cookie=0xdeadbeef table=2 dl_src=60:66:66:66:00:09 actions=pop_mpls:0x0800,mod_nw_tos:48
1736 cookie=0xd dl_src=60:66:66:66:00:09 actions=resubmit(,2),controller
1737 cookie=0xd dl_src=60:66:66:66:00:0a actions=pop_mpls:0x0800,mod_nw_dst:10.0.0.1,controller
1738 cookie=0xd dl_src=60:66:66:66:00:0b actions=pop_mpls:0x0800,mod_nw_src:10.0.0.1,controller
1740 cookie=0xd dl_src=60:66:66:66:01:00 actions=pop_mpls:0x8848,controller
1741 cookie=0xd dl_src=60:66:66:66:01:01 actions=pop_mpls:0x8847,dec_mpls_ttl,controller
1742 cookie=0xd dl_src=60:66:66:66:01:02 actions=pop_mpls:0x8848,load:3->OXM_OF_MPLS_TC[[]],controller
1744 cookie=0xd dl_src=60:66:66:66:02:00 actions=pop_mpls:0x8847,pop_mpls:0x0800,controller
1745 cookie=0xe dl_src=60:66:66:66:02:01 actions=pop_mpls:0x8848,pop_mpls:0x0800,dec_ttl,controller
1746 cookie=0xe dl_src=60:66:66:66:02:10 actions=pop_mpls:0x8847,dec_mpls_ttl,pop_mpls:0x0800,dec_ttl,controller
1748 cookie=0xe dl_src=60:66:66:66:03:00 actions=pop_mpls:0x8848,pop_mpls:0x8848,controller
1749 cookie=0xe dl_src=60:66:66:66:03:01 actions=pop_mpls:0x8847,pop_mpls:0x8847,dec_mpls_ttl,controller
1750 cookie=0xe dl_src=60:66:66:66:03:10 actions=pop_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8848,dec_mpls_ttl,controller
1752 cookie=0xf dl_src=60:66:66:66:04:00 actions=pop_mpls:0x0800,push_mpls:0x8847,controller
1753 cookie=0xf dl_src=60:66:66:66:04:01 actions=pop_mpls:0x0800,push_mpls:0x8848,dec_mpls_ttl,controller
1754 cookie=0xf dl_src=60:66:66:66:04:10 actions=pop_mpls:0x0800,dec_ttl,push_mpls:0x8848,dec_mpls_ttl,controller
1756 cookie=0x5 dl_src=60:66:66:66:05:00 actions=push_mpls:0x8848,pop_mpls:0x8847,controller
1757 cookie=0x5 dl_src=60:66:66:66:05:01 actions=push_mpls:0x8847,pop_mpls:0x8848,dec_mpls_ttl,controller
1758 cookie=0x5 dl_src=60:66:66:66:05:10 actions=push_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8847,dec_mpls_ttl,controller
1760 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1762 dnl Modified MPLS controller action.
1763 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1766 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=17,tos=0,ttl=64,frag=no),udp(src=7777,dst=80)'
1768 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1769 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1771 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1772 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action) data_len=46 (unbuffered)
1773 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1775 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action) data_len=46 (unbuffered)
1776 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1778 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action) data_len=46 (unbuffered)
1779 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1782 dnl Modified MPLS controller action.
1783 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1786 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=41:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1788 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1789 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1791 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1792 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=34 in_port=1 (via action) data_len=34 (unbuffered)
1793 ip,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1795 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=34 in_port=1 (via action) data_len=34 (unbuffered)
1796 ip,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1798 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=34 in_port=1 (via action) data_len=34 (unbuffered)
1799 ip,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1802 dnl Modified MPLS controller action.
1803 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1805 dnl in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=3,ttl=64,bos=1)
1808 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:43,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'
1810 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1811 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1813 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1814 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1815 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1817 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1818 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1820 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1821 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1824 dnl Modified MPLS controller action.
1825 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1828 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:44,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=99,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no))'
1830 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1831 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1833 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1834 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1835 mpls,dl_vlan=99,dl_vlan_pcp=7,vlan_tci1=0x0000,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1837 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1838 mpls,dl_vlan=99,dl_vlan_pcp=7,vlan_tci1=0x0000,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1840 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1841 mpls,dl_vlan=99,dl_vlan_pcp=7,vlan_tci1=0x0000,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1844 dnl Modified MPLS controller action.
1845 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1848 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:45,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1850 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1851 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1853 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1854 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1855 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1857 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1858 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1860 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1861 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1864 dnl Modified MPLS controller action.
1865 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1868 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:46,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1870 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1871 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1873 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1874 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1875 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1877 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1878 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1880 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1881 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1884 dnl Modified MPLS controller action.
1885 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1888 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:47,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1890 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1891 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1893 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1894 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1895 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1897 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1898 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1900 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1901 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1904 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1906 dnl Modified MPLS controller action.
1907 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1910 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:49,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=3,ttl=64,bos=1)'
1912 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1913 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1915 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1916 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1917 mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:44:49,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=42816
1919 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1920 mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:44:49,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=42816
1922 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1923 mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:44:49,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=42816
1926 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1928 dnl Modified MPLS controller action.
1929 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1932 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:48,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1934 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1935 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1937 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1938 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1939 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1941 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1942 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1944 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1945 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1948 dnl Modified MPLS actions.
1949 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1952 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:55:55:55:55:55,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=100,tc=7,ttl=64,bos=1)'
1954 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1955 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1957 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1958 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=18 in_port=1 (via action) data_len=18 (unbuffered)
1959 mpls,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1961 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=18 in_port=1 (via action) data_len=18 (unbuffered)
1962 mpls,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1964 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=18 in_port=1 (via action) data_len=18 (unbuffered)
1965 mpls,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1968 dnl Modified MPLS ipv6 controller action.
1969 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1972 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=70:77:77:77:77:77,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
1974 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1975 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1977 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1978 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1979 mplsm,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1981 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1982 mplsm,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1984 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1985 mplsm,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1989 dnl Modified MPLS pop action.
1990 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1991 dnl 60:66:66:66:66:66 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
1992 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1994 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1997 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 66 66 88 47 00 01 41 20 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'
2000 # ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=60:66:66:66:66:66,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=3,ttl=100,bos=1)'
2002 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2003 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2005 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2006 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2007 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2009 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2010 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2012 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2013 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2016 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2018 dnl Modified MPLS pop action.
2019 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2020 dnl 60:66:66:66:00:01 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2021 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2022 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2023 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2026 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 01 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2028 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2029 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2031 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2032 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2033 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2035 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2036 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2038 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2039 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2042 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2044 dnl Modified MPLS pop action.
2045 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2046 dnl 60:66:66:66:00:02 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2047 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2048 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2049 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2052 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 02 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2054 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2055 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2057 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2058 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2059 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:02,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
2061 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2062 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:02,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
2064 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2065 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:02,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
2068 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2070 dnl Modified MPLS pop action.
2071 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2072 dnl 60:66:66:66:00:03 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2073 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2074 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2075 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2078 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 03 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2080 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2081 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2083 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2084 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2085 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:03,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
2087 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2088 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:03,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
2090 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2091 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:03,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
2094 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2096 dnl Modified MPLS pop action.
2097 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2098 dnl 60:66:66:66:00:04 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2099 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2100 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2101 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2104 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 04 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2106 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2107 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2109 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2110 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2111 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:04,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
2113 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2114 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:04,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
2116 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2117 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:04,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
2120 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2122 dnl Modified MPLS pop action.
2123 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2124 dnl 60:66:66:66:00:05 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2125 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2126 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2127 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2130 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 05 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2132 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2133 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2135 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2136 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2137 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.0,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
2139 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2140 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.0,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
2142 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2143 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.0,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
2146 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2148 dnl Modified MPLS pop action.
2149 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2150 dnl 60:66:66:66:00:06 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2151 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2152 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2153 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2156 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 06 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2158 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2159 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2161 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2162 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2163 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:06,dl_dst=50:54:00:00:00:07,nw_src=192.168.255.255,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
2165 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2166 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:06,dl_dst=50:54:00:00:00:07,nw_src=192.168.255.255,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
2168 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2169 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:06,dl_dst=50:54:00:00:00:07,nw_src=192.168.255.255,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
2172 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2174 dnl Modified MPLS pop action.
2175 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2176 dnl 60:66:66:66:00:07 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2177 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2178 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2179 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2182 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 07 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2184 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2185 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2187 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2188 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2189 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:07,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2191 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2192 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:07,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2194 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2195 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:07,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2198 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2200 dnl Modified MPLS pop action.
2201 dnl The input is an ARP frame with a single MPLS label stack entry which tcpdump -vve shows as:
2202 dnl 60:66:66:66:00:08 > ff:ff:ff:ff:ff:ff, ethertype MPLS unicast (0x8847), length 46: MPLS (label 20, exp 0, [S], ttl 32)
2203 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2206 ovs-appctl netdev-dummy/receive p1 'ff ff ff ff ff ff 60 66 66 66 00 08 88 47 00 01 41 20 00 01 08 00 06 04 00 02 60 66 66 66 00 08 c0 a8 00 01 ff ff ff ff ff ff ff ff ff ff'
2208 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2209 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2211 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2212 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
2213 arp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=255.255.255.255,arp_op=2,arp_sha=60:66:66:66:00:08,arp_tha=ff:ff:ff:ff:ff:ff
2215 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
2216 arp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=255.255.255.255,arp_op=2,arp_sha=60:66:66:66:00:08,arp_tha=ff:ff:ff:ff:ff:ff
2218 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
2219 arp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=255.255.255.255,arp_op=2,arp_sha=60:66:66:66:00:08,arp_tha=ff:ff:ff:ff:ff:ff
2222 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2224 dnl Modified MPLS pop action.
2225 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2226 dnl 60:66:66:66:00:09 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2227 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2228 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2229 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2232 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 09 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2234 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2235 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2237 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2238 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2239 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:09,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=48,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2241 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2242 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:09,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=48,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2244 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2245 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:09,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=48,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2248 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2250 dnl Modified MPLS pop action.
2251 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2252 dnl 60:66:66:66:00:0a > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2253 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2254 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2255 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2258 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 0a 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2260 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2261 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2263 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2264 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2265 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0a,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
2267 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2268 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0a,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
2270 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2271 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0a,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
2274 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2276 dnl Modified MPLS pop action.
2277 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2278 dnl 60:66:66:66:00:0b > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2279 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2280 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2281 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2284 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 0b 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2286 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2287 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2289 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2290 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2291 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0b,dl_dst=50:54:00:00:00:07,nw_src=10.0.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2ded
2293 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2294 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0b,dl_dst=50:54:00:00:00:07,nw_src=10.0.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2ded
2296 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2297 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0b,dl_dst=50:54:00:00:00:07,nw_src=10.0.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2ded
2300 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2302 dnl Modified MPLS pop action.
2303 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2304 dnl 60:66:66:66:01:00 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2305 dnl (label 20, exp 0, [S], ttl 31)
2306 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2307 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2308 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2311 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 01 00 88 48 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2313 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2314 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2316 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2317 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2318 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2320 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2321 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2323 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2324 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2327 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2329 dnl Modified MPLS pop action.
2330 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2331 dnl 60:66:66:66:01:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2332 dnl (label 20, exp 0, [S], ttl 31)
2333 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2334 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2335 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2338 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 01 01 88 47 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2340 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2341 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2343 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2344 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2345 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2347 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2348 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2350 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2351 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2354 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2356 dnl Modified MPLS pop action.
2357 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2358 dnl 60:66:66:66:01:02 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2359 dnl (label 20, exp 0, [S], ttl 31)
2360 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2361 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2362 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2365 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 01 02 88 48 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2367 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2368 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2370 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2371 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2372 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:02,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=3,mpls_ttl=31,mpls_bos=1
2374 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2375 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:02,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=3,mpls_ttl=31,mpls_bos=1
2377 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2378 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:02,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=3,mpls_ttl=31,mpls_bos=1
2381 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2383 dnl Modified MPLS pop action.
2384 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2385 dnl 60:66:66:66:02:00 > 50:54:00:00:02:00, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2386 dnl (label 20, exp 0, [S], ttl 31)
2387 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2388 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2389 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2392 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 02 00 88 47 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2394 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2395 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2397 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2398 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2399 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2401 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2402 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2404 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2405 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2408 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2410 dnl Modified MPLS pop action.
2411 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2412 dnl 60:66:66:66:02:01 > 50:54:00:00:02:01, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2413 dnl (label 20, exp 0, [S], ttl 31)
2414 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2415 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2416 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2419 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 02 01 88 48 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2422 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2423 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2425 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2426 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2427 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2429 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2430 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2432 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2433 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2436 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2438 dnl Modified MPLS pop action.
2439 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2440 dnl 60:66:66:66:02:10 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2441 dnl (label 20, exp 0, [S], ttl 31)
2442 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2443 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2444 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2447 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 02 10 88 47 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2449 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2450 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2452 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2453 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2454 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:10,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2456 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2457 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:10,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2459 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2460 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:10,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2463 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2465 dnl Modified MPLS pop action.
2466 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2467 dnl 60:66:66:66:03:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2468 dnl (label 20, exp 0, ttl 31)
2469 dnl (label 20, exp 0, [S], ttl 30)
2470 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2471 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2472 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2475 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 03 00 88 47 00 01 40 20 00 01 40 1f 00 01 41 1e 45 00 00 2c 00 00 00 00 ff 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'
2477 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2478 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2480 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2481 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2482 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2484 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2485 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2487 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2488 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2491 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2493 dnl Modified MPLS pop action.
2494 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2495 dnl 60:66:66:66:03:01 > 50:54:00:00:00:00, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2496 dnl (label 20, exp 0, ttl 31)
2497 dnl (label 20, exp 0, [S], ttl 30)
2498 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2499 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2500 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2503 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 03 01 88 48 00 01 40 20 00 01 40 1f 00 01 41 1e 45 00 00 2c 00 00 00 00 ff 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'
2505 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2506 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2508 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2509 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2510 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2512 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2513 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2515 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2516 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2519 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2521 dnl Modified MPLS pop action.
2522 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2523 dnl 60:66:66:66:03:10 > 50:54:00:00:00:00, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2524 dnl (label 20, exp 0, ttl 31)
2525 dnl (label 20, exp 0, [S], ttl 30)
2526 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2527 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2528 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2531 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 03 10 88 47 00 01 40 20 00 01 40 1f 00 01 41 1e 45 00 00 2c 00 00 00 00 ff 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'
2533 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2534 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2536 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2537 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2538 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2540 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2541 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2543 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2544 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2547 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2549 dnl Modified MPLS pop action.
2550 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2551 dnl 60:66:66:66:04:00 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2552 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2553 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2554 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2557 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 04 00 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2559 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2560 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2562 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2563 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2564 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:04:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=255,mpls_bos=1
2566 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2567 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:04:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=255,mpls_bos=1
2569 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2570 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:04:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=255,mpls_bos=1
2573 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2575 dnl Modified MPLS pop action.
2576 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2577 dnl 60:66:66:66:04:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2578 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2579 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2580 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2583 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 04 01 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2585 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2586 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2588 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2589 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2590 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:01,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=254,mpls_bos=1
2592 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2593 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:01,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=254,mpls_bos=1
2595 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2596 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:01,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=254,mpls_bos=1
2599 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2601 dnl Modified MPLS pop action.
2602 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2603 dnl 60:66:66:66:04:10 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2604 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2605 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2606 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2609 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 04 10 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2611 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2612 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2614 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2615 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2616 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:10,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=253,mpls_bos=1
2618 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2619 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:10,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=253,mpls_bos=1
2621 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2622 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:10,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=253,mpls_bos=1
2625 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2627 dnl Modified MPLS pop action.
2628 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2629 dnl 60:66:66:66:05:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2630 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2631 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2632 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2635 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 05 00 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2638 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2639 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2641 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2642 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2643 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=1
2645 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2646 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=1
2648 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2649 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=1
2652 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2654 dnl Modified MPLS pop action.
2655 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2656 dnl 60:66:66:66:05:01 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2657 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2658 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2659 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2662 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 05 01 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2664 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2665 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2667 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2668 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2669 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2671 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2672 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2674 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2675 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2678 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2680 dnl Modified MPLS pop action.
2681 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2682 dnl 60:66:66:66:05:10 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2683 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2684 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2685 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2688 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 05 10 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2691 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2692 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2694 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2695 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2696 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2698 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2699 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2701 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2702 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2705 AT_CHECK([ovs-appctl revalidator/purge], [0])
2706 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
2707 cookie=0x5, n_packets=3, n_bytes=186, dl_src=60:66:66:66:05:00 actions=push_mpls:0x8848,pop_mpls:0x8847,CONTROLLER:65535
2708 cookie=0x5, n_packets=3, n_bytes=186, dl_src=60:66:66:66:05:01 actions=push_mpls:0x8847,pop_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2709 cookie=0x5, n_packets=3, n_bytes=186, dl_src=60:66:66:66:05:10 actions=push_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8847,dec_mpls_ttl,CONTROLLER:65535
2710 cookie=0xa, n_packets=3, n_bytes=102, dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,CONTROLLER:65535
2711 cookie=0xa, n_packets=3, n_bytes=102, dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),CONTROLLER:65535
2712 cookie=0xa, n_packets=3, n_bytes=102, dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),CONTROLLER:65535
2713 cookie=0xa, n_packets=3, n_bytes=102, dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,CONTROLLER:65535
2714 cookie=0xa, n_packets=3, n_bytes=102, dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,CONTROLLER:65535
2715 cookie=0xa, n_packets=3, n_bytes=114, dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2716 cookie=0xa, n_packets=3, n_bytes=126, dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2717 cookie=0xa, n_packets=3, n_bytes=54, dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2718 cookie=0xa, n_packets=3, n_bytes=54, mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2719 cookie=0xb, n_packets=3, n_bytes=54, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2720 cookie=0xc, n_packets=3, n_bytes=162, dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:0x3e8->OXM_OF_MPLS_LABEL[[]],load:0x7->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2721 cookie=0xd, n_packets=3, n_bytes=138, dl_src=60:66:66:66:00:08 actions=pop_mpls:0x0806,resubmit(1,1)
2722 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:01 actions=pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
2723 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:02 actions=pop_mpls:0x0800,load:0xa000001->NXM_OF_IP_DST[[]],CONTROLLER:65535
2724 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:03 actions=pop_mpls:0x0800,move:NXM_OF_IP_DST[[]]->NXM_OF_IP_SRC[[]],CONTROLLER:65535
2725 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:04 actions=pop_mpls:0x0800,push:NXM_OF_IP_DST[[]],pop:NXM_OF_IP_SRC[[]],CONTROLLER:65535
2726 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:05 actions=pop_mpls:0x0800,multipath(eth_src,50,modulo_n,1,0,NXM_OF_IP_SRC[[0..7]]),CONTROLLER:65535
2727 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:06 actions=pop_mpls:0x0800,bundle_load(eth_src,50,hrw,ofport,NXM_OF_IP_SRC[[0..15]],slaves:1,2),CONTROLLER:65535
2728 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:07 actions=pop_mpls:0x0800,learn(table=1,hard_timeout=60,eth_type=0x800,nw_proto=6,NXM_OF_IP_SRC[[]]=NXM_OF_IP_DST[[]]),CONTROLLER:65535
2729 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:09 actions=resubmit(,2),CONTROLLER:65535
2730 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:0a actions=pop_mpls:0x0800,mod_nw_dst:10.0.0.1,CONTROLLER:65535
2731 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:0b actions=pop_mpls:0x0800,mod_nw_src:10.0.0.1,CONTROLLER:65535
2732 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
2733 cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:00 actions=pop_mpls:0x8848,CONTROLLER:65535
2734 cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:01 actions=pop_mpls:0x8847,dec_mpls_ttl,CONTROLLER:65535
2735 cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:02 actions=pop_mpls:0x8848,load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2736 cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:02:00 actions=pop_mpls:0x8847,pop_mpls:0x0800,CONTROLLER:65535
2737 cookie=0xd, table=1, n_packets=3, n_bytes=126, arp actions=CONTROLLER:65535
2738 cookie=0xdeadbeef, table=2, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:09 actions=pop_mpls:0x0800,mod_nw_tos:48
2739 cookie=0xe, n_packets=3, n_bytes=198, dl_src=60:66:66:66:02:01 actions=pop_mpls:0x8848,pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
2740 cookie=0xe, n_packets=3, n_bytes=198, dl_src=60:66:66:66:02:10 actions=pop_mpls:0x8847,dec_mpls_ttl,pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
2741 cookie=0xe, n_packets=3, n_bytes=210, dl_src=60:66:66:66:03:00 actions=pop_mpls:0x8848,pop_mpls:0x8848,CONTROLLER:65535
2742 cookie=0xe, n_packets=3, n_bytes=210, dl_src=60:66:66:66:03:01 actions=pop_mpls:0x8847,pop_mpls:0x8847,dec_mpls_ttl,CONTROLLER:65535
2743 cookie=0xe, n_packets=3, n_bytes=210, dl_src=60:66:66:66:03:10 actions=pop_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2744 cookie=0xf, n_packets=3, n_bytes=186, dl_src=60:66:66:66:04:00 actions=pop_mpls:0x0800,push_mpls:0x8847,CONTROLLER:65535
2745 cookie=0xf, n_packets=3, n_bytes=186, dl_src=60:66:66:66:04:01 actions=pop_mpls:0x0800,push_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2746 cookie=0xf, n_packets=3, n_bytes=186, dl_src=60:66:66:66:04:10 actions=pop_mpls:0x0800,dec_ttl,push_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2753 AT_SETUP([ofproto-dpif - MPLS handling with goto_table])
2754 OVS_VSWITCHD_START([dnl
2755 add-port br0 p1 -- set Interface p1 type=dummy
2757 on_exit 'kill `cat ovs-ofctl.pid`'
2759 AT_CAPTURE_FILE([ofctl_monitor.log])
2760 AT_DATA([flows.txt], [dnl
2761 table=0 mplsm actions=pop_mpls:0x800,goto_table(1)
2762 table=1 ip,ip_dscp=8 actions=controller
2764 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2767 dnl Modified MPLS pop action.
2768 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2769 dnl 60:66:66:66:00:08 > 50:54:00:00:00:01, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2770 dnl (tos 0x20, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2771 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2772 AT_CHECK([ovs-ofctl -O OpenFlow12 monitor br0 65534 -P standard --detach --pidfile 2> ofctl_monitor.log])
2775 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 01 60 66 66 66 00 08 88 48 00 01 41 20 45 20 00 2c 00 00 00 00 ff 06 3a 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'
2777 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2778 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2780 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2781 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2782 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2784 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2785 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2787 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2788 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2791 AT_CHECK([ovs-appctl revalidator/purge], [0])
2792 AT_CHECK([ovs-ofctl -O OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2793 n_packets=3, n_bytes=186, mplsm actions=pop_mpls:0x0800,goto_table:1
2794 table=1, n_packets=3, n_bytes=174, ip,nw_tos=32 actions=CONTROLLER:65535
2795 OFPST_FLOW reply (OF1.2):
2801 AT_SETUP([ofproto-dpif - MPLS handling with write_actions])
2802 OVS_VSWITCHD_START([dnl
2803 add-port br0 p1 -- set Interface p1 type=dummy
2805 on_exit 'kill `cat ovs-ofctl.pid`'
2807 dnl N.B: The first (and only) action that accesses L3 data after the
2808 dnl pop_mpls action is present in write_actions. This exercises recirculation
2809 dnl triggered in write_actions due to a previous action not in write actions.
2810 AT_CAPTURE_FILE([ofctl_monitor.log])
2811 AT_DATA([flows.txt], [dnl
2812 mplsm actions=pop_mpls:0x800,write_actions(dec_ttl,controller)
2814 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2816 dnl Modified MPLS pop action.
2817 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2818 dnl 60:66:66:66:00:08 > 50:54:00:00:00:01, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2819 dnl (tos 0x20, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2820 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2821 AT_CHECK([ovs-ofctl -O OpenFlow12 monitor br0 65534 -P standard --detach --pidfile 2> ofctl_monitor.log])
2824 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 01 60 66 66 66 00 08 88 48 00 01 41 20 45 20 00 2c 00 00 00 00 ff 06 3a 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'
2826 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2827 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2829 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2830 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2831 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2833 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2834 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2836 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2837 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2840 AT_CHECK([ovs-appctl revalidator/purge], [0])
2841 AT_CHECK([ovs-ofctl -O OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2842 n_packets=3, n_bytes=186, mplsm actions=pop_mpls:0x0800,write_actions(dec_ttl,CONTROLLER:65535)
2843 OFPST_FLOW reply (OF1.2):
2849 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
2850 OVS_VSWITCHD_START([dnl
2851 add-port br0 p1 -- set Interface p1 type=dummy
2853 on_exit 'kill `cat ovs-ofctl.pid`'
2855 AT_CAPTURE_FILE([ofctl_monitor.log])
2856 # A table-miss flow has priority 0 and no match
2857 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2859 dnl Singleton controller action.
2860 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2863 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
2865 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2866 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2868 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2869 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
2870 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
2872 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
2873 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
2875 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
2876 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
2879 AT_CHECK([ovs-appctl revalidator/purge], [0])
2880 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2881 n_packets=3, n_bytes=162, priority=0 actions=CONTROLLER:65535
2889 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
2890 OVS_VSWITCHD_START([dnl
2891 add-port br0 p1 -- set Interface p1 type=dummy
2893 on_exit 'kill `cat ovs-ofctl.pid`'
2895 AT_CAPTURE_FILE([ofctl_monitor.log])
2896 # A table-miss flow has priority 0 and no match
2897 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2899 dnl Singleton controller action.
2900 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2903 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
2905 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2906 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2908 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2910 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2911 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
2912 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
2914 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
2915 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
2917 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
2918 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
2921 AT_CHECK([ovs-appctl revalidator/purge], [0])
2922 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2923 n_packets=3, n_bytes=162, priority=0 actions=CONTROLLER:65535
2924 OFPST_FLOW reply (OF1.3):
2930 AT_SETUP([ofproto-dpif - table-miss flow with async config (OpenFlow 1.3)])
2931 OVS_VSWITCHD_START([dnl
2932 add-port br0 p1 -- set Interface p1 type=dummy
2934 on_exit 'kill `cat ovs-ofctl.pid`'
2936 ovs-appctl time/stop
2938 AT_CAPTURE_FILE([ofctl_monitor.log])
2939 # A table-miss flow has priority 0 and no match
2940 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2942 dnl Singleton controller action.
2943 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2945 # Become slave (OF 1.3), which should disable everything except port status.
2946 ovs-appctl -t ovs-ofctl ofctl/send 041800180000000200000003000000000000000000000001
2948 # Ensure that ovs-vswitchd gets a chance to reply before sending another command.
2949 ovs-appctl time/warp 500 100
2951 # Use OF 1.3 OFPT_SET_ASYNC to enable OFPR_NO_MATCH for slave only.
2952 ovs-appctl -t ovs-ofctl ofctl/send 041c002000000002000000000000000100000000000000000000000000000000
2954 ovs-appctl time/warp 500 100
2956 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
2958 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2959 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2961 AT_CHECK([ovs-appctl revalidator/purge], [0])
2962 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2963 send: OFPT_ROLE_REQUEST (OF1.3) (xid=0x2): role=slave generation_id=1
2964 OFPT_ROLE_REPLY (OF1.3) (xid=0x2): role=slave generation_id=1
2966 send: OFPT_SET_ASYNC (OF1.3) (xid=0x2):
2973 REQUESTFORWARD: (off)
2981 REQUESTFORWARD: (off)
2983 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
2984 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
2986 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
2987 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
2989 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
2990 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
2993 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2995 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2996 n_packets=3, n_bytes=162, priority=0 actions=CONTROLLER:65535
2997 OFPST_FLOW reply (OF1.3):
3004 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.4)])
3005 OVS_VSWITCHD_START([dnl
3006 add-port br0 p1 -- set Interface p1 type=dummy
3008 on_exit 'kill `cat ovs-ofctl.pid`'
3010 AT_CAPTURE_FILE([ofctl_monitor.log])
3011 # A table-miss flow has priority 0 and no match
3012 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flow br0 'priority=0 actions=output:CONTROLLER'])
3014 dnl Singleton controller action.
3015 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
3018 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
3020 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
3021 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3023 AT_CHECK([ovs-appctl revalidator/purge], [0])
3024 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
3025 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
3026 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3028 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
3029 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3031 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
3032 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3035 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3037 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3038 n_packets=3, n_bytes=162, priority=0 actions=CONTROLLER:65535
3039 OFPST_FLOW reply (OF1.4):
3046 AT_SETUP([ofproto-dpif - packet-in reasons (Openflow 1.3)])
3047 OVS_VSWITCHD_START([dnl
3048 add-port br0 p1 -- set Interface p1 type=dummy
3050 on_exit 'kill `cat ovs-ofctl.pid`'
3052 AT_CAPTURE_FILE([ofctl_monitor.log])
3053 AT_DATA([flows.txt], [dnl
3054 table=0 in_port=1 actions=write_actions(output(CONTROLLER)),goto_table(1)
3055 table=1 actions=output(CONTROLLER),goto_table(2)
3056 table=2 actions=group:1234
3058 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:CONTROLLER'])
3059 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flows br0 flows.txt])
3061 dnl Singleton controller action.
3062 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
3065 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
3067 AT_CHECK([ovs-ofctl packet-out br0 'in_port=NONE, packet=505400000007101111111111080045000028000000004006f97cc0a80001c0a800020008000a0000000000000000500200002e7d0000, actions=controller'])
3068 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 7])
3069 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3071 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3073 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
3074 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3075 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3077 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3078 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3080 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3081 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3083 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3084 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3086 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3087 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3089 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3090 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3092 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3093 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3095 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3096 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3098 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3099 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3101 OFPT_PACKET_IN (OF1.3) (xid=0x0): total_len=54 in_port=ANY (via action) data_len=54 (unbuffered)
3102 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3105 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3107 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3108 n_packets=3, n_bytes=162, in_port=1 actions=write_actions(CONTROLLER:65535),goto_table:1
3109 table=1, n_packets=3, n_bytes=162, actions=CONTROLLER:65535,goto_table:2
3110 table=2, n_packets=3, n_bytes=162, actions=group:1234
3111 OFPST_FLOW reply (OF1.3):
3118 AT_SETUP([ofproto-dpif - packet-in reasons (Openflow 1.4)])
3119 OVS_VSWITCHD_START([dnl
3120 add-port br0 p1 -- set Interface p1 type=dummy
3122 on_exit 'kill `cat ovs-ofctl.pid`'
3124 AT_CAPTURE_FILE([ofctl_monitor.log])
3125 AT_DATA([flows.txt], [dnl
3126 table=0 in_port=1 actions=write_actions(output(CONTROLLER)),goto_table(1)
3127 table=1 actions=output(CONTROLLER),goto_table(2)
3128 table=2 actions=group:1234
3130 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:CONTROLLER'])
3131 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flows br0 flows.txt])
3133 dnl Singleton controller action.
3134 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
3137 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
3139 AT_CHECK([ovs-ofctl packet-out br0 'in_port=NONE, packet=505400000007101111111111080045000028000000004006f97cc0a80001c0a800020008000a0000000000000000500200002e7d0000, actions=controller'])
3140 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 7])
3141 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3143 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3145 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
3146 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3147 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3149 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via group) data_len=54 (unbuffered)
3150 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3152 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action_set) data_len=54 (unbuffered)
3153 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3155 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3156 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3158 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via group) data_len=54 (unbuffered)
3159 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3161 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action_set) data_len=54 (unbuffered)
3162 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3164 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3165 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3167 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via group) data_len=54 (unbuffered)
3168 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3170 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action_set) data_len=54 (unbuffered)
3171 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3173 OFPT_PACKET_IN (OF1.4) (xid=0x0): total_len=54 in_port=ANY (via packet_out) data_len=54 (unbuffered)
3174 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:2e7d
3177 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3179 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3180 n_packets=3, n_bytes=162, in_port=1 actions=write_actions(CONTROLLER:65535),goto_table:1
3181 table=1, n_packets=3, n_bytes=162, actions=CONTROLLER:65535,goto_table:2
3182 table=2, n_packets=3, n_bytes=162, actions=group:1234
3183 OFPST_FLOW reply (OF1.4):
3190 AT_SETUP([ofproto-dpif - ARP modification slow-path])
3192 add_of_ports br0 1 2
3194 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
3195 ovs-ofctl add-flow br0 'in_port=1,arp actions=load:2->OXM_OF_ARP_OP[[]],2,load:0xc0a88001->OXM_OF_ARP_SPA[[]],2,load:0x404444444441->OXM_OF_ARP_THA[[]],2'
3197 # Input some packets that should follow the arp modification slow-path.
3199 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
3201 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3203 # Check the packets that were output.
3204 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
3205 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
3206 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
3207 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
3208 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
3209 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
3210 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
3211 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
3212 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
3213 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
3219 AT_SETUP([ofproto-dpif - VLAN handling])
3221 [set Bridge br0 fail-mode=standalone -- \
3222 add-port br0 p1 trunks=10,12 -- \
3223 add-port br0 p2 tag=10 -- \
3224 add-port br0 p3 tag=12 \
3225 other-config:priority-tags=true -- \
3226 add-port br0 p4 tag=12 -- \
3227 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
3228 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
3229 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
3230 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
3231 other-config:priority-tags=true -- \
3232 add-port br0 p9 vlan_mode=dot1q-tunnel tag=10 other-config:qinq-ethtype=802.1q -- \
3233 add-port br0 p10 vlan_mode=dot1q-tunnel tag=10 cvlans=10,12 other-config:qinq-ethtype=802.1q -- \
3234 add-port br0 p11 vlan_mode=dot1q-tunnel tag=12 other-config:qinq-ethtype=802.1q -- \
3235 add-port br0 p12 vlan_mode=dot1q-tunnel tag=12 other-config:qinq-ethtype=802.1q \
3236 other-config:priority-tags=true -- \
3237 set Interface p1 type=dummy -- \
3238 set Interface p2 type=dummy -- \
3239 set Interface p3 type=dummy -- \
3240 set Interface p4 type=dummy -- \
3241 set Interface p5 type=dummy -- \
3242 set Interface p6 type=dummy -- \
3243 set Interface p7 type=dummy -- \
3244 set Interface p8 type=dummy -- \
3245 set Interface p9 type=dummy -- \
3246 set Interface p10 type=dummy -- \
3247 set Interface p11 type=dummy -- \
3248 set Interface p12 type=dummy --])
3250 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
3251 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
3257 "100 10 0 1,5,6,7,8,pop_vlan,2,9" \
3258 "100 10 1 1,5,6,7,8,pop_vlan,2,9" \
3261 "100 12 0 1,5,6,pop_vlan,3,4,7,8,11,12" \
3262 "100 12 1 1,5,6,pop_vlan,4,7,11,push_vlan(vid=0,pcp=1),3,8,12" \
3266 "1 10 0 5,6,7,8,100,pop_vlan,2,9" \
3267 "1 10 1 5,6,7,8,100,pop_vlan,2,9" \
3270 "1 12 0 5,6,100,pop_vlan,3,4,7,8,11,12" \
3271 "1 12 1 5,6,100,pop_vlan,4,7,11,push_vlan(vid=0,pcp=1),3,8,12" \
3272 "2 none 0 9,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3273 "2 0 0 pop_vlan,9,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3274 "2 0 1 pop_vlan,9,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
3281 "3 none 0 4,7,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3282 "3 0 0 pop_vlan,4,7,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3283 "3 0 1 8,12,pop_vlan,4,7,11,push_vlan(vid=12,pcp=1),1,5,6,100" \
3290 "4 none 0 3,7,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3291 "4 0 0 pop_vlan,3,7,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3292 "4 0 1 3,8,12,pop_vlan,7,11,push_vlan(vid=12,pcp=1),1,5,6,100" \
3299 "5 none 0 2,9,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
3300 "5 0 0 pop_vlan,2,9,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
3301 "5 0 1 pop_vlan,2,9,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
3302 "5 10 0 1,6,7,8,100,pop_vlan,2,9" \
3303 "5 10 1 1,6,7,8,100,pop_vlan,2,9" \
3306 "5 12 0 1,6,100,pop_vlan,3,4,7,8,11,12" \
3307 "5 12 1 1,6,100,pop_vlan,4,7,11,push_vlan(vid=0,pcp=1),3,8,12" \
3308 "6 none 0 2,9,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
3309 "6 0 0 pop_vlan,2,9,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
3310 "6 0 1 pop_vlan,2,9,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
3311 "6 10 0 1,5,7,8,100,pop_vlan,2,9" \
3312 "6 10 1 1,5,7,8,100,pop_vlan,2,9" \
3315 "6 12 0 1,5,100,pop_vlan,3,4,7,8,11,12" \
3316 "6 12 1 1,5,100,pop_vlan,4,7,11,push_vlan(vid=0,pcp=1),3,8,12" \
3317 "7 none 0 3,4,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3318 "7 0 0 pop_vlan,3,4,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3319 "7 0 1 3,8,12,pop_vlan,4,11,push_vlan(vid=12,pcp=1),1,5,6,100" \
3320 "7 10 0 1,5,6,8,100,pop_vlan,2,9" \
3321 "7 10 1 1,5,6,8,100,pop_vlan,2,9" \
3324 "7 12 0 1,5,6,100,pop_vlan,3,4,8,11,12" \
3325 "7 12 1 1,5,6,100,pop_vlan,4,11,push_vlan(vid=0,pcp=1),3,8,12" \
3326 "8 none 0 3,4,7,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3327 "8 0 0 pop_vlan,3,4,7,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3328 "8 0 1 3,12,pop_vlan,4,7,11,push_vlan(vid=12,pcp=1),1,5,6,100" \
3329 "8 10 0 1,5,6,7,100,pop_vlan,2,9" \
3330 "8 10 1 1,5,6,7,100,pop_vlan,2,9" \
3333 "8 12 0 1,5,6,100,pop_vlan,3,4,7,11,12" \
3334 "8 12 1 1,5,6,100,pop_vlan,4,7,11,push_vlan(vid=0,pcp=1),3,12" \
3335 "9 none 0 2,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3336 "9 10 0 10,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3337 "9 11 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3341 "10 12 0 9,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3342 "11 10 0 7,8,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3343 "11 10 1 7,8,12,push_vlan(vid=12,pcp=0),1,5,6,100"
3351 if test $vlan = none; then
3352 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
3354 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8100),vlan(vid=$vlan,pcp=$pcp),encap(eth_type(0xabcd))"
3357 echo "----------------------------------------------------------------------"
3358 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
3360 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3361 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
3363 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
3365 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
3371 AT_SETUP([ofproto-dpif - VLAN depth limit])
3372 OVS_VSWITCHD_START([dnl
3373 add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3374 add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2 -- \
3375 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3
3378 AT_DATA([flows.txt], [dnl
3379 table=0 in_port=1,eth_type=0x8100,vlan_tci=0x0010/0x01ff actions=output:2
3380 table=0 in_port=1,eth_type=0xabcd,vlan_tci=0x0010/0x01ff actions=output:3
3382 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
3383 flow="in_port(1),eth(src=00:11:22:33:44:55,dst=00:22:44:66:88:00),eth_type(0x8100),vlan(vid=16,pcp=0), \
3384 encap(eth_type(0x8100),vlan(vid=17,pcp=0),encap(eth_type(0xabcd)))"
3386 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3387 AT_CHECK([tail -1 stdout], [0],
3388 [Datapath actions: 2
3391 AT_CHECK([ovs-vsctl set Open_vswitch `ovs-vsctl show | head -n1` other_config:vlan-limit=0])
3392 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3393 AT_CHECK([tail -1 stdout], [0],
3394 [Datapath actions: 3
3400 AT_SETUP([ofproto-dpif - Multi-VLAN actions])
3401 OVS_VSWITCHD_START([dnl
3402 add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3403 add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2
3405 AT_CHECK([ovs-vsctl set Open_vswitch `ovs-vsctl show | head -n1` other_config:vlan-limit=0])
3407 AT_DATA([flows.txt], [dnl
3408 table=0 in_port=1,vlan_tci=0x1100/0x1fff actions=pop_vlan,output:2
3409 table=0 in_port=1,vlan_tci=0x1101/0x1fff actions=push_vlan:0x8100,set_field:0x1201/0x1fff->vlan_tci,output:2
3410 table=0 in_port=1,vlan_tci=0x1102/0x1fff actions=push_vlan:0x88a8,set_field:0x1202/0x1fff->vlan_tci,output:2
3411 table=0 in_port=1,vlan_tci=0x1103/0x1fff actions=set_field:0x1203/0x1fff->vlan_tci,output:2
3412 table=0 in_port=1,vlan_tci=0x1104/0x1fff actions=pop_vlan,goto_table:1
3413 table=1 vlan_tci=0 actions=output:2
3414 table=1 vlan_tci=0x1300/0x1fff actions=pop_vlan,output:2
3415 table=1 vlan_tci=0x1301/0x1fff actions=push_vlan:0x88a8,set_field:0x1401/0x1fff->vlan_tci,output:2
3416 table=1 vlan_tci=0x1302/0x1fff actions=set_field:0x1402/0x1fff->vlan_tci,output:2
3419 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
3422 psd_hdr="in_port(1),eth(src=00:11:22:33:44:55,dst=00:22:44:66:88:00),"
3423 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$psd_hdr$1"], [0], [stdout])
3424 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $2
3428 check_act "eth_type(0x8100),vlan(vid=0x0100,pcp=0),encap(eth_type(0xabcd))" \
3431 check_act "eth_type(0x8100),vlan(vid=0x0101,pcp=0),encap(eth_type(0xabcd))" \
3432 "push_vlan(vid=513,pcp=0),2"
3434 check_act "eth_type(0x8100),vlan(vid=0x0102,pcp=0),encap(eth_type(0xabcd))" \
3435 "push_vlan(tpid=0x88a8,vid=514,pcp=0),2"
3437 check_act "eth_type(0x8100),vlan(vid=0x0103,pcp=0),encap(eth_type(0xabcd))" \
3438 "pop_vlan,push_vlan(vid=515,pcp=0),2"
3440 check_act "eth_type(0x8100),vlan(vid=0x0104,pcp=0),encap(eth_type(0xabcd))" \
3443 check_act "eth_type(0x88a8),vlan(vid=0x0104,pcp=0),encap(eth_type(0x8100),\
3444 vlan(vid=0x0300,pcp=0),encap(eth_type(0xabcd)))" "pop_vlan,pop_vlan,2"
3446 check_act "eth_type(0x88a8),vlan(vid=0x0104,pcp=0),encap(eth_type(0x8100),\
3447 vlan(vid=0x0301,pcp=0),encap(eth_type(0xabcd)))" \
3448 "pop_vlan,push_vlan(tpid=0x88a8,vid=1025,pcp=0),2"
3450 check_act "eth_type(0x88a8),vlan(vid=0x0104,pcp=0),encap(eth_type(0x8100),\
3451 vlan(vid=0x0302,pcp=0),encap(eth_type(0xabcd)))" \
3452 "pop_vlan,pop_vlan,push_vlan(vid=1026,pcp=0),2"
3457 AT_SETUP([ofproto-dpif - MPLS handling])
3458 OVS_VSWITCHD_START([dnl
3459 add-port br0 p1 -- set Interface p1 type=dummy
3461 on_exit 'kill `cat ovs-ofctl.pid`'
3463 AT_CAPTURE_FILE([ofctl_monitor.log])
3464 AT_DATA([flows.txt], [dnl
3465 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
3466 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
3467 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
3469 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3471 dnl In this test, we push an MPLS tag to an ethernet packet.
3472 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3475 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:00,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
3477 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3478 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3480 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3481 OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
3482 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3483 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3484 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3485 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3486 00000030 00 00 50 00 00 00 2e 91-00 00
3488 OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
3489 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3490 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3491 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3492 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3493 00000030 00 00 50 00 00 00 2e 91-00 00
3495 OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
3496 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3497 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3498 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3499 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3500 00000030 00 00 50 00 00 00 2e 91-00 00
3503 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3504 dnl copied exactly, except for the BOS bit.
3505 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3508 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:01,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
3510 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3511 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3513 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3514 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3515 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
3516 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3517 00000010 a0 40 00 00 a1 40
3519 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3520 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
3521 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3522 00000010 a0 40 00 00 a1 40
3524 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3525 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
3526 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3527 00000010 a0 40 00 00 a1 40
3530 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3531 dnl copied exactly, except for the BOS bit. The ethertype should be updated
3532 dnl to the MPLS ethertype of the MPLS push action which differs to that
3533 dnl of the input packet.
3534 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3537 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:02,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
3539 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3540 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3542 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3543 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3544 mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
3545 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3546 00000010 a0 40 00 00 a1 40
3548 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3549 mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
3550 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3551 00000010 a0 40 00 00 a1 40
3553 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3554 mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
3555 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3556 00000010 a0 40 00 00 a1 40
3562 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
3563 OVS_VSWITCHD_START([dnl
3564 add-port br0 p1 -- set Interface p1 type=dummy
3566 on_exit 'kill `cat ovs-ofctl.pid`'
3568 AT_CAPTURE_FILE([ofctl_monitor.log])
3569 AT_DATA([flows.txt], [dnl
3570 cookie=0xa dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,controller
3571 cookie=0xa dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,controller
3572 cookie=0xa dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,controller
3573 cookie=0xa dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,controller
3574 cookie=0xa dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
3575 cookie=0xa dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
3576 cookie=0xa dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
3577 cookie=0xa dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
3578 cookie=0xa dl_src=40:44:44:44:54:58,vlan_tci=0x1000/0x1000 actions=load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
3579 cookie=0xa dl_src=40:44:44:44:54:59,vlan_tci=0x1000/0x1000 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],set_vlan_pcp:1,load:99->OXM_OF_VLAN_VID[[]],controller
3581 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3583 dnl Modified MPLS controller action.
3584 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3585 dnl both of these in the final flow
3586 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3589 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:50,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
3591 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3592 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3594 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3595 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3596 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3597 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3598 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3599 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3600 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3602 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3603 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3604 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3605 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3606 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3607 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3609 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3610 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3611 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3612 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3613 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3614 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3617 dnl Modified MPLS controller action.
3618 dnl In this test, the input packet is vlan-tagged, which should be kept as
3620 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3623 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:51,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
3625 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3626 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3628 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3629 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3630 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3631 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3632 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3633 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3634 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3637 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3638 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3639 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3640 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3641 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3642 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3645 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3646 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3647 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3648 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3649 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3650 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3654 dnl Modified MPLS controller action.
3655 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3656 dnl both of these in the final flow
3657 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3660 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:52,dst=52:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
3662 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3663 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3665 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3666 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3667 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3668 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3669 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3670 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3671 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3673 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3674 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3675 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3676 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3677 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3678 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3680 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3681 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3682 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3683 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3684 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3685 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3688 dnl Modified MPLS controller action.
3689 dnl In this test, the input packet is vlan-tagged, which should be kept as
3691 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3694 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:53,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
3696 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3697 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3699 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3700 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3701 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3702 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3703 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3704 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3705 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3708 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3709 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3710 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3711 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3712 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3713 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3716 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3717 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3718 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3719 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3720 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3721 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3725 dnl Modified MPLS controller action.
3726 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3727 dnl actions are reordered, so we see both of these in the final flow.
3728 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3731 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:54,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
3733 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3734 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3736 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3737 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3738 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3739 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3740 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3741 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3742 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3744 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3745 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3746 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3747 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3748 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3749 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3751 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3752 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3753 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3754 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3755 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3756 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3759 dnl Modified MPLS controller action.
3760 dnl In this test, the input packet is vlan-tagged, which should be kept as
3762 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3765 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:55,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
3767 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3768 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3770 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3771 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3772 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3773 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3774 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3775 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3776 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3779 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3780 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3781 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3782 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3783 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3784 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3787 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3788 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3789 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3790 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3791 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3792 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3796 dnl Modified MPLS controller action.
3797 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3798 dnl actions are reordered, so we see both of these in the final flow.
3799 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3802 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:56,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
3804 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3805 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3807 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3808 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3809 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3810 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3811 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3812 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3813 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3815 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3816 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3817 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3818 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3819 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3820 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3822 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3823 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3824 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3825 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3826 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3827 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3830 dnl Modified MPLS controller action.
3831 dnl In this test, the input packet is vlan-tagged, which should be kept as
3833 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P standard --detach --pidfile 2> ofctl_monitor.log])
3836 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:57,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
3838 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3839 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3841 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3842 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3843 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3844 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3845 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3846 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3847 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3850 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3851 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3852 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3853 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3854 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3855 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3858 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3859 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3860 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3861 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3862 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3863 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3867 dnl Modified MPLS controller action.
3868 dnl In this test, the input packet is vlan-tagged, which should be kept as
3870 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3873 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:58,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
3875 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3876 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3878 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3879 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3880 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3881 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3882 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3883 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3884 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3886 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3887 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3888 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3889 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3890 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3891 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3893 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3894 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3895 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3896 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3897 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3898 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3901 dnl Modified MPLS controller action.
3902 dnl In this test, the input packet is vlan-tagged, which should be modified
3903 dnl before we push MPLS and VLAN tags.
3904 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3907 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:59,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
3909 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3910 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3912 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3913 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3914 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3915 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3916 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3917 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3918 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3920 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3921 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3922 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3923 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3924 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3925 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3927 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3928 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
3929 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3930 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3931 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3932 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3935 AT_CHECK([ovs-appctl revalidator/purge], [0])
3936 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3937 cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
3938 cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
3939 cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
3940 cookie=0xa, n_packets=3, n_bytes=162, dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
3941 cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
3942 cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
3943 cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
3944 cookie=0xa, n_packets=3, n_bytes=174, dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
3945 cookie=0xa, n_packets=3, n_bytes=174, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:58 actions=load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
3946 cookie=0xa, n_packets=3, n_bytes=174, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:59 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],set_field:1->vlan_pcp,load:0x63->OXM_OF_VLAN_VID[[]],CONTROLLER:65535
3947 OFPST_FLOW reply (OF1.2):
3953 AT_SETUP([ofproto-dpif - fragment handling - trace])
3955 add_of_ports br0 1 2 3 4 5 6 90
3956 AT_DATA([flows.txt], [dnl
3957 priority=75 tcp ip_frag=no tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:1
3958 priority=75 tcp ip_frag=first tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:2
3959 priority=50 tcp ip_frag=no actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:4
3960 priority=50 tcp ip_frag=first actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:5
3961 priority=50 tcp ip_frag=later actions=output:6
3963 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
3965 base_flow="in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=128"
3966 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
3967 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
3968 later_flow="$base_flow,frag=later)"
3970 # mode no first later
3973 'drop 1 drop drop' \
3982 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3983 for type in no first later; do
3984 eval flow=\$${type}_flow exp_output=\$$type
3985 printf "\n%s\n" "----$mode $type-----"
3986 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3988 if test $mode = drop && test $type != no; then
3989 echo ' 0. Packets are IP fragments and the fragment handling mode is "drop".' >> expout
3990 echo "Datapath actions: $exp_output" >> expout
3991 elif test $type = later; then
3992 echo "Datapath actions: $exp_output" >> expout
3994 echo "Datapath actions: set(tcp(src=80,dst=80)),$exp_output" >> expout
3996 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
4002 AT_SETUP([ofproto-dpif - fragment handling - upcall])
4004 add_of_ports br0 1 2 3 4 5 6 90
4005 AT_DATA([flows.txt], [dnl
4006 priority=75 tcp ip_frag=no tp_dst=80 actions=set_field:81->tcp_dst,output:1
4007 priority=75 tcp ip_frag=first tp_dst=80 actions=set_field:81->tcp_dst,output:2
4008 priority=50 tcp ip_frag=no actions=set_field:81->tcp_dst,output:4
4009 priority=50 tcp ip_frag=first actions=set_field:81->tcp_dst,output:5
4010 priority=50 tcp ip_frag=later actions=output:6
4012 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
4014 base_flow="in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=128"
4015 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
4016 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
4017 later_flow="$base_flow,frag=later)"
4019 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
4023 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4024 for type in no first later; do
4025 eval flow=\$${type}_flow
4026 printf "\n%s\n" "----$mode $type-----"
4028 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
4031 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
4032 flow-dump from non-dpdk interfaces:
4033 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
4034 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),5
4035 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
4040 AT_CHECK([ovs-appctl revalidator/purge], [0])
4041 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4042 for type in no first later; do
4043 eval flow=\$${type}_flow
4044 printf "\n%s\n" "----$mode $type-----"
4046 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
4049 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
4050 flow-dump from non-dpdk interfaces:
4051 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
4052 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=first), packets:0, bytes:0, used:never, actions:drop
4053 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=later), packets:0, bytes:0, used:never, actions:drop
4058 AT_CHECK([ovs-appctl revalidator/purge], [0])
4059 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4060 for type in no first later; do
4061 eval flow=\$${type}_flow
4062 printf "\n%s\n" "----$mode $type-----"
4064 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
4067 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
4068 flow-dump from non-dpdk interfaces:
4069 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
4070 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),2
4071 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
4077 AT_SETUP([ofproto-dpif - fragment handling - actions])
4079 add_of_ports br0 1 2 3 4 5 6 90
4081 AT_CHECK([ovs-ofctl add-flow br0 "tcp,ip_frag=later actions=move:OXM_OF_TCP_DST[[0..7]]->OXM_OF_TCP_SRC[[0..7]],output:1"], [1], [], [stderr])
4082 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4083 source field tcp_dst lacks correct prerequisites
4084 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4087 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 "tcp,ip_frag=later actions=move:OXM_OF_PKT_REG0[[0..7]]->OXM_OF_TCP_SRC[[0..7]],output:1"], [1], [], [stderr])
4088 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4089 destination field tcp_src lacks correct prerequisites
4090 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4093 AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=set_field:8888->udp_src,output:1"], [1], [], [stderr])
4094 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4095 set_field udp_src lacks correct prerequisites
4096 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4099 AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=load:8888->NXM_OF_UDP_DST[[]],output:1"], [1], [], [stderr])
4100 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4101 set_field udp_dst lacks correct prerequisites
4102 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4105 AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_src,output:1"], [1], [], [stderr])
4106 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4107 set_field sctp_src lacks correct prerequisites
4108 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4111 AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_dst,output:1"], [1], [], [stderr])
4112 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4113 set_field sctp_dst lacks correct prerequisites
4114 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4117 AT_CHECK([ovs-ofctl add-flow br0 "tcp,ip_frag=later actions=learn(table=1,hard_timeout=60,eth_type=0x800,nw_proto=6,NXM_OF_IP_SRC[[]]=NXM_OF_IP_DST[[]],NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],output:NXM_NX_REG0[[0..15]]),output:1"], [1], [], [stderr])
4118 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4119 source field tcp_dst lacks correct prerequisites
4120 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4123 AT_DATA([flows.txt], [dnl
4124 priority=75 tcp actions=load:42->OXM_OF_TCP_SRC[[0..7]],output:1
4126 AT_CHECK([ovs-ofctl -O OpenFlow12 replace-flows br0 flows.txt])
4128 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
4132 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4133 for frag in 4000 6000 6008 4010; do
4134 printf "\n%s\n" "----$mode $frag-----"
4136 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 003c 2e24 $frag 40 06 465d ac11370d ac11370b 828b 0016 751e267b 00000000 a002 16d0 1736 0000 02 04 05 b4 04 02 08 0a 2d 25 08 5f 00 00 00 00 01 03 03 07"])
4139 dnl The set_field action only modifies 8 bits of the tcp_src, so both the flow
4140 dnl wildcard and the set_field action have a mask of 0xFF. Up to (including)
4141 dnl OVS-2.5, the wildcards and set_field mask are shared internally.
4142 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
4143 flow-dump from non-dpdk interfaces:
4144 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=33419/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4145 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=33419/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4146 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:74, used:0.001s, actions:1
4149 AT_CHECK([ovs-appctl revalidator/purge], [0])
4150 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4151 for frag in 4000 6000 6008 4010; do
4152 printf "\n%s\n" "----$mode $frag truncated transport header -----"
4154 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0018 2e24 $frag 40 06 465d ac11370d ac11370b 828b 0016"])
4157 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
4158 flow-dump from non-dpdk interfaces:
4159 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=0/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4160 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=0/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4161 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:38, used:0.001s, actions:1
4164 AT_CHECK([ovs-appctl revalidator/purge], [0])
4165 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4166 for frag in 4000 6000 6001 4002; do
4167 printf "\n%s\n" "----$mode $frag missing transport header-----"
4169 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0014 2e24 $frag 40 06 465d ac11370d ac11370b"])
4172 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
4173 flow-dump from non-dpdk interfaces:
4174 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=0/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4175 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=0/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4176 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:34, used:0.001s, actions:1
4182 AT_SETUP([ofproto-dpif - exit])
4184 add_of_ports br0 1 2 3 10 11 12 13 14
4185 AT_DATA([flows.txt], [dnl
4186 in_port=1 actions=output:10,exit,output:11
4187 in_port=2 actions=output:12,resubmit:1,output:12
4188 in_port=3 actions=output:13,resubmit:2,output:14
4190 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4191 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
4192 AT_CHECK([tail -1 stdout], [0],
4193 [Datapath actions: 10
4195 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
4196 AT_CHECK([tail -1 stdout], [0],
4197 [Datapath actions: 12,10
4199 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
4200 AT_CHECK([tail -1 stdout], [0],
4201 [Datapath actions: 13,12,10
4207 AT_SETUP([ofproto-dpif - mirroring, select_all])
4208 AT_KEYWORDS([mirror mirrors mirroring])
4210 add_of_ports br0 1 2 3
4212 set Bridge br0 mirrors=@m --\
4213 --id=@p3 get Port p3 --\
4214 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4216 AT_DATA([flows.txt], [dnl
4217 in_port=1 actions=output:2
4218 in_port=2 actions=output:1
4220 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4222 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4223 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4224 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4225 [Datapath actions: 3,2
4228 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4229 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4230 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4231 [Datapath actions: 3,1
4238 AT_SETUP([ofproto-dpif - mirroring, select_src])
4239 AT_KEYWORDS([mirror mirrors mirroring])
4241 add_of_ports br0 1 2 3
4243 set Bridge br0 mirrors=@m --\
4244 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
4245 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
4247 AT_DATA([flows.txt], [dnl
4248 in_port=1 actions=output:2
4249 in_port=2 actions=output:1
4251 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4253 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4254 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4255 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4256 [Datapath actions: 3,2
4259 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4260 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4261 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4262 [Datapath actions: 1
4267 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
4268 AT_KEYWORDS([mirror mirrors mirroring])
4270 add_of_ports br0 1 2
4272 set Bridge br0 mirrors=@m --\
4273 --id=@p2 get Port p2 --\
4274 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
4276 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
4278 # "in_port" defaults to OFPP_NONE if it's not specified.
4279 flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_ttl=128,icmp_type=8,icmp_code=0"
4280 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4281 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4282 [Datapath actions: 1,2
4289 AT_SETUP([ofproto-dpif - mirroring, select_dst])
4290 AT_KEYWORDS([mirror mirrors mirroring])
4292 add_of_ports br0 1 2 3
4294 set Bridge br0 mirrors=@m --\
4295 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4296 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
4298 AT_DATA([flows.txt], [dnl
4299 in_port=1 actions=output:2
4300 in_port=2 actions=output:1
4302 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4304 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4305 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4306 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4307 [Datapath actions: 2,3
4310 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4311 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4312 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4313 [Datapath actions: 1
4320 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
4321 AT_KEYWORDS([mirror mirrors mirroring])
4323 add_of_ports br0 1 2 3
4325 set Bridge br0 mirrors=@m --\
4326 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4327 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4329 AT_DATA([flows.txt], [dnl
4330 in_port=1, actions=output:2
4332 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4334 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4335 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4336 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4337 [Datapath actions: 2
4340 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=10,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
4341 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4342 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4343 [Datapath actions: 2
4346 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=11,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
4347 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4348 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4349 [Datapath actions: 3,2
4356 AT_SETUP([ofproto-dpif - mirroring, output_port])
4357 AT_KEYWORDS([mirror mirrors mirroring])
4359 add_of_ports br0 1 2 3
4361 set Bridge br0 mirrors=@m --\
4362 --id=@p3 get Port p3 --\
4363 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4365 AT_DATA([flows.txt], [dnl
4366 in_port=1 actions=mod_vlan_vid:17,output:2
4367 in_port=2 actions=output:1
4369 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4371 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4372 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4373 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4374 [Datapath actions: 3,push_vlan(vid=17,pcp=0),2
4377 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4378 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4379 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4380 [Datapath actions: 3,1
4386 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
4387 AT_KEYWORDS([mirror mirrors mirroring])
4389 add_of_ports br0 1 2
4391 set Bridge br0 mirrors=@m --\
4392 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
4394 AT_DATA([flows.txt], [dnl
4395 in_port=1 actions=output:2
4396 in_port=2 actions=mod_vlan_vid:17,output:1
4398 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4400 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4401 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4402 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4404 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
4405 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
4407 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
4409 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4410 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4411 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4413 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
4414 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
4416 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
4421 # This verifies that we don't get duplicate mirroring when mirror_packet()
4422 # might be invoked recursively, as a check against regression.
4423 AT_SETUP([ofproto-dpif - multiple VLAN output mirrors])
4424 AT_KEYWORDS([mirror mirrors mirroring])
4426 add_of_ports br0 1 2 3
4428 -- set Bridge br0 fail-mode=standalone mirrors=@m1,@m2 \
4429 -- --id=@m1 create Mirror name=m1 select_all=true output_vlan=500 \
4430 -- --id=@m2 create Mirror name=m2 select_all=true output_vlan=501 \
4431 -- set Port br0 tag=0 \
4432 -- set Port p1 tag=0 \
4433 -- set Port p2 tag=500 \
4434 -- set Port p3 tag=501
4437 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4438 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //
4440 /g' | sort], [0], [100
4448 # This test verifies that mirror state is preserved across recirculation.
4450 # Otherwise, post-recirculation the ingress and the output to port 4
4451 # would cause the packet to be mirrored to port 3 a second time.
4452 AT_SETUP([ofproto-dpif - mirroring with recirculation])
4453 AT_KEYWORDS([mirror mirrors mirroring])
4455 add_of_ports br0 1 2 3 4
4457 set Bridge br0 mirrors=@m --\
4458 --id=@p3 get Port p3 --\
4459 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4461 AT_DATA([flows.txt], [dnl
4462 in_port=1 actions=2,debug_recirc,4
4464 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4466 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4467 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4468 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 3,2,recirc(0x1)
4470 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4471 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 4
4477 # Tests below verify the snaplen support for mirroring
4478 AT_SETUP([ofproto-dpif - mirroring, select_all with snaplen])
4479 AT_KEYWORDS([mirror mirrors mirroring])
4481 add_of_ports br0 1 2 3
4483 set Bridge br0 mirrors=@m --\
4484 --id=@p3 get Port p3 --\
4485 --id=@m create Mirror name=mymirror select_all=true output_port=@p3 snaplen=100
4487 AT_DATA([flows.txt], [dnl
4488 in_port=1 actions=output:2
4489 in_port=2 actions=output:1
4491 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4493 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4494 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4495 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4496 [Datapath actions: trunc(100),3,2
4499 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4500 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4501 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4502 [Datapath actions: trunc(100),3,1
4508 AT_SETUP([ofproto-dpif - mirroring, select_all with snaplen and reset snaplen])
4509 AT_KEYWORDS([mirror mirrors mirroring])
4511 add_of_ports br0 1 2 3
4513 set Bridge br0 mirrors=@m --\
4514 --id=@p3 get Port p3 --\
4515 --id=@m create Mirror name=mymirror select_all=true output_port=@p3 snaplen=100
4517 AT_DATA([flows.txt], [dnl
4518 in_port=1 actions=output:2
4519 in_port=2 actions=output:1
4521 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4523 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4524 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4525 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4526 [Datapath actions: trunc(100),3,2
4529 ovs-vsctl set mirror mymirror snaplen=77
4531 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4532 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4533 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4534 [Datapath actions: trunc(77),3,1
4537 ovs-vsctl set mirror mymirror snaplen=65535
4539 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4540 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4541 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4542 [Datapath actions: 3,1
4548 AT_SETUP([ofproto-dpif - mirroring, select_src with snaplen])
4549 AT_KEYWORDS([mirror mirrors mirroring])
4551 add_of_ports br0 1 2 3
4553 set Bridge br0 mirrors=@m --\
4554 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
4555 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3 snaplen=100
4557 AT_DATA([flows.txt], [dnl
4558 in_port=1 actions=output:2
4559 in_port=2 actions=output:1
4561 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4563 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4564 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4565 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4566 [Datapath actions: trunc(100),3,2
4569 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4570 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4571 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4572 [Datapath actions: 1
4577 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port with snaplen])
4578 AT_KEYWORDS([mirror mirrors mirroring])
4580 add_of_ports br0 1 2
4582 set Bridge br0 mirrors=@m --\
4583 --id=@p2 get Port p2 --\
4584 --id=@m create Mirror name=mymirror select_all=true output_port=@p2 snaplen=100
4586 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
4588 # "in_port" defaults to OFPP_NONE if it's not specified.
4589 flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_ttl=128,icmp_type=8,icmp_code=0"
4590 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4591 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4592 [Datapath actions: 1,trunc(100),2
4598 AT_SETUP([ofproto-dpif - mirroring, select_dst with snaplen])
4599 AT_KEYWORDS([mirror mirrors mirroring])
4601 add_of_ports br0 1 2 3
4603 set Bridge br0 mirrors=@m --\
4604 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4605 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3 snaplen=100
4607 AT_DATA([flows.txt], [dnl
4608 in_port=1 actions=output:2
4609 in_port=2 actions=output:1
4611 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4613 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4614 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4615 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4616 [Datapath actions: 2,trunc(100),3
4619 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4620 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4621 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4622 [Datapath actions: 1
4628 AT_SETUP([ofproto-dpif - mirroring, select_vlan with snaplen])
4629 AT_KEYWORDS([mirror mirrors mirroring])
4631 add_of_ports br0 1 2 3
4633 set Bridge br0 mirrors=@m --\
4634 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4635 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3 snaplen=100
4637 AT_DATA([flows.txt], [dnl
4638 in_port=1, actions=output:2
4640 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4642 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4643 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4644 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4645 [Datapath actions: 2
4648 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=10,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
4649 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4650 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4651 [Datapath actions: 2
4654 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=11,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
4655 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4656 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4657 [Datapath actions: trunc(100),3,2
4663 AT_SETUP([ofproto-dpif - mirroring, output_port with snaplen])
4664 AT_KEYWORDS([mirror mirrors mirroring])
4666 add_of_ports br0 1 2 3
4668 set Bridge br0 mirrors=@m --\
4669 --id=@p3 get Port p3 --\
4670 --id=@m create Mirror name=mymirror select_all=true output_port=@p3 snaplen=100
4672 AT_DATA([flows.txt], [dnl
4673 in_port=1 actions=mod_vlan_vid:17,output:2
4674 in_port=2 actions=output:1
4676 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4678 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4679 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4680 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4681 [Datapath actions: trunc(100),3,push_vlan(vid=17,pcp=0),2
4684 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4685 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4686 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4687 [Datapath actions: trunc(100),3,1
4693 AT_SETUP([ofproto-dpif - mirroring, output_vlan with snaplen])
4694 AT_KEYWORDS([mirror mirrors mirroring])
4696 add_of_ports br0 1 2
4698 set Bridge br0 mirrors=@m --\
4699 --id=@m create Mirror name=mymirror select_all=true output_vlan=12 snaplen=100
4701 AT_DATA([flows.txt], [dnl
4702 in_port=1 actions=output:2
4703 in_port=2 actions=mod_vlan_vid:17,output:1
4705 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4707 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4708 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4709 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4710 dnl Expect: "trunc(100),100,trunc(100),2,trunc(100),1", with different order
4711 AT_CHECK([echo "$actual" | sed -n 's/.*\(trunc([0-9]*),[0-9]*,trunc([0-9]*),[0-9]*,trunc([0-9]*),[0-9]*\)/\1/p'], [0])
4713 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4714 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4715 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4716 AT_CHECK([echo "$actual" | sed -n 's/.*\(trunc([0-9]*),[0-9]*,trunc([0-9]*),[0-9]*,trunc([0-9]*),[0-9]*\)/\1/p'], [0])
4721 AT_SETUP([ofproto-dpif - multiple VLAN output mirrors with snaplen])
4722 AT_KEYWORDS([mirror mirrors mirroring])
4724 add_of_ports br0 1 2 3
4726 -- set Bridge br0 fail-mode=standalone mirrors=@m1,@m2 \
4727 -- --id=@m1 create Mirror name=m1 select_all=true output_vlan=500 snaplen=200 \
4728 -- --id=@m2 create Mirror name=m2 select_all=true output_vlan=501 snaplen=300 \
4729 -- set Port br0 tag=0 \
4730 -- set Port p1 tag=0 \
4731 -- set Port p2 tag=500 \
4732 -- set Port p3 tag=501
4735 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4736 AT_CHECK([tail -1 stdout | egrep "trunc\(200\),2,trunc\(300\),3,100|trunc\(300\),3,trunc\(200\),2,100"], [0], [stdout])
4741 # This test verifies that the table ID is preserved across recirculation
4742 # when a resubmit action requires it (because the action is relative to
4743 # the current table rather than specifying a table).
4744 AT_SETUP([ofproto-dpif - resubmit with recirculation])
4746 add_of_ports br0 1 2 3
4748 AT_DATA([flows.txt], [dnl
4749 table=0 in_port=1 actions=2,resubmit(,1)
4750 table=1 in_port=1 actions=debug_recirc,resubmit:55
4751 table=1 in_port=55 actions=3
4753 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4755 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4756 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4757 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 2,recirc(0x1)
4759 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4760 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 3
4766 # This test verifies that "resubmit", when it triggers recirculation
4767 # indirectly through the flow that it recursively invokes, is not
4768 # re-executed when execution continues later post-recirculation.
4769 AT_SETUP([ofproto-dpif - recirculation after resubmit])
4771 add_of_ports br0 1 2
4773 AT_DATA([flows.txt], [dnl
4774 table=0 in_port=1 actions=resubmit(,1),2
4775 table=1 in_port=1 actions=debug_recirc
4777 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4779 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4780 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4781 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: recirc(0x1)
4783 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4784 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 2
4790 dnl CHECK_CONTINUATION(TITLE, N_PORTS0, N_PORTS1, ACTIONS0, ACTIONS1, [EXTRA_SETUP])
4792 dnl Checks the implementation of the continuation mechanism that allows the
4793 dnl packet processing pipeline to be paused and resumed. Starts by creating
4794 dnl bridge br0 with N_PORTS0 ports numbered 1 through N_PORTS0, and adds the
4795 dnl flows listed in ACTIONS0 to that bridge. Then, injects a packet at port 1
4796 dnl in the bridge, resuming each time the pipeline pauses, and expects a single
4797 dnl packet to be output at each port 2 through N_PORTS0. Then, as long as
4798 dnl ACTIONS0 still contains at least one "pause" action, removes one of them
4799 dnl and repeats the process.
4801 dnl If N_PORTS1 is nonzero, also creates a bridge br1 and adds ports numbered
4802 dnl N_PORTS0 + 1 to N_PORTS0 + N_PORTS1 to it, as well as flows ACTIONS1.
4803 dnl ACTIONS1 may also contain "pause" actions. Packets are only ever injected
4804 dnl into port 1 on br0, so br1 only comes into action if a patch port (added
4805 dnl by EXTRA_SETUP) jumps from one bridge to another.
4807 dnl EXTRA_SETUP is an optional list of extra commands to run after setting up
4808 dnl both bridges, e.g. to configure mirrors or patch ports.
4809 m4_define([CHECK_CONTINUATION], [dnl
4810 AT_SETUP([ofproto-dpif - continuation - $1])
4811 AT_KEYWORDS([continuations pause resume])
4814 # count_matches STRING
4816 # Prints on stdout the number of occurrences of STRING in stdin.
4823 add_of_ports --pcap br0 `seq 1 $2`
4824 m4_if([$3], [0], [],
4826 add_of_ports --pcap br1 `seq m4_eval([$2 + 1]) m4_eval([$2 + $3])`])
4828 AT_CAPTURE_FILE([ofctl_monitor0.log])
4829 AT_CHECK([ovs-ofctl monitor br0 resume --detach --no-chdir --pidfile=ovs-ofctl0.pid 2> ofctl_monitor0.log])
4830 m4_if([$3], [0], [],
4831 [AT_CAPTURE_FILE([ofctl_monitor1.log])
4832 AT_CHECK([ovs-ofctl monitor br1 resume --detach --no-chdir --pidfile=ovs-ofctl1.pid 2> ofctl_monitor1.log])])
4837 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4841 printf "\n\nactions for br0:\n%s\n" "$actions0"
4842 m4_if([$3], [0], [], [printf "actions for br1:\n%s\n" "$actions1"])
4845 AT_CHECK([echo "$actions0" | sed 's/pause/controller(pause)/g' | ovs-ofctl -O OpenFlow13 add-flows br0 -])
4846 m4_if([$3], [0], [],
4847 [AT_CHECK([echo "$actions1" | sed 's/pause/controller(pause)/g' | ovs-ofctl -O OpenFlow13 add-flows br1 -])])
4849 # Make sure the datapath is up-to-date before sending the packet.
4850 ovs-appctl revalidator/wait
4852 # Run a packet through the switch.
4853 AT_CHECK([ovs-appctl netdev-dummy/receive p1 "$flow"], [0], [stdout])
4855 # Wait for the expected number of packets to show up.
4856 n_packets=`expr $n_packets + $2 - 1 + $3`
4857 echo "waiting for $n_packets packets..."
4858 OVS_WAIT_UNTIL([test $n_packets = `ovs-ofctl parse-pcap p*-tx.pcap | wc -l`])
4860 # Wait for the expected number of NXT_RESUMEs to be logged.
4861 n_resumes=$(expr $n_resumes + $(echo "$actions0 $actions1" | count_matches pause) )
4862 echo "waiting for $n_resumes NXT_RESUMEs..."
4863 OVS_WAIT_UNTIL([test $n_resumes = `cat ofctl_monitor*.log | grep -c NXT_RESUME`])
4865 # Eliminate one "pause" from the actions.
4867 # If there were none left, then we're done.
4868 next_actions0=`echo "$actions0" | sed '1,/pause/s/pause//'`
4869 if test X"$actions0" = X"$next_actions0"; then
4870 next_actions1=`echo "$actions1" | sed '1,/pause/s/pause//'`
4871 if test X"$actions1" = X"$next_actions1"; then
4874 actions1=$next_actions1
4877 actions0=$next_actions0
4880 # Delete all the flows and verify that there are none, so that we
4881 # can be sure that our updated flow tables is actually in use
4883 AT_CHECK([ovs-ofctl del-flows br0 && ovs-ofctl dump-flows br0 | strip_xids], [0],
4886 m4_if([$3], [0], [],
4887 [AT_CHECK([ovs-ofctl del-flows br1 && ovs-ofctl dump-flows br1 | strip_xids], [0],
4895 # Check that pause at the end of the pipeline works OK.
4897 # (xlate_continuation() has a special case for no-op actions; this
4898 # fails without that special case.)
4899 CHECK_CONTINUATION([pause at end of pipeline], [2], [0], [actions=2 pause])
4901 # Check that remaining actions are preserved following resume.
4902 CHECK_CONTINUATION([actions], [7], [0],
4903 [in_port=1 actions=pause 2 pause 3 pause 4 pause 5 pause 6 pause 7])
4905 # Check that multiple levels of resubmit continue following resume.
4907 # The "resubmit:55", which is relative to the current table, is
4908 # particularly interesting because it checks that the notion of the
4909 # current table is correctly preserved.
4910 CHECK_CONTINUATION([resubmit], [10], [0],
4911 [table=0 in_port=1 actions=pause 2 pause resubmit(,1) pause 10 pause
4912 table=1 in_port=1 actions=pause 3 pause resubmit(,2) pause 9 pause
4913 table=2 in_port=1 actions=pause 4 pause resubmit(,3) pause 8 pause
4914 table=3 in_port=1 actions=pause 5 pause resubmit:55 pause 7 pause
4915 table=3 in_port=55 actions=pause 6 pause])
4917 # Check that the action set is preserved across pause/resume.
4918 CHECK_CONTINUATION([action set], [3], [0],
4919 [in_port=1 actions=1 pause resubmit(,1) pause 2
4920 table=1 actions=write_actions(3)])
4922 # Check that metadata and the stack used by push and pop is preserved
4923 # across pause/resume.
4924 CHECK_CONTINUATION([data stack], [3], [0],
4925 [in_port=1 actions=pause dnl
4926 set_field:1->reg0 dnl
4928 set_field:2->reg1 dnl
4930 output:NXM_NX_REG0[[]] dnl
4932 push:NXM_NX_REG1[[]] dnl
4934 pop:NXM_NX_REG2[[]] dnl
4936 output:NXM_NX_REG2[[]] dnl
4940 # Check that mirror output occurs once and once only, even if
4941 # separated by pause/resume.
4942 CHECK_CONTINUATION([mirroring], [5], [0],
4943 [in_port=1 actions=pause 2 pause 3 pause 4 pause], [],
4945 set Bridge br0 mirrors=@m --\
4946 --id=@p2 get Port p2 --\
4947 --id=@p3 get Port p3 --\
4948 --id=@p4 get Port p4 --\
4949 --id=@p5 get Port p5 --\
4950 --id=@m create Mirror name=mymirror select_dst_port=@p2,@p3,@p4 output_port=@p5])
4952 # Check that pause works in the presence of patch ports.
4953 CHECK_CONTINUATION([patch ports], [4], [1],
4954 [table=0 in_port=1 actions=pause 2 resubmit(,1) pause 4
4955 table=1 in_port=1 actions=pause 3 pause 10 pause],
4956 [table=0 in_port=11 actions=pause 5 pause],
4958 -- add-port br0 patch10 \
4959 -- set interface patch10 type=patch options:peer=patch11 \
4961 -- add-port br1 patch11 \
4962 -- set interface patch11 type=patch options:peer=patch10 \
4966 # Check that pause works after the packet is cloned.
4967 AT_SETUP([ofproto-dpif - continuation after clone])
4968 AT_KEYWORDS([continuations clone pause resume])
4971 add_of_ports --pcap br0 `seq 1 3`
4973 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
4975 AT_DATA([flows.txt], [dnl
4976 table=0 in_port=1 actions=set_field:1->reg1 resubmit(,2)
4977 table=1 reg1=0x5 actions=controller(pause) resubmit(,3)
4978 table=1 reg1=0x1 actions=2
4979 table=2 in_port=1 actions=clone(set_field:5->reg1, resubmit(,1))
4980 table=3 reg1=0x1 actions=3
4981 table=3 reg1=0x5 actions=2
4984 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
4986 AT_CAPTURE_FILE([ofctl_monitor0.log])
4987 ovs-ofctl monitor br0 resume --detach --no-chdir \
4988 --pidfile=ovs-ofctl0.pid 2> ofctl_monitor0.log
4990 # Run a packet through the switch.
4991 AT_CHECK([ovs-appctl netdev-dummy/receive p1 "$flow"], [0], [stdout])
4994 ovs-ofctl dump-flows br0
4996 # The packet should be recieved by port 2 and not port 3
4997 AT_CHECK([test 1 = `$PYTHON "$top_srcdir/utilities/ovs-pcap.in" p2-tx.pcap | wc -l`])
4998 AT_CHECK([test 0 = `$PYTHON "$top_srcdir/utilities/ovs-pcap.in" p3-tx.pcap | wc -l`])
5000 # NXT_RESUMEs should be 1 and reg1 should be set to 0x5.
5001 OVS_WAIT_UNTIL([test 1 = `cat ofctl_monitor*.log | grep NXT_RESUME | grep -c reg1=0x5`])
5006 # Two testcases below are for the ofproto/trace command
5007 # The first one tests all correct syntax:
5008 # ofproto/trace [dp_name] odp_flow [-generate|packet]
5009 # ofproto/trace br_name br_flow [-generate|packet]
5010 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
5011 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
5012 add_of_ports br0 1 2 3
5014 AT_DATA([flows.txt], [dnl
5015 in_port=1 actions=output:2
5016 in_port=2 actions=output:1
5018 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5020 odp_flow="in_port(p1)"
5022 # Test command: ofproto/trace odp_flow with in_port as a name.
5023 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
5024 AT_CHECK([tail -1 stdout], [0], [dnl
5028 odp_flow="in_port(1)"
5029 # Test command: ofproto/trace odp_flow
5030 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
5031 AT_CHECK([tail -1 stdout], [0], [dnl
5035 # Test command: ofproto/trace dp_name odp_flow
5036 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
5037 AT_CHECK([tail -1 stdout], [0], [dnl
5040 # Test commmand: ofproto/trace br_name br_flow
5041 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
5042 AT_CHECK([tail -1 stdout], [0], [dnl
5046 # Delete the inserted flows
5047 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
5048 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
5050 # This section below tests the [-generate] option
5051 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
5052 br_flow="arp,in_port=3,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=ff:ff:ff:ff:ff:ff"
5054 # Test command: ofproto/trace odp_flow
5055 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
5056 # Check for no MAC learning entry
5057 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5061 # Test command: ofproto/trace br_name br_flow
5062 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
5063 # Check for no MAC learning entry
5064 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5068 # Test command: ofproto/trace odp_flow -generate
5069 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
5070 # Check for the MAC learning entry
5071 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5073 3 0 50:54:00:00:00:05 ?
5076 # Test command: ofproto/trace dp_name odp_flow -generate
5077 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
5078 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
5079 -generate], [0], [stdout])
5080 # Check for both MAC learning entries
5081 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5083 3 0 50:54:00:00:00:05 ?
5084 1 0 50:54:00:00:00:06 ?
5087 # Test command: ofproto/trace br_name br_flow -generate
5088 AT_CHECK([ovs-appctl ofproto/trace br0 \
5089 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
5090 -generate], [0], [stdout])
5091 # Check for both MAC learning entries.
5092 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5094 3 0 50:54:00:00:00:05 ?
5095 1 0 50:54:00:00:00:06 ?
5096 2 0 50:54:00:00:00:07 ?
5099 # This section beflow tests the [packet] option
5100 # The ovs-tcpundump of packets between port1 and port2
5101 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
5102 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
5104 # Construct the MAC learning table
5105 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
5106 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
5107 -generate], [0], [stdout])
5109 # Construct the MAC learning table
5110 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
5111 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
5112 -generate], [0], [stdout])
5114 # Test command: ofproto/trace odp_flow packet
5115 AT_CHECK([ovs-appctl ofproto/trace \
5116 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
5117 AT_CHECK([tail -1 stdout], [0], [dnl
5120 AT_CHECK([head -n 3 stdout], [0], [dnl
5121 Flow: pkt_mark=0x2,skb_priority=0x1,arp,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_op=0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
5126 # Test command: ofproto/trace dp_name odp_flow packet
5127 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
5128 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
5129 AT_CHECK([tail -1 stdout], [0], [dnl
5132 AT_CHECK([head -n 3 stdout], [0], [dnl
5133 Flow: pkt_mark=0x2,skb_priority=0x1,arp,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_op=0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
5138 # Test command: ofproto/trace br_name br_flow packet
5139 AT_CHECK([ovs-appctl ofproto/trace br0 \
5140 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
5141 AT_CHECK([tail -1 stdout], [0], [dnl
5144 AT_CHECK([head -n 3 stdout], [0], [dnl
5145 Flow: pkt_mark=0x1,skb_priority=0x2,arp,in_port=2,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_op=0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
5153 # The second test tests the corner cases
5154 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
5156 add_of_ports br0 1 2
5159 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
5160 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
5162 generate="-generate"
5163 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
5165 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
5171 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
5173 AT_CHECK([tail -2 stderr], [0], [dnl
5174 Cannot find the datapath
5175 ovs-appctl: ovs-vswitchd: server returned an error
5178 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
5184 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
5186 AT_CHECK([tail -2 stderr], [0], [dnl
5187 Cannot find the datapath
5188 ovs-appctl: ovs-vswitchd: server returned an error
5191 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
5197 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
5199 AT_CHECK([tail -2 stderr], [0], [dnl
5200 Cannot find the datapath
5201 ovs-appctl: ovs-vswitchd: server returned an error
5204 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
5210 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
5212 AT_CHECK([tail -2 stderr], [0], [dnl
5213 Cannot find the datapath
5214 ovs-appctl: ovs-vswitchd: server returned an error
5217 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
5223 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
5225 AT_CHECK([tail -2 stderr], [0], [dnl
5227 ovs-appctl: ovs-vswitchd: server returned an error
5230 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
5236 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
5238 AT_CHECK([tail -2 stderr], [0], [dnl
5239 Must specify bridge name
5240 ovs-appctl: ovs-vswitchd: server returned an error
5243 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
5244 AT_CHECK([ovs-appctl ofproto/trace \
5245 ovs-dummy "$odp_flow" garbage_option],
5246 [2], [stdout],[stderr])
5247 AT_CHECK([tail -2 stderr], [0], [dnl
5248 Trailing garbage in packet data
5249 ovs-appctl: ovs-vswitchd: server returned an error
5252 # Test incorrect command: ofproto/trace with 0 argument
5253 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
5254 AT_CHECK([tail -2 stderr], [0], [dnl
5255 "ofproto/trace" command requires at least 1 arguments
5256 ovs-appctl: ovs-vswitchd: server returned an error
5262 # The third test checks that the output of "ovs-dpctl -m" is valid to trace.
5263 AT_SETUP([ofproto-dpif - ofproto/trace from dpctl output])
5264 OVS_VSWITCHD_START([dnl
5265 set Open_vSwitch . other_config:max-idle=10000 \
5266 -- add-port br0 p1 -- set Interface p1 type=dummy])
5268 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
5269 ovs-appctl revalidator/wait
5270 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows1.txt])
5272 odp_flow=`cat dp_flows1.txt`
5273 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
5281 Final flow: <cleared>
5283 Datapath actions: drop
5286 dnl Now, try again without megaflows:
5287 ovs-appctl upcall/disable-megaflows
5289 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
5290 ovs-appctl revalidator/wait
5291 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows2.txt])
5293 odp_flow=`cat dp_flows2.txt`
5294 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
5302 Final flow: <cleared>
5304 Datapath actions: drop
5310 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
5312 add_of_ports br0 1 2 3
5314 AT_DATA([flows.txt], [dnl
5315 in_port=1 actions=output:2
5316 in_port=2 actions=output:1
5318 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5320 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
5321 AT_CHECK([tail -1 stdout], [0], [dnl
5322 Datapath actions: push_vlan(vid=123,pcp=0),2
5329 m4_define([OFPROTO_TRACE],
5331 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
5332 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
5334 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
5337 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
5340 AT_SETUP([ofproto-dpif - MAC learning])
5341 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
5342 add_of_ports br0 1 2 3
5344 arp='eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
5346 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
5349 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
5353 # Check for the MAC learning entry.
5354 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5356 3 0 50:54:00:00:00:05 ?
5359 # Trace a packet arrival destined for the learned MAC.
5360 # (This will also learn a MAC.)
5363 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
5367 # Check for both MAC learning entries.
5368 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5370 3 0 50:54:00:00:00:05 ?
5371 1 0 50:54:00:00:00:06 ?
5374 # Trace a packet arrival that updates the first learned MAC entry.
5377 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
5381 # Check that the MAC learning entry was updated.
5382 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5384 1 0 50:54:00:00:00:06 ?
5385 2 0 50:54:00:00:00:05 ?
5388 # Add another bridge.
5392 -- set bridge br1 datapath-type=dummy])
5393 add_of_ports br1 4 5
5395 # Trace some packet arrivals in br1 to create MAC learning entries there too.
5398 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
5403 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
5407 # Check that the MAC learning entries were added.
5408 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5410 4 0 50:54:00:00:00:06 ?
5411 5 0 50:54:00:00:00:07 ?
5414 # Delete port p1 and see that its MAC learning entry disappeared, and
5415 # that the MAC learning entry for the same MAC was also deleted from br1.
5416 AT_CHECK([ovs-vsctl del-port p1])
5417 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5419 2 0 50:54:00:00:00:05 ?
5421 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5423 5 0 50:54:00:00:00:07 ?
5429 AT_SETUP([ofproto-dpif - MAC table overflow])
5431 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
5432 add_of_ports br0 1 2 3
5434 arp='eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
5436 AT_CHECK([ovs-appctl time/stop])
5438 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
5439 for i in 0 1 2 3 4 5 6 7 8 9; do
5442 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
5445 ovs-appctl time/warp 1000
5448 # Check for the MAC learning entries.
5449 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
5451 3 0 50:54:00:00:00:00
5452 3 0 50:54:00:00:00:01
5453 3 0 50:54:00:00:00:02
5454 3 0 50:54:00:00:00:03
5455 3 0 50:54:00:00:00:04
5456 3 0 50:54:00:00:00:05
5457 3 0 50:54:00:00:00:06
5458 3 0 50:54:00:00:00:07
5459 3 0 50:54:00:00:00:08
5460 3 0 50:54:00:00:00:09
5464 # Trace another ARP packet on another MAC.
5467 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
5471 # Check that the new one chased the oldest one out of the table.
5472 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
5474 3 0 50:54:00:00:00:01 ?
5475 3 0 50:54:00:00:00:02 ?
5476 3 0 50:54:00:00:00:03 ?
5477 3 0 50:54:00:00:00:04 ?
5478 3 0 50:54:00:00:00:05 ?
5479 3 0 50:54:00:00:00:06 ?
5480 3 0 50:54:00:00:00:07 ?
5481 3 0 50:54:00:00:00:08 ?
5482 3 0 50:54:00:00:00:09 ?
5483 3 0 50:54:00:00:00:10 ?
5489 AT_SETUP([ofproto-dpif - MAC table overflow fairness])
5491 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
5492 add_of_ports br0 1 2 3 4 5 6
5494 arp='eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
5496 AT_CHECK([ovs-appctl time/stop])
5498 # Trace packets with 2 different source MACs arriving on each of the 5
5499 # ports, filling up the 10-entry learning table.
5500 for i in 0 1 2 3 4 5 6 7 8 9; do
5502 ovs-appctl ofproto/trace ovs-dummy "in_port($p),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp" -generate
5503 ovs-appctl time/warp 1000
5506 # Check for the MAC learning entries.
5507 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
5509 1 0 50:54:00:00:00:00
5510 1 0 50:54:00:00:00:01
5511 2 0 50:54:00:00:00:02
5512 2 0 50:54:00:00:00:03
5513 3 0 50:54:00:00:00:04
5514 3 0 50:54:00:00:00:05
5515 4 0 50:54:00:00:00:06
5516 4 0 50:54:00:00:00:07
5517 5 0 50:54:00:00:00:08
5518 5 0 50:54:00:00:00:09
5522 # Now trace 16 new MACs on another port.
5523 for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
5524 ovs-appctl ofproto/trace ovs-dummy "in_port(6),eth(src=50:54:00:00:0$i:ff,dst=ff:ff:ff:ff:ff:ff),$arp" -generate
5525 ovs-appctl time/warp 1000
5528 # Check the results.
5530 # Our eviction algorithm on overflow is that an arbitrary (but deterministic)
5531 # one of the ports with the most learned MACs loses the least recently used
5532 # one. Thus, the new port will end up with 3 MACs, 3 of the old ports with 1
5533 # MAC each, and the other 2 of the old ports with 2 MACs each.
5535 # (If someone changes lib/heap.c to do something different with equal-priority
5536 # nodes, then the output below could change, but it would still follow the
5537 # rules explained above.)
5538 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
5540 1 0 50:54:00:00:00:01
5541 2 0 50:54:00:00:00:03
5542 3 0 50:54:00:00:00:04
5543 3 0 50:54:00:00:00:05
5544 4 0 50:54:00:00:00:07
5545 5 0 50:54:00:00:00:08
5546 5 0 50:54:00:00:00:09
5547 6 0 50:54:00:00:0d:ff
5548 6 0 50:54:00:00:0e:ff
5549 6 0 50:54:00:00:0f:ff
5555 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR)
5557 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
5558 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
5559 [AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5560 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5562 on_exit 'kill `cat test-sflow.pid`'
5563 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
5564 AT_CAPTURE_FILE([sflow.log])
5565 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
5566 ovs-appctl time/stop
5568 add_of_ports br0 1 2
5570 set Interface br0 options:ifindex=1002 -- \
5571 set Interface p1 options:ifindex=1004 -- \
5572 set Interface p2 options:ifindex=1003 -- \
5573 set Bridge br0 sflow=@sf -- \
5574 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
5575 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
5577 dnl open with ARP packets to seed the bridge-learning. The output
5578 dnl ifIndex numbers should be reported predictably after that.
5579 dnl Since we set sampling=1 we should see all of these packets
5580 dnl reported. Sorting the output by data-source and seqNo makes
5581 dnl it deterministic. Ensuring that we send at least two packets
5582 dnl into each port means we get to check the seq nos are
5583 dnl incrementing correctly.
5584 dnl because packets from different ports can be handled by separate
5585 dnl threads, put some sleeps
5587 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.2,tip=192.168.0.1,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
5589 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:07,tha=00:00:00:00:00:00)'
5591 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
5593 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'
5594 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x86dd),ipv6(src=fe80::1,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
5596 dnl sleep long enough to get more than one counter sample
5597 dnl from each datasource so we can check sequence numbers
5598 ovs-appctl time/warp 2000 100
5600 OVS_APP_EXIT_AND_WAIT([test-sflow])
5602 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5623 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-05-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-05-C0-A8-00-02-00-00-00-00-00-00-C0-A8-00-01
5643 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-07-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-07-C0-A8-00-01-00-00-00-00-00-00-C0-A8-00-02
5663 hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-01-C0-A8-00-02-08-00-F7-FF-00-00-00-00
5683 hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-02-C0-A8-00-01-00-00-FF-FF-00-00-00-00
5703 hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-67-00-00-00-00-00-0A-80-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-01-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-02
5706 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'ETHCOUNTERS|IFCOUNTERS|ERROR|PORTNAME|OPENFLOWPORT' | head -24 | sed 's/ /\
5709 dot3StatsAlignmentErrors=4294967295
5710 dot3StatsFCSErrors=4294967295
5711 dot3StatsSingleCollisionFrames=4294967295
5712 dot3StatsMultipleCollisionFrames=4294967295
5713 dot3StatsSQETestErrors=4294967295
5714 dot3StatsDeferredTransmissions=4294967295
5715 dot3StatsLateCollisions=4294967295
5716 dot3StatsExcessiveCollisions=4294967295
5717 dot3StatsInternalMacTransmitErrors=4294967295
5718 dot3StatsCarrierSenseErrors=4294967295
5719 dot3StatsFrameTooLongs=4294967295
5720 dot3StatsInternalMacReceiveErrors=4294967295
5721 dot3StatsSymbolErrors=4294967295
5723 dot3StatsAlignmentErrors=4294967295
5724 dot3StatsFCSErrors=4294967295
5725 dot3StatsSingleCollisionFrames=4294967295
5726 dot3StatsMultipleCollisionFrames=4294967295
5727 dot3StatsSQETestErrors=4294967295
5728 dot3StatsDeferredTransmissions=4294967295
5729 dot3StatsLateCollisions=4294967295
5730 dot3StatsExcessiveCollisions=4294967295
5731 dot3StatsInternalMacTransmitErrors=4294967295
5732 dot3StatsCarrierSenseErrors=4294967295
5733 dot3StatsFrameTooLongs=4294967295
5734 dot3StatsInternalMacReceiveErrors=4294967295
5735 dot3StatsSymbolErrors=4294967295
5737 dot3StatsAlignmentErrors=4294967295
5738 dot3StatsFCSErrors=4294967295
5739 dot3StatsSingleCollisionFrames=4294967295
5740 dot3StatsMultipleCollisionFrames=4294967295
5741 dot3StatsSQETestErrors=4294967295
5742 dot3StatsDeferredTransmissions=4294967295
5743 dot3StatsLateCollisions=4294967295
5744 dot3StatsExcessiveCollisions=4294967295
5745 dot3StatsInternalMacTransmitErrors=4294967295
5746 dot3StatsCarrierSenseErrors=4294967295
5747 dot3StatsFrameTooLongs=4294967295
5748 dot3StatsInternalMacReceiveErrors=4294967295
5749 dot3StatsSymbolErrors=4294967295
5751 dot3StatsAlignmentErrors=4294967295
5752 dot3StatsFCSErrors=4294967295
5753 dot3StatsSingleCollisionFrames=4294967295
5754 dot3StatsMultipleCollisionFrames=4294967295
5755 dot3StatsSQETestErrors=4294967295
5756 dot3StatsDeferredTransmissions=4294967295
5757 dot3StatsLateCollisions=4294967295
5758 dot3StatsExcessiveCollisions=4294967295
5759 dot3StatsInternalMacTransmitErrors=4294967295
5760 dot3StatsCarrierSenseErrors=4294967295
5761 dot3StatsFrameTooLongs=4294967295
5762 dot3StatsInternalMacReceiveErrors=4294967295
5763 dot3StatsSymbolErrors=4294967295
5765 dot3StatsAlignmentErrors=4294967295
5766 dot3StatsFCSErrors=4294967295
5767 dot3StatsSingleCollisionFrames=4294967295
5768 dot3StatsMultipleCollisionFrames=4294967295
5769 dot3StatsSQETestErrors=4294967295
5770 dot3StatsDeferredTransmissions=4294967295
5771 dot3StatsLateCollisions=4294967295
5772 dot3StatsExcessiveCollisions=4294967295
5773 dot3StatsInternalMacTransmitErrors=4294967295
5774 dot3StatsCarrierSenseErrors=4294967295
5775 dot3StatsFrameTooLongs=4294967295
5776 dot3StatsInternalMacReceiveErrors=4294967295
5777 dot3StatsSymbolErrors=4294967295
5779 dot3StatsAlignmentErrors=4294967295
5780 dot3StatsFCSErrors=4294967295
5781 dot3StatsSingleCollisionFrames=4294967295
5782 dot3StatsMultipleCollisionFrames=4294967295
5783 dot3StatsSQETestErrors=4294967295
5784 dot3StatsDeferredTransmissions=4294967295
5785 dot3StatsLateCollisions=4294967295
5786 dot3StatsExcessiveCollisions=4294967295
5787 dot3StatsInternalMacTransmitErrors=4294967295
5788 dot3StatsCarrierSenseErrors=4294967295
5789 dot3StatsFrameTooLongs=4294967295
5790 dot3StatsInternalMacReceiveErrors=4294967295
5791 dot3StatsSymbolErrors=4294967295
5803 in_multicasts=4294967295
5804 in_broadcasts=4294967295
5805 in_discards=4294967295
5806 in_errors=4294967295
5807 in_unknownprotos=4294967295
5810 out_multicasts=4294967295
5811 out_broadcasts=4294967295
5812 out_discards=4294967295
5813 out_errors=4294967295
5826 in_multicasts=4294967295
5827 in_broadcasts=4294967295
5828 in_discards=4294967295
5829 in_errors=4294967295
5830 in_unknownprotos=4294967295
5833 out_multicasts=4294967295
5834 out_broadcasts=4294967295
5835 out_discards=4294967295
5836 out_errors=4294967295
5849 in_multicasts=4294967295
5850 in_broadcasts=4294967295
5851 in_discards=4294967295
5852 in_errors=4294967295
5853 in_unknownprotos=4294967295
5856 out_multicasts=4294967295
5857 out_broadcasts=4294967295
5858 out_discards=4294967295
5859 out_errors=4294967295
5872 in_multicasts=4294967295
5873 in_broadcasts=4294967295
5874 in_discards=4294967295
5875 in_errors=4294967295
5876 in_unknownprotos=4294967295
5879 out_multicasts=4294967295
5880 out_broadcasts=4294967295
5881 out_discards=4294967295
5882 out_errors=4294967295
5895 in_multicasts=4294967295
5896 in_broadcasts=4294967295
5897 in_discards=4294967295
5898 in_errors=4294967295
5899 in_unknownprotos=4294967295
5902 out_multicasts=4294967295
5903 out_broadcasts=4294967295
5904 out_discards=4294967295
5905 out_errors=4294967295
5918 in_multicasts=4294967295
5919 in_broadcasts=4294967295
5920 in_discards=4294967295
5921 in_errors=4294967295
5922 in_unknownprotos=4294967295
5925 out_multicasts=4294967295
5926 out_broadcasts=4294967295
5927 out_discards=4294967295
5928 out_errors=4294967295
5931 datapath_id=18364758544493064720
5934 datapath_id=18364758544493064720
5937 datapath_id=18364758544493064720
5940 datapath_id=18364758544493064720
5943 datapath_id=18364758544493064720
5946 datapath_id=18364758544493064720
5962 AT_SETUP([ofproto-dpif - basic truncate action])
5964 add_of_ports br0 1 2 3 4 5
5966 AT_CHECK([ovs-vsctl -- set Interface p1 type=dummy options:pcap=p1.pcap])
5967 AT_CHECK([ovs-vsctl -- set Interface p2 type=dummy options:pstream=punix:p2.sock])
5968 AT_CHECK([ovs-vsctl -- set Interface p3 type=dummy options:stream=unix:p2.sock])
5969 AT_CHECK([ovs-vsctl -- set Interface p4 type=dummy options:pstream=punix:p4.sock])
5970 AT_CHECK([ovs-vsctl -- set Interface p5 type=dummy options:stream=unix:p4.sock])
5972 AT_DATA([flows.txt], [dnl
5973 in_port=3,actions=drop
5974 in_port=5,actions=drop
5975 in_port=1,actions=output(port=2,max_len=64),output:4
5977 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5979 dnl Datapath actions
5980 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=4,ttl=128,frag=no),tcp(src=8,dst=9)'], [0], [stdout])
5981 AT_CHECK([tail -1 stdout], [0],
5982 [Datapath actions: trunc(64),2,4
5985 dnl An 170 byte packet
5986 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '000c29c8a0a4005056c0000808004500009cb4a6000040019003c0a8da01c0a8da640800cb5fa762000556f431ad0009388e08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f'])
5988 AT_CHECK([ovs-ofctl parse-pcap p1.pcap], [0], [dnl
5989 icmp,in_port=ANY,vlan_tci=0x0000,dl_src=00:50:56:c0:00:08,dl_dst=00:0c:29:c8:a0:a4,nw_src=192.168.218.1,nw_dst=192.168.218.100,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0
5992 AT_CHECK([ovs-appctl revalidator/purge], [0])
5993 dnl packet with truncated size
5994 AT_CHECK([ovs-ofctl dump-flows br0 | grep "in_port=3" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
5997 dnl packet with original size
5998 AT_CHECK([ovs-ofctl dump-flows br0 | grep "in_port=5" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
6002 dnl More complicated case
6003 AT_CHECK([ovs-ofctl del-flows br0])
6004 AT_DATA([flows.txt], [dnl
6005 in_port=3,actions=drop
6006 in_port=5,actions=drop
6007 in_port=1,actions=output(port=2,max_len=64),output(port=2,max_len=128),output(port=4,max_len=60),output:2,output:4
6009 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6011 dnl Datapath actions
6012 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=4,ttl=128,frag=no),tcp(src=8,dst=9)'], [0], [stdout])
6013 AT_CHECK([tail -1 stdout], [0],
6014 [Datapath actions: trunc(64),2,trunc(128),2,trunc(60),4,2,4
6017 dnl An 170 byte packet
6018 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '000c29c8a0a4005056c0000808004500009cb4a6000040019003c0a8da01c0a8da640800cb5fa762000556f431ad0009388e08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f'])
6020 AT_CHECK([ovs-appctl revalidator/purge], [0])
6021 dnl packet size: 64 + 128 + 170 = 362
6022 AT_CHECK([ovs-ofctl dump-flows br0 | grep "in_port=3" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
6025 dnl packet size: 60 + 170 = 230
6026 AT_CHECK([ovs-ofctl dump-flows br0 | grep "in_port=5" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
6031 AT_CHECK([ovs-ofctl add-flow br0 'actions=output(port=ALL,max_len=100)'], [1], [], [dnl
6032 ovs-ofctl: output to unsupported truncate port: ALL
6038 AT_SETUP([ofproto-dpif - truncate and output to patch port])
6039 OVS_VSWITCHD_START([add-br br1 \
6040 -- set bridge br1 datapath-type=dummy fail-mode=secure \
6041 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 ofport_request=1 \
6042 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
6046 AT_CHECK([ovs-ofctl add-flow br0 actions='output(port=1,max_len=100),output:2'])
6047 AT_CHECK([ovs-ofctl add-flow br1 actions=NORMAL])
6049 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
6051 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
6053 dnl the output(port=1,max_len=100) fails the translation, only output:2 in datapath
6054 AT_CHECK([grep "output_trunc does not support patch port [[0-9]]*" stdout], [0], [stdout])
6059 AT_SETUP([ofproto-dpif - truncate and output to gre tunnel])
6060 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
6061 options:remote_ip=1.1.1.1 options:local_ip=2.2.2.2 \
6062 options:key=5 ofport_request=1\
6063 -- add-port br0 p2 -- set Interface p2 type=dummy \
6065 AT_DATA([flows.txt], [dnl
6066 actions=output(max_len=100, port=1)
6068 OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
6069 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6071 AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0], [dnl
6072 br0 65534/100: (dummy-internal)
6073 p1 1/1: (gre: key=5, local_ip=2.2.2.2, remote_ip=1.1.1.1)
6078 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=4,ttl=128,frag=no),tcp(src=8,dst=9)'], [0], [stdout])
6079 AT_CHECK([tail -1 stdout], [0],
6080 [Datapath actions: trunc(100),set(tunnel(tun_id=0x5,src=2.2.2.2,dst=1.1.1.1,ttl=64,flags(df|key))),1
6086 AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv4 collector])
6087 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1])
6090 AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv6 collector])
6091 AT_SKIP_IF([test $HAVE_IPV6 = no])
6092 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]])
6095 dnl Test sFlow LAG structures
6096 AT_SETUP([ofproto-dpif - sFlow packet sampling - LACP structures])
6097 AT_SKIP_IF([test "$IS_WIN32" = "yes"])
6098 OVS_VSWITCHD_START([dnl
6099 add-bond br0 bond p1 p2 -- \
6100 set Port bond lacp=active bond-mode=active-backup \
6101 other_config:lacp-time="fast" \
6102 other_config:lacp-system-id=11:22:33:44:55:66 \
6103 other_config:lacp-system-priority=54321 -- \
6104 set Interface p1 type=dummy \
6105 other_config:lacp-port-id=11 \
6106 other_config:lacp-port-priority=111 \
6107 other_config:lacp-aggregation-key=3333 -- \
6108 set Interface p2 type=dummy \
6109 other_config:lacp-port-id=22 \
6110 other_config:lacp-port-priority=222 \
6111 other_config:lacp-aggregation-key=3333 ])
6113 on_exit 'kill `cat test-sflow.pid`'
6114 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
6115 AT_CAPTURE_FILE([sflow.log])
6116 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
6118 ovs-appctl time/stop
6121 set Interface p1 options:ifindex=1003 -- \
6122 set Bridge br0 sflow=@sf -- \
6123 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
6124 header=128 sampling=1 polling=1
6126 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
6127 AT_CHECK([ovs-appctl time/warp 2000 100], [0], [ignore])
6128 AT_CHECK([ovs-appctl revalidator/purge], [0])
6130 OVS_APP_EXIT_AND_WAIT([test-sflow])
6131 AT_CHECK([[sort sflow.log | $EGREP 'LACPCOUNTERS|ERROR' | head -n 1 | sed 's/ /\
6134 sysID=11:22:33:44:55:66
6135 partnerID=00:00:00:00:00:00
6142 markerPDUsRx=4294967295
6143 markerRespPDUsRx=4294967295
6144 unknownRx=4294967295
6147 markerPDUsTx=4294967295
6148 markerRespPDUsTx=4294967295
6153 AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel set])
6154 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
6155 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
6157 dnl set up sFlow logging
6158 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
6159 AT_CAPTURE_FILE([sflow.log])
6160 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
6161 ovs-appctl time/stop
6163 OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
6164 AT_CHECK([ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre \
6165 options:remote_ip=1.1.1.1 options:key=456 ofport_request=3])
6166 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy ofport_request=4])
6168 AT_CHECK([ovs-ofctl add-flow br0 action=3])
6172 set Bridge br0 sflow=@sf -- \
6173 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
6174 header=128 sampling=1 polling=0
6176 dnl introduce a packet that will be flooded to the tunnel
6177 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.10.10.2,dst=10.10.10.1,proto=1,tos=1,ttl=128,frag=no),icmp(type=8,code=0)'])
6179 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
6180 for i in `seq 1 30`; do
6181 ovs-appctl time/warp 100
6184 OVS_APP_EXIT_AND_WAIT([test-sflow])
6186 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
6192 tunnel4_out_length=0
6193 tunnel4_out_protocol=47
6194 tunnel4_out_src=0.0.0.0
6195 tunnel4_out_dst=1.1.1.1
6196 tunnel4_out_src_port=0
6197 tunnel4_out_dst_port=0
6198 tunnel4_out_tcp_flags=0
6216 hdr=50-54-00-00-00-0A-50-54-00-00-00-09-08-00-45-01-00-1C-00-00-00-00-80-01-12-CA-0A-0A-0A-02-0A-0A-0A-01-08-00-F7-FF-00-00-00-00
6222 AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel push])
6223 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
6225 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 options:ifindex=1010])
6227 dnl set up sFlow logging
6228 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
6229 AT_CAPTURE_FILE([sflow.log])
6230 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
6231 ovs-appctl time/stop
6233 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6234 AT_CHECK([ovs-vsctl add-br int-br -- set bridge int-br datapath_type=dummy], [0])
6235 AT_CHECK([ovs-vsctl -- add-port int-br t1 -- set Interface t1 type=gre \
6236 options:remote_ip=1.1.2.92 options:key=456 ofport_request=4\
6237 -- add-port int-br vm1 -- set Interface vm1 type=dummy \
6238 options:ifindex=2011 ofport_request=5
6241 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
6242 dummy@ovs-dummy: hit:0 missed:0
6244 br0 65534/100: (dummy-internal)
6245 p0 1/1: (dummy: ifindex=1010)
6247 int-br 65534/2: (dummy-internal)
6248 t1 4/4: (gre: key=456, remote_ip=1.1.2.92)
6249 vm1 5/3: (dummy: ifindex=2011)
6252 dnl set up route to 1.1.2.92 via br0 and action=normal
6253 AT_CHECK([ovs-appctl netdev-dummy/ip4addr br0 1.1.2.88/24], [0], [OK
6255 AT_CHECK([ovs-appctl ovs/route/add 1.1.2.92/24 br0], [0], [OK
6257 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6259 dnl Prime ARP Cache for 1.1.2.92
6260 AT_CHECK([ovs-appctl netdev-dummy/receive br0 'recirc_id(0),in_port(100),eth(src=f8:bc:12:44:34:b6,dst=ff:ff:ff:ff:ff:ff),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)'])
6262 dnl configure sflow on int-br only
6264 set Bridge int-br sflow=@sf -- \
6265 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
6266 header=128 sampling=1 polling=0
6268 dnl set up route to 192.168.1.2 via br0
6269 AT_CHECK([ovs-appctl netdev-dummy/ip4addr br0 192.168.1.1/16], [0], [OK
6271 AT_CHECK([ovs-appctl ovs/route/add 192.168.0.0/16 br0], [0], [OK
6274 dnl add rule for int-br to force packet onto tunnel. There is no ifindex
6275 dnl for this port so the sFlow output will just report that it went to
6276 dnl 1 output (out_format=2, out_ifindex=1)
6277 AT_CHECK([ovs-ofctl add-flow int-br "actions=4"])
6279 AT_CHECK([ovs-appctl netdev-dummy/receive vm1 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=192.168.1.1,dst=192.168.2.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'])
6281 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
6282 for i in `seq 1 30`; do
6283 ovs-appctl time/warp 100
6286 OVS_APP_EXIT_AND_WAIT([test-sflow])
6288 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
6294 tunnel4_out_length=0
6295 tunnel4_out_protocol=47
6296 tunnel4_out_src=1.1.2.88
6297 tunnel4_out_dst=1.1.2.92
6298 tunnel4_out_src_port=0
6299 tunnel4_out_dst_port=0
6300 tunnel4_out_tcp_flags=0
6318 hdr=50-54-00-00-00-0A-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-80-01-B6-8D-C0-A8-01-01-C0-A8-02-02-08-00-F7-FF-00-00-00-00
6324 AT_SETUP([ofproto-dpif - sFlow packet sampling - MPLS])
6325 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
6327 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6328 add_of_ports br0 1 2
6329 AT_DATA([flows.txt], [dnl
6330 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,set_mpls_label:789,set_mpls_tc:4,set_mpls_ttl:32,2
6331 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
6333 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6335 dnl set up sFlow logging
6336 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
6337 AT_CAPTURE_FILE([sflow.log])
6338 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
6339 ovs-appctl time/stop
6343 set Bridge br0 sflow=@sf -- \
6344 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
6345 header=128 sampling=1 polling=0
6347 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)'])
6348 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)'])
6350 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
6351 for i in `seq 1 30`; do
6352 ovs-appctl time/warp 100
6355 OVS_APP_EXIT_AND_WAIT([test-sflow])
6357 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
6386 hdr=50-54-00-00-00-0A-50-54-00-00-00-09-88-47-00-00-B7-40
6410 hdr=50-54-00-00-00-0A-50-54-00-00-00-09-08-00-45-00-00-14-00-00-00-00-00-00-BA-EB-00-00-00-00-00-00-00-00
6417 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR)
6419 # Test that basic NetFlow reports flow statistics correctly:
6420 # The initial packet of a flow are correctly accounted.
6421 # Later packets within a flow are correctly accounted.
6422 # Flow actions changing (in this case, due to MAC learning)
6423 # cause a record to be sent.
6424 m4_define([CHECK_NETFLOW_EXPIRATION],
6425 [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
6426 add_of_ports br0 1 2
6428 ovs-appctl time/stop
6429 on_exit 'kill `cat test-netflow.pid`'
6430 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
6431 AT_CAPTURE_FILE([netflow.log])
6432 PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
6435 set Bridge br0 netflow=@nf -- \
6436 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
6437 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
6439 for delay in 1000 30000; do
6440 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
6441 sleep 1 # ensure the order in which these two packets are processed
6442 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'
6444 ovs-appctl time/warp $delay
6447 ovs-appctl time/warp 6000
6448 ovs-appctl revalidator/wait
6450 OVS_APP_EXIT_AND_WAIT([test-netflow])
6452 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 42 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
6454 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 42 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
6456 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 84 bytes, ICMP 0:0" netflow.log | wc -l`
6457 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 42 bytes, ICMP 0:0" netflow.log | wc -l`
6458 AT_CHECK([test $separate = 2 || test $combined = 1], [0])])
6460 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv4 collector])
6461 CHECK_NETFLOW_EXPIRATION([127.0.0.1])
6464 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv6 collector])
6465 AT_SKIP_IF([test $HAVE_IPV6 = no])
6466 CHECK_NETFLOW_EXPIRATION([[[::1]]])
6469 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR)
6471 # Test that basic NetFlow reports active expirations correctly.
6472 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
6473 [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
6474 add_of_ports br0 1 2
6476 on_exit 'kill `cat test-netflow.pid`'
6477 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
6478 AT_CAPTURE_FILE([netflow.log])
6479 PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
6482 set Bridge br0 netflow=@nf -- \
6483 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
6484 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
6486 AT_CHECK([ovs-appctl time/stop])
6488 while test $n -le 60; do
6491 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=1234,dst=80)'
6492 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
6494 ovs-appctl time/warp 1000
6497 ovs-appctl time/warp 10000
6499 ovs-appctl revalidator/wait
6501 OVS_APP_EXIT_AND_WAIT([test-netflow])
6503 # Count the number of reported packets:
6504 # - From source to destination before MAC learning kicks in (just one).
6505 # - From source to destination after that.
6506 # - From destination to source.
6514 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
6521 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
6524 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
6527 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
6534 eval $counter=\`expr \$$counter + \$pkts\`
6535 n_recs=`expr $n_recs + 1`
6538 # There should be exactly 1 MAC learning packet,
6539 # exactly 59 other packets in that direction,
6540 # and exactly 60 packets in the other direction.
6541 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
6544 AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv4 collector])
6545 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1])
6548 AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv6 collector])
6549 AT_SKIP_IF([test $HAVE_IPV6 = no])
6550 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]])
6553 dnl In the absence of an IPFIX collector to verify protocol correctness, simply
6554 dnl configure bridge IPFIX and ensure that sample action generation works at the
6556 AT_SETUP([ofproto-dpif - Bridge IPFIX sanity check])
6558 add_of_ports br0 1 2
6560 dnl Sample every packet using bridge-based sampling.
6561 AT_CHECK([ovs-vsctl -- set bridge br0 ipfix=@fix -- \
6562 --id=@fix create ipfix targets=\"127.0.0.1:4739\" \
6563 sampling=1], [0], [ignore])
6565 dnl Send some packets that should be sampled.
6566 for i in `seq 1 3`; do
6567 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)'])
6569 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
6570 flow-dump from non-dpdk interfaces:
6571 packets:2, bytes:68, used:0.001s, actions:userspace(pid=0,ipfix(output_port=4294967295))
6574 AT_CHECK([ovs-appctl revalidator/purge])
6576 dnl Add a slowpath meter. The userspace action should be metered.
6577 AT_CHECK([ovs-ofctl -O OpenFlow13 add-meter br0 'meter=slowpath pktps burst stats bands=type=drop rate=3 burst_size=1'])
6579 dnl Send some packets that should be sampled and metered.
6580 for i in `seq 1 3`; do
6581 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)'])
6583 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
6584 flow-dump from non-dpdk interfaces:
6585 packets:2, bytes:68, used:0.001s, actions:sample(sample=100.0%,actions(meter(0),userspace(pid=0,ipfix(output_port=4294967295))))
6588 dnl Remove the IPFIX configuration.
6589 AT_CHECK([ovs-vsctl clear bridge br0 ipfix])
6590 AT_CHECK([ovs-appctl revalidator/purge])
6592 dnl Send some more packets, to ensure that these are not sampled.
6593 for i in `seq 1 3`; do
6594 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)'])
6596 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
6597 flow-dump from non-dpdk interfaces:
6598 packets:2, bytes:68, used:0.001s, actions:drop
6601 OVS_VSWITCHD_STOP(["/sending to collector failed/d"])
6604 dnl Bridge IPFIX statistics check
6605 AT_SETUP([ofproto-dpif - Bridge IPFIX statistics check])
6607 add_of_ports br0 1 2
6609 dnl Negative test check.
6610 AT_CHECK([ovs-ofctl dump-ipfix-bridge br0], [0], [dnl
6611 OFPT_ERROR (xid=0x2): NXST_NOT_CONFIGURED
6612 NXST_IPFIX_BRIDGE request (xid=0x2):
6615 dnl Sample every packet using bridge-based sampling.
6616 AT_CHECK([ovs-vsctl -- set bridge br0 ipfix=@fix -- \
6617 --id=@fix create ipfix targets=\"127.0.0.1:4739\" \
6618 sampling=1], [0], [ignore])
6620 dnl Send some packets that should be sampled.
6621 for i in `seq 1 20`; do
6622 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)'])
6625 dnl There are 4 extra IPFIX template packets.
6626 AT_CHECK([ovs-ofctl dump-ipfix-bridge br0 | sed 's/tx pkts=[[0-9]]*/tx pkts=24/' | sed 's/tx errs=[[0-9]]*/tx errs=0/'], [0], [dnl
6627 NXST_IPFIX_BRIDGE reply (xid=0x2):
6628 bridge ipfix: flows=20, current flows=0, sampled pkts=20, ipv4 ok=0, ipv6 ok=0, tx pkts=24
6629 pkts errs=20, ipv4 errs=20, ipv6 errs=0, tx errs=0
6632 dnl Remove the IPFIX configuration.
6633 AT_CHECK([ovs-vsctl clear bridge br0 ipfix])
6634 AT_CHECK([ovs-appctl revalidator/purge])
6636 dnl Send some more packets, to ensure that these are not sampled.
6637 for i in `seq 1 2`; do
6638 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)'])
6640 AT_CHECK([ovs-ofctl dump-ipfix-bridge br0], [0], [dnl
6641 OFPT_ERROR (xid=0x2): NXST_NOT_CONFIGURED
6642 NXST_IPFIX_BRIDGE request (xid=0x2):
6645 OVS_VSWITCHD_STOP(["/sending to collector failed/d"])
6648 dnl Flow IPFIX sanity check
6649 AT_SETUP([ofproto-dpif - Flow IPFIX sanity check])
6651 add_of_ports br0 1 2
6653 # Check for regression against a bug where an invalid target caused an
6654 # assertion failure and a crash.
6655 AT_CHECK([ovs-vsctl -- --id=@br0 get Bridge br0 \
6656 -- --id=@ipfix create IPFIX targets=\"xyzzy\" \
6657 -- --id=@cs create Flow_Sample_Collector_Set id=0 bridge=@br0 ipfix=@ipfix],
6660 AT_CHECK([ovs-vsctl -- --id=@br0 get Bridge br0 \
6661 -- --id=@ipfix create IPFIX targets=\"127.0.0.1:4739\" \
6662 -- --id=@cs create Flow_Sample_Collector_Set id=1 bridge=@br0 ipfix=@ipfix],
6665 AT_DATA([flows.txt], [dnl
6666 in_port=1, actions=sample(probability=65535,collector_set_id=1),output:2
6669 AT_CHECK([ovs-ofctl add-flows br0 flows.txt], [0], [ignore])
6671 dnl Send some packets that should be sampled.
6672 for i in `seq 1 3`; do
6673 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)'])
6675 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
6676 flow-dump from non-dpdk interfaces:
6677 packets:2, bytes:68, used:0.001s, actions:userspace(pid=0,flow_sample(probability=65535,collector_set_id=1,obs_domain_id=0,obs_point_id=0,output_port=4294967295)),2
6680 dnl Remove the flow which contains sample action.
6681 AT_CHECK([ovs-ofctl del-flows br0 in_port=1], [0], [ignore])
6682 AT_CHECK([ovs-appctl revalidator/purge])
6684 dnl Send some more packets, to ensure that these are not sampled.
6685 for i in `seq 1 3`; do
6686 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)'])
6688 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
6689 flow-dump from non-dpdk interfaces:
6690 packets:2, bytes:68, used:0.001s, actions:drop
6693 OVS_VSWITCHD_STOP(["/sending to collector failed/d
6698 dnl Flow IPFIX sanity check for tunnel set
6699 AT_SETUP([ofproto-dpif - Flow IPFIX sanity check - tunnel set])
6700 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
6701 options:remote_ip=1.1.1.1 options:local_ip=2.2.2.2 \
6702 options:key=5 ofport_request=1\
6703 -- add-port br0 p2 -- set Interface p2 type=stt \
6704 options:remote_ip=1.1.1.2 options:local_ip=2.2.2.3 \
6705 options:key=6 ofport_request=2\
6706 -- add-port br0 p3 -- set Interface p3 type=dummy \
6708 -- --id=@br0 get Bridge br0 \
6709 -- --id=@ipfix create IPFIX targets=\"127.0.0.1:4739\" \
6710 -- --id=@cs create Flow_Sample_Collector_Set id=1 bridge=@br0 ipfix=@ipfix],
6715 OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
6717 dnl Add openflow sample action without sampling_port.
6718 AT_DATA([flows.txt], [dnl
6719 in_port=3, actions=sample(probability=65535,collector_set_id=1),output:1
6721 AT_CHECK([ovs-ofctl add-flows br0 flows.txt], [0], [ignore])
6723 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.10.10.2,dst=10.10.10.1,proto=1,tos=1,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
6724 AT_CHECK([tail -1 stdout], [0], [dnl
6725 Datapath actions: userspace(pid=0,flow_sample(probability=65535,collector_set_id=1,obs_domain_id=0,obs_point_id=0,output_port=4294967295)),set(tunnel(tun_id=0x5,src=2.2.2.2,dst=1.1.1.1,tos=0x1,ttl=64,flags(df|key))),1
6728 dnl Remove the flow which contains sample action.
6729 AT_CHECK([ovs-ofctl del-flows br0 in_port=3], [0], [ignore])
6730 AT_CHECK([ovs-appctl revalidator/purge])
6732 dnl Add openflow sample action with sampling_port which is
6733 dnl equal to output port.
6734 AT_DATA([flows2.txt], [dnl
6735 in_port=3, actions=sample(probability=65535,collector_set_id=1,sampling_port=1),output:1
6737 AT_CHECK([ovs-ofctl add-flows br0 flows2.txt], [0], [ignore])
6739 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.10.10.2,dst=10.10.10.1,proto=1,tos=1,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
6740 dnl Make sure flow sample action in datapath is behind set tunnel
6741 dnl action at egress point of tunnel port.
6742 AT_CHECK([tail -1 stdout], [0], [dnl
6743 Datapath actions: set(tunnel(tun_id=0x5,src=2.2.2.2,dst=1.1.1.1,tos=0x1,ttl=64,flags(df|key))),userspace(pid=0,flow_sample(probability=65535,collector_set_id=1,obs_domain_id=0,obs_point_id=0,output_port=1),tunnel_out_port=1),1
6746 dnl Remove the flow which contains sample action.
6747 AT_CHECK([ovs-ofctl del-flows br0 in_port=3], [0], [ignore])
6748 AT_CHECK([ovs-appctl revalidator/purge])
6750 dnl Add a rule with two sample actions and each sample action
6751 dnl has a sampling_port
6752 AT_DATA([flows3.txt], [dnl
6753 in_port=3, actions=sample(probability=65535,collector_set_id=1,sampling_port=1),output:1,sample(probability=65535,collector_set_id=1,sampling_port=2),output:2
6755 AT_CHECK([ovs-ofctl add-flows br0 flows3.txt], [0], [ignore])
6757 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.10.10.2,dst=10.10.10.1,proto=1,tos=1,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
6758 dnl Make sure flow sample action in datapath is behind set tunnel
6759 dnl action at egress point of tunnel port.
6760 AT_CHECK([tail -1 stdout], [0], [dnl
6761 Datapath actions: set(tunnel(tun_id=0x5,src=2.2.2.2,dst=1.1.1.1,tos=0x1,ttl=64,flags(df|key))),userspace(pid=0,flow_sample(probability=65535,collector_set_id=1,obs_domain_id=0,obs_point_id=0,output_port=1),tunnel_out_port=1),1,set(tunnel(tun_id=0x6,src=2.2.2.3,dst=1.1.1.2,tos=0x1,ttl=64,tp_dst=7471,flags(df|key))),userspace(pid=0,flow_sample(probability=65535,collector_set_id=1,obs_domain_id=0,obs_point_id=0,output_port=7471),tunnel_out_port=7471),7471
6764 dnl Remove the flow which contains sample action.
6765 AT_CHECK([ovs-ofctl del-flows br0 in_port=3], [0], [ignore])
6766 AT_CHECK([ovs-vsctl destroy Flow_Sample_Collector_Set 1], [0], [ignore])
6771 AT_SETUP([ofproto-dpif - clone action])
6773 add_of_ports br0 1 2 3 4
6775 AT_DATA([flows.txt], [dnl
6776 in_port=1, ip, actions=clone(set_field:192.168.3.3->ip_src),clone(set_field:192.168.4.4->ip_dst,output:2),clone(mod_dl_src:80:81:81:81:81:81,set_field:192.168.5.5->ip_dst,output:3),output:4
6778 AT_CHECK([ovs-ofctl add-flows br0 flows.txt], [0], [ignore])
6780 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.10.10.2,dst=10.10.10.1,proto=1,tos=1,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
6782 AT_CHECK([tail -1 stdout], [0], [dnl
6783 Datapath actions: clone(set(ipv4(src=10.10.10.2,dst=192.168.4.4)),2),clone(set(eth(src=80:81:81:81:81:81)),set(ipv4(src=10.10.10.2,dst=192.168.5.5)),3),4
6786 dnl Test flow xlate openflow clone action without using datapath clone action.
6787 AT_CHECK([ovs-appctl dpif/disable-dp-clone br0], [0],
6788 [Datapath clone action disabled for bridge br0
6791 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.10.10.2,dst=10.10.10.1,proto=1,tos=1,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
6793 AT_CHECK([tail -1 stdout], [0], [dnl
6794 Datapath actions: sample(sample=100.0%,actions(set(ipv4(src=10.10.10.2,dst=192.168.4.4)),2)),sample(sample=100.0%,actions(set(eth(src=80:81:81:81:81:81)),set(ipv4(src=10.10.10.2,dst=192.168.5.5)),3)),4
6800 dnl Flow based IPFIX statistics check
6801 AT_SETUP([ofproto-dpif - Flow IPFIX statistics check])
6803 add_of_ports br0 1 2
6805 dnl Negative test check.
6806 AT_CHECK([ovs-ofctl dump-ipfix-flow br0], [0], [dnl
6807 OFPT_ERROR (xid=0x2): NXST_NOT_CONFIGURED
6808 NXST_IPFIX_FLOW request (xid=0x2):
6811 AT_CHECK([ovs-vsctl -- --id=@br0 get Bridge br0 \
6812 -- --id=@ipfix create IPFIX targets=\"127.0.0.1:4739\" \
6813 -- --id=@cs create Flow_Sample_Collector_Set id=1 bridge=@br0 ipfix=@ipfix],
6816 AT_DATA([flows.txt], [dnl
6817 in_port=1, actions=sample(probability=65535,collector_set_id=1),output:2
6820 AT_CHECK([ovs-ofctl add-flows br0 flows.txt], [0], [ignore])
6822 dnl Send some packets that should be sampled.
6823 for i in `seq 1 20`; do
6824 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)'])
6827 dnl There are 4 extra IPFIX template packets.
6828 AT_CHECK([ovs-ofctl dump-ipfix-flow br0 | sed 's/tx pkts=[[0-9]]*/tx pkts=24/' | sed 's/tx errs=[[0-9]]*/tx errs=0/'], [0], [dnl
6829 NXST_IPFIX_FLOW reply (xid=0x2): 1 ids
6830 id 1: flows=20, current flows=0, sampled pkts=20, ipv4 ok=0, ipv6 ok=0, tx pkts=24
6831 pkts errs=20, ipv4 errs=20, ipv6 errs=0, tx errs=0
6834 dnl Remove the flow which contains sample action.
6835 AT_CHECK([ovs-ofctl del-flows br0 in_port=1], [0], [ignore])
6836 AT_CHECK([ovs-vsctl destroy Flow_Sample_Collector_Set 1], [0], [ignore])
6837 AT_CHECK([ovs-appctl revalidator/purge])
6839 dnl Send some more packets, to ensure that these are not sampled.
6840 for i in `seq 1 3`; do
6841 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)'])
6843 AT_CHECK([ovs-ofctl dump-ipfix-flow br0], [0], [dnl
6844 OFPT_ERROR (xid=0x2): NXST_NOT_CONFIGURED
6845 NXST_IPFIX_FLOW request (xid=0x2):
6848 OVS_VSWITCHD_STOP(["/sending to collector failed/d"])
6851 AT_SETUP([ofproto-dpif - flow stats])
6853 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
6854 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
6856 ovs-appctl time/stop
6858 for i in `seq 1 10`; do
6859 ovs-appctl netdev-dummy/receive br0 'in_port(0),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no)'
6862 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
6863 AT_CHECK([ovs-appctl revalidator/purge], [0])
6864 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
6865 AT_CHECK([strip_xids < stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
6866 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
6867 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=540, idle_age=1, ip actions=NORMAL
6872 AT_SETUP([ofproto-dpif - flow stats reset_counts])
6874 flow="ip,actions=NORMAL"
6876 ovs-appctl time/stop
6878 AT_CHECK([ovs-ofctl add-flow br0 $flow])
6880 warp_and_dump_NXM () {
6881 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
6882 AT_CHECK([ovs-appctl revalidator/purge], [0])
6884 AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br0], [0], [stdout])
6885 if [[ $5 -gt 0 ]]; then
6886 expected=" cookie=0x0, duration=$1s, table=0, n_packets=$2, n_bytes=$3, idle_age=$4, hard_age=$5, ip actions=NORMAL"
6888 expected=" cookie=0x0, duration=$1s, table=0, n_packets=$2, n_bytes=$3, idle_age=$4, ip actions=NORMAL"
6890 AT_CHECK_UNQUOTED([strip_xids < stdout | sed -n 's/duration=\([[0-9]]*\)\.*[[0-9]]*s/duration=\1s/p' | sort], [0], [dnl
6895 warp_and_dump_OF () {
6896 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
6897 AT_CHECK([ovs-appctl revalidator/purge], [0])
6899 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 dump-flows br0], [0], [stdout])
6900 if [[ $1 -lt 13 -o "$5X" = "X" ]]; then
6901 expected=" cookie=0x0, duration=$2s, table=0, n_packets=$3, n_bytes=$4, ip actions=NORMAL"
6903 expected=" cookie=0x0, duration=$2s, table=0, n_packets=$3, n_bytes=$4, $5 ip actions=NORMAL"
6905 AT_CHECK_UNQUOTED([strip_xids < stdout | sed -n 's/duration=\([[0-9]]*\)\.*[[0-9]]*s/duration=\1s/p' | sort], [0], [dnl
6911 ovs-appctl netdev-dummy/receive br0 'in_port(0),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no)'
6914 # OpenFlow 1.0, implicit reset_counts
6916 warp_and_dump_NXM 1 1 54 1
6917 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow10 add-flow br0 $flow])
6918 # add-flow resets duration and counts,
6919 # but idle age is inherited from the old flow
6920 warp_and_dump_NXM 1 0 0 2
6923 warp_and_dump_NXM 2 1 54 1
6924 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow10 mod-flows br0 $flow])
6925 # mod-flows resets hard_age, but not counts
6926 # but duration and idle_age is inherited from the old flow
6927 warp_and_dump_NXM 3 1 54 2 1
6929 # OpenFlow 1.1, implicit reset_counts
6931 warp_and_dump_OF 11 4 2 108
6932 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow11 add-flow br0 $flow])
6933 # add-flow resets duration and counts,
6934 # but idle age is inherited from the old flow
6935 warp_and_dump_NXM 1 0 0 2
6936 warp_and_dump_OF 11 2 0 0
6939 warp_and_dump_OF 11 3 1 54
6940 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow11 mod-flows br0 $flow])
6941 # mod-flows resets hard_age, but not counts
6942 # but duration and idle_age is inherited from the old flow
6943 warp_and_dump_NXM 4 1 54 2 1
6944 warp_and_dump_OF 11 5 1 54
6946 # OpenFlow 1.2, explicit reset_counts
6948 warp_and_dump_OF 12 6 2 108
6949 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 add-flow br0 $flow])
6950 # add-flow without flags resets duration, but not counts,
6951 # idle age is inherited from the old flow
6952 warp_and_dump_NXM 1 2 108 2
6953 warp_and_dump_OF 12 2 2 108
6956 warp_and_dump_OF 12 3 3 162
6957 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 mod-flows br0 $flow])
6958 # mod-flows without flags does not reset duration nor counts,
6959 # idle age is inherited from the old flow
6960 warp_and_dump_NXM 4 3 162 2 1
6961 warp_and_dump_OF 12 5 3 162
6964 warp_and_dump_OF 12 6 4 216
6965 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 add-flow br0 reset_counts,$flow])
6966 # add-flow with reset_counts resets both duration and counts,
6967 # idle age is inherited from the old flow
6968 warp_and_dump_NXM 1 0 0 2
6969 warp_and_dump_OF 12 2 0 0
6972 warp_and_dump_OF 12 3 1 54
6973 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 mod-flows br0 reset_counts,$flow])
6974 # mod-flows with reset_counts resets counts, but not duration,
6975 # idle age is inherited from the old flow
6976 warp_and_dump_NXM 4 0 0 2 1
6977 warp_and_dump_OF 12 5 0 0
6979 # OpenFlow > 1.3, explicit reset_counts
6980 flow_mods_reset_counts () {
6981 # Reset to a known state
6982 AT_CHECK([ovs-ofctl add-flow br0 $flow])
6985 warp_and_dump_OF $1 1 1 54 reset_counts
6986 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 $flow])
6987 # add-flow without flags resets duration, but not counts,
6988 # idle age is inherited from the old flow
6989 warp_and_dump_NXM 1 1 54 2
6990 warp_and_dump_OF $1 2 1 54
6993 warp_and_dump_OF $1 3 2 108
6994 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 $flow])
6995 # mod-flows without flags does not reset duration nor counts,
6996 # idle age is inherited from the old flow
6997 warp_and_dump_NXM 4 2 108 2 1
6998 warp_and_dump_OF $1 5 2 108
7001 warp_and_dump_OF $1 6 3 162
7002 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 reset_counts,$flow])
7003 # add-flow with reset_counts resets both duration and counts,
7004 # idle age is inherited from the old flow
7005 warp_and_dump_NXM 1 0 0 2
7006 warp_and_dump_OF $1 2 0 0 reset_counts
7009 warp_and_dump_OF $1 3 1 54 reset_counts
7010 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 reset_counts,$flow])
7011 # mod-flows with reset_counts resets counts, but not duration,
7012 # idle age is inherited from the old flow
7013 warp_and_dump_NXM 4 0 0 2 1
7014 warp_and_dump_OF $1 5 0 0 reset_counts
7016 # Modify flow having reset_counts flag without reset_counts
7018 warp_and_dump_OF $1 6 1 54 reset_counts
7019 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 $flow])
7020 warp_and_dump_NXM 7 1 54 2 1
7021 warp_and_dump_OF $1 8 1 54 reset_counts
7023 # Add flow having reset_counts flag without reset_counts
7025 warp_and_dump_OF $1 9 2 108 reset_counts
7026 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 $flow])
7027 warp_and_dump_NXM 1 2 108 2
7028 warp_and_dump_OF $1 2 2 108
7030 # Modify flow w/o reset_counts flag with a flow_mod having reset_counts
7032 warp_and_dump_OF $1 3 3 162
7033 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 reset_counts,$flow])
7034 warp_and_dump_NXM 4 0 0 2 1
7035 warp_and_dump_OF $1 5 0 0
7038 # OpenFlow versions >= 1.3 should behave the same way
7039 flow_mods_reset_counts 13
7040 flow_mods_reset_counts 14
7041 flow_mods_reset_counts 15
7046 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
7048 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
7049 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
7051 ovs-appctl time/stop
7053 for i in `seq 1 10`; do
7054 ovs-appctl netdev-dummy/receive br0 'in_port(0),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no)'
7057 ovs-appctl time/warp 100
7058 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
7059 ovs-appctl time/warp 1000
7061 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
7062 AT_CHECK([strip_xids < stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
7063 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
7064 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=540, idle_age=1, ip actions=NORMAL
7069 AT_SETUP([ofproto-dpif - idle_age and hard_age increase over time])
7072 # get_ages DURATION HARD IDLE
7074 # Fetch the flow duration, hard age, and idle age into the variables
7075 # whose names are given as arguments. Rounds DURATION down to the
7076 # nearest integer. If hard_age doesn't appear in the output, sets
7077 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
7080 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
7082 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
7083 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
7084 AS_VAR_COPY([$1], [duration])
7086 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
7087 if test X"$hard" = X; then
7090 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
7092 AS_VAR_COPY([$2], [hard])
7094 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
7095 if test X"$idle" = X; then
7098 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
7100 AS_VAR_COPY([$3], [idle])
7103 # Add a flow and get its initial hard and idle age.
7104 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
7105 get_ages duration1 hard1 idle1
7107 ovs-appctl time/stop
7108 # Warp time forward by 10 seconds, then modify the flow's actions.
7109 ovs-appctl time/warp 10000
7110 get_ages duration2 hard2 idle2
7111 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
7113 # Warp time forward by 10 seconds.
7114 ovs-appctl time/warp 10000
7115 get_ages duration3 hard3 idle3
7117 # Warp time forward 10 more seconds, then pass some packets through the flow,
7118 # then warp forward a few more times because idle times are only updated
7120 ovs-appctl time/warp 10000
7121 ovs-appctl netdev-dummy/receive br0 'in_port(0),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
7122 ovs-appctl time/warp 3000 1000
7124 get_ages duration4 hard4 idle4
7126 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
7127 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
7128 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
7130 # Duration should increase steadily over time.
7131 AT_CHECK([test $duration1 -lt $duration2])
7132 AT_CHECK([test $duration2 -lt $duration3])
7133 AT_CHECK([test $duration3 -lt $duration4])
7135 # Hard age should be "none" initially because it's the same as flow_duration,
7136 # then it should increase.
7137 AT_CHECK([test $hard1 = none])
7138 AT_CHECK([test $hard2 = none])
7139 AT_CHECK([test $hard3 != none])
7140 AT_CHECK([test $hard4 != none])
7141 AT_CHECK([test $hard3 -lt $hard4])
7143 # Idle age should increase from 1 to 2 to 3, then decrease.
7144 AT_CHECK([test $idle1 -lt $idle2])
7145 AT_CHECK([test $idle2 -lt $idle3])
7146 AT_CHECK([test $idle3 -gt $idle4])
7148 # Check some invariant relationships.
7149 AT_CHECK([test $duration1 = $idle1])
7150 AT_CHECK([test $duration2 = $idle2])
7151 AT_CHECK([test $duration3 = $idle3])
7152 AT_CHECK([test $idle3 -gt $hard3])
7153 AT_CHECK([test $idle4 -lt $hard4])
7154 AT_CHECK([test $hard4 -lt $duration4])
7159 AT_SETUP([ofproto-dpif - fin_timeout])
7161 ovs-appctl time/stop
7162 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
7163 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
7165 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
7168 # Check that a TCP SYN packet does not change the timeout. (Because
7169 # flow stats updates are mainly what implements the fin_timeout
7170 # feature, we warp forward a couple of times to ensure that flow stats
7171 # run before re-checking the flow table.)
7172 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
7173 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
7176 AT_CHECK([ovs-appctl revalidator/purge], [0])
7177 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
7179 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
7181 # Check that a TCP FIN packet does change the timeout.
7182 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
7183 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
7186 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
7188 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
7193 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
7194 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
7195 add_of_ports br0 1 2
7198 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
7205 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
7206 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy], [], [],
7207 [--dummy-numa="0,0,0,0,1,1,1,1"])
7208 add_pmd_of_ports br0 1 2
7211 AT_CHECK([ovs-appctl dpif/show | sed 's/\(dummy-pmd: \).*)/\1<cleared>)/'], [0], [dnl
7212 dummy@ovs-dummy: hit:0 missed:0
7214 br0 65534/100: (dummy-internal)
7215 p1 1/1: (dummy-pmd: <cleared>)
7216 p2 2/2: (dummy-pmd: <cleared>)
7218 br1 65534/101: (dummy-internal)
7224 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
7225 # bump max-idle to avoid the flows being reclaimed behind us
7226 OVS_VSWITCHD_START([add-br br1 -- \
7227 set bridge br1 datapath-type=dummy fail-mode=secure -- \
7228 set Open_vSwitch . other_config:max-idle=10000], [], [],
7229 [--dummy-numa="0,0,0,0,1,1,1,1"])
7231 add_pmd_of_ports br0 2
7234 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
7235 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'])
7236 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=0,ttl=64,frag=no),icmp(type=8,code=0)'])
7237 ovs-appctl revalidator/wait
7238 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
7239 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
7240 recirc_id(0),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
7243 AT_CHECK([ovs-appctl dpif/dump-flows br1 | strip_ufid | strip_used | sort], [0], [dnl
7244 recirc_id(0),in_port(3),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
7247 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | strip_ufid | strip_used | sort], [0], [dnl
7248 skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(p1),packet_type(ns=0,id=0),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),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
7249 skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(p2),packet_type(ns=0,id=0),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),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
7252 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | strip_ufid | strip_used | sort], [0], [dnl
7253 skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(p3),packet_type(ns=0,id=0),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),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
7259 m4_define([OFPROTO_DPIF_GET_FLOW],
7260 [AT_SETUP([ofproto-dpif - ovs-appctl dpif/get-flow$1])
7262 OVS_VSWITCHD_START([add-br br1 -- \
7263 set bridge br1 datapath-type=dummy fail-mode=secure -- \
7264 set Open_vSwitch . other_config:max-idle=10000], [], [],
7265 [m4_if([$1], [], [], [--dummy-numa="0,0,0,0,1,1,1,1"])])
7267 func=`echo -n "$1_" | cut -c 4-`
7268 add_${func}of_ports br0 1 2
7270 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
7271 ovs-appctl revalidator/wait
7272 AT_CHECK([ovs-appctl dpif/dump-flows -m br0], [0], [stdout])
7274 UFID=`sed -n 's/\(ufid:[[-0-9a-fA-F]]*\).*/\1/p' stdout`
7275 AT_CHECK([ovs-appctl dpctl/get-flow $UFID], [0], [dnl
7276 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
7282 OFPROTO_DPIF_GET_FLOW([])
7283 OFPROTO_DPIF_GET_FLOW([ - pmd])
7285 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
7286 OVS_VSWITCHD_START([dnl
7287 add-port br0 p1 -- set Interface p1 type=dummy
7289 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7290 on_exit 'kill `cat ovs-ofctl.pid`'
7292 AT_CAPTURE_FILE([ofctl_monitor.log])
7293 AT_DATA([flows.txt], [dnl
7294 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
7295 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8847,controller
7297 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7299 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
7300 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
7302 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
7303 dnl 60:66:66:66:66:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 74: MPLS (label 20, exp 0, ttl 32)
7304 dnl (label 20, exp 0, [S], ttl 32)
7305 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
7306 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
7308 for dl_src in 00 01; do
7309 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"])
7311 sleep 1 # wait for the datapath flow installed
7312 AT_CHECK_UNQUOTED([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
7313 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=60:66:66:66:66:00),eth_type(0x8847),mpls(label=20,tc=0,ttl=32,bos=0,label=20,tc=0,ttl=32,bos=1), actions:userspace(pid=0,slow_path(controller))
7314 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=60:66:66:66:66:01),eth_type(0x8847),mpls(label=20/0x0,tc=0/0,ttl=32/0x0,bos=0/1,label=20/0xfffff,tc=0/7,ttl=32/0xff,bos=1/1), actions:userspace(pid=0,slow_path(controller))
7321 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
7322 OVS_VSWITCHD_START([dnl
7323 add-port br0 p1 -- set Interface p1 type=dummy
7325 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7326 on_exit 'kill `cat ovs-ofctl.pid`'
7328 AT_CAPTURE_FILE([ofctl_monitor.log])
7329 AT_DATA([flows.txt], [dnl
7330 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
7331 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8847,controller
7333 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7335 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
7336 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
7337 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
7339 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
7340 dnl 60:66:66:66:66:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 74: MPLS (label 20, exp 0, ttl 32)
7341 dnl (label 20, exp 0, ttl 32)
7342 dnl (label 20, exp 0, ttl 32)
7343 dnl (label 20, exp 0, [S], ttl 32)
7344 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
7345 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
7347 for dl_src in 00 01; do
7348 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"])
7350 sleep 1 # wait for the datapath flow installed
7351 AT_CHECK_UNQUOTED([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
7352 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=60:66:66:66:66:00),eth_type(0x8847),mpls(label=20,tc=0,ttl=32,bos=0,label=20,tc=0,ttl=32,bos=1), actions:userspace(pid=0,slow_path(controller))
7353 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=60:66:66:66:66:01),eth_type(0x8847),mpls(label=20/0x0,tc=0/0,ttl=32/0x0,bos=0/1,label=20/0xfffff,tc=0/7,ttl=32/0xff,bos=1/1), actions:userspace(pid=0,slow_path(controller))
7359 AT_SETUP([ofproto-dpif - patch ports])
7360 OVS_VSWITCHD_START([add-br br1 \
7361 -- set bridge br1 datapath-type=dummy fail-mode=secure \
7362 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
7363 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
7368 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
7370 AT_CHECK([ovs-appctl time/stop])
7371 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7373 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
7374 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
7376 for i in $(seq 1 10); do
7377 ovs-appctl netdev-dummy/receive br0 'in_port(100),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
7378 if [[ $i -eq 1 ]]; then
7383 for i in $(seq 1 5); do
7384 ovs-appctl netdev-dummy/receive br1 'in_port(101),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
7385 if [[ $i -eq 1 ]]; then
7390 AT_CHECK([ovs-appctl time/warp 500], [0],
7393 sleep 1 # wait for log writer
7395 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
7396 dummy@ovs-dummy: hit:13 missed:2
7398 br0 65534/100: (dummy-internal)
7400 pbr0 1/none: (patch: peer=pbr1)
7402 br1 65534/101: (dummy-internal)
7404 pbr1 1/none: (patch: peer=pbr0)
7407 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
7408 recirc_id(0),in_port(100),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:101,3,2
7409 recirc_id(0),in_port(101),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:100,2,3
7412 AT_CHECK([grep -e 'in_port(100).*packets:9' ovs-vswitchd.log | strip_ufid | filter_flow_dump], [0], [dnl
7413 skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(100),packet_type(ns=0,id=0),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),icmp(type=8/0,code=0/0), packets:9, bytes:378, used:0.0s, actions:101,3,2
7415 AT_CHECK([grep -e 'in_port(101).*packets:4' ovs-vswitchd.log | strip_ufid | filter_flow_dump], [0], [dnl
7416 skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(101),packet_type(ns=0,id=0),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),icmp(type=8/0,code=0/0), packets:4, bytes:168, used:0.0s, actions:100,2,3
7419 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
7420 OFPST_PORT reply (xid=0x4): 1 ports
7421 port 1: rx pkts=5, bytes=210, drop=?, errs=?, frame=?, over=?, crc=?
7422 tx pkts=10, bytes=420, drop=?, errs=?, coll=?
7425 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
7426 OFPST_PORT reply (xid=0x4): 1 ports
7427 port 1: rx pkts=10, bytes=420, drop=?, errs=?, frame=?, over=?, crc=?
7428 tx pkts=5, bytes=210, drop=?, errs=?, coll=?
7434 AT_SETUP([ofproto-dpif - patch ports - stack])
7435 OVS_VSWITCHD_START([add-br br1 \
7436 -- set bridge br1 datapath-type=dummy fail-mode=secure \
7437 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
7438 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
7443 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
7445 AT_CHECK([ovs-appctl time/stop])
7446 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7448 AT_CHECK([ovs-ofctl add-flow br0 "ip actions=push:OXM_OF_IN_PORT[[0..31]],output:1,pop:OXM_OF_IPV4_SRC[[0..31]],output:2"])
7449 # Try to pop from empty stack, and push and leave data to stack.
7450 AT_CHECK([ovs-ofctl add-flow br1 "ip actions=pop:OXM_OF_IPV4_DST[[0..31]],push:NXM_NX_REG1[[0..31]],LOCAL"])
7452 ovs-appctl netdev-dummy/receive br0 'in_port(100),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
7454 AT_CHECK([ovs-appctl time/warp 500], [0],
7458 OVS_WAIT_UNTIL([test `grep flow_add ovs-vswitchd.log | wc -l` -ge 1])
7460 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
7461 dummy@ovs-dummy: hit:0 missed:1
7463 br0 65534/100: (dummy-internal)
7465 pbr0 1/none: (patch: peer=pbr1)
7467 br1 65534/101: (dummy-internal)
7469 pbr1 1/none: (patch: peer=pbr0)
7472 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
7473 recirc_id(0),in_port(100),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.168.0.1,frag=no), actions:101,set(ipv4(src=255.255.255.254)),2
7476 AT_CHECK([grep -e '|ofproto_dpif_xlate|WARN|' ovs-vswitchd.log | sed "s/^.*|WARN|//"], [0], [dnl
7477 stack underflow while processing icmp,in_port=LOCAL,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0 on bridge br1
7480 OVS_VSWITCHD_STOP(["/stack underflow/d"])
7483 AT_SETUP([ofproto-dpif - port duration])
7484 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
7485 add_of_ports br0 1 2
7487 ovs-appctl time/stop
7488 ovs-appctl time/warp 10000
7490 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
7491 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
7500 dnl ----------------------------------------------------------------------
7501 AT_BANNER([ofproto-dpif -- megaflows])
7503 AT_SETUP([ofproto-dpif megaflow - port classification])
7505 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7506 add_of_ports br0 1 2
7507 AT_DATA([flows.txt], [dnl
7508 table=0 in_port=1 actions=output(2)
7510 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7511 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)'])
7513 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)'])
7515 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7516 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions: <del>
7521 AT_SETUP([ofproto-dpif megaflow - L2 classification])
7523 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7524 add_of_ports br0 1 2
7525 AT_DATA([flows.txt], [dnl
7526 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
7528 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7529 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)'])
7530 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)'])
7532 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7533 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no), actions: <del>
7534 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no), actions: <del>
7539 AT_SETUP([ofproto-dpif megaflow - L3 classification])
7541 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7542 add_of_ports br0 1 2
7543 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], [])
7544 AT_DATA([flows.txt], [dnl
7545 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
7547 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7548 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)'])
7549 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)'])
7551 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7552 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,frag=no), actions: <del>
7553 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.4,proto=1,frag=no), actions: <del>
7558 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
7560 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7561 add_of_ports br0 1 2
7562 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], [])
7563 AT_DATA([flows.txt], [dnl
7564 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
7566 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7567 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)'])
7568 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)'])
7570 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7571 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5,frag=no), actions: <del>
7572 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,frag=no), actions: <del>
7577 AT_SETUP([ofproto-dpif megaflow - L4 classification])
7579 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7580 add_of_ports br0 1 2
7581 AT_DATA([flows.txt], [dnl
7582 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
7584 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7585 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)'])
7587 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)'])
7589 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7590 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=1,frag=no),icmp(type=8), actions: <del>
7595 m4_define([OFPROTO_DPIF_MEGAFLOW_NORMAL],
7596 [AT_SETUP([ofproto-dpif megaflow - normal$1])
7597 OVS_VSWITCHD_START([], [], [], [m4_if([$1], [], [], [--dummy-numa="0,0,0,0,1,1,1,1"])])
7598 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7599 func=`echo -n "$1_" | cut -c 4-`
7600 add_${func}of_ports br0 1 2
7601 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
7602 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)'])
7603 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)'])
7605 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7606 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
7607 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
7612 OFPROTO_DPIF_MEGAFLOW_NORMAL([])
7613 OFPROTO_DPIF_MEGAFLOW_NORMAL([ - pmd])
7615 AT_SETUP([ofproto-dpif megaflow - mpls])
7617 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7618 add_of_ports br0 1 2
7619 AT_DATA([flows.txt], [dnl
7620 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
7621 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
7623 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7624 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)'])
7625 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)'])
7627 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout_keep_actions], [0], [dnl
7628 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), actions:push_mpls(label=11,tc=3,ttl=64,bos=0,eth_type=0x8847),2
7629 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x8847),mpls(label=11/0x0,tc=3/0,ttl=64/0x0,bos=1/1), actions:pop_mpls(eth_type=0x800),2
7634 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR)
7635 m4_define([CHECK_MEGAFLOW_NETFLOW],
7637 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7638 add_of_ports br0 1 2
7640 dnl NetFlow configuration disables wildcarding relevant fields
7641 on_exit 'kill `cat test-netflow.pid`'
7642 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
7643 AT_CAPTURE_FILE([netflow.log])
7644 PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
7646 set Bridge br0 netflow=@nf -- \
7647 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
7648 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
7650 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
7651 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)'])
7652 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)'])
7654 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7655 recirc_id(0),in_port(1),packet_type(ns=0,id=0),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/0xfc,frag=no),icmp(type=8,code=0), actions: <del>
7656 recirc_id(0),in_port(1),packet_type(ns=0,id=0),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/0xfc,frag=no),icmp(type=8,code=0), actions: <del>
7658 OVS_APP_EXIT_AND_WAIT([test-netflow])
7661 AT_SETUP([ofproto-dpif megaflow - netflow - IPv4 collector])
7662 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
7665 AT_SETUP([ofproto-dpif megaflow - netflow - IPv6 collector])
7666 AT_SKIP_IF([test $HAVE_IPV6 = no])
7667 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
7670 m4_define([OFPROTO_DPIF_MEGAFLOW_NORMAL_ACB_BOND],
7671 [AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding - $1])
7673 [add-port br0 p1 -- set Interface p1 type=$1 ofport_request=1 -- \
7674 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
7675 set interface p2 type=$1 ofport_request=2 -- \
7676 set interface p3 type=$1 ofport_request=3], [], [],
7677 [m4_if([$1], [dummy-pmd], [--dummy-numa="0,0,0,0,1,1,1,1"], [])])
7678 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
7680 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7682 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
7683 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)'])
7684 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)'])
7686 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7687 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
7688 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
7693 OFPROTO_DPIF_MEGAFLOW_NORMAL_ACB_BOND([dummy])
7694 OFPROTO_DPIF_MEGAFLOW_NORMAL_ACB_BOND([dummy-pmd])
7696 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
7698 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
7699 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
7700 set interface p2 type=dummy ofport_request=2 -- \
7701 set interface p3 type=dummy ofport_request=3])
7702 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
7704 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7706 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
7707 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)'])
7708 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)'])
7710 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7711 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
7712 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
7717 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
7718 # Create bond0 on br0 with interfaces p0 and p1
7719 # and bond1 on br1 with interfaces p2 and p3
7720 # with p0 patched to p2 and p1 patched to p3.
7722 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
7723 other-config:lacp-time=fast \
7724 other-config:bond-rebalance-interval=0 -- \
7725 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
7726 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
7728 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
7729 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
7730 fail-mode=secure -- \
7731 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
7732 other-config:lacp-time=fast \
7733 other-config:bond-rebalance-interval=0 -- \
7734 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
7735 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
7737 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
7739 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7741 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
7742 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
7743 ovs-appctl time/stop
7744 ovs-appctl time/warp 5000
7745 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)'])
7746 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)'])
7748 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7749 recirc_id(0),in_port(7),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
7750 recirc_id(0),in_port(7),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
7755 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
7757 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7758 add_of_ports br0 1 2
7759 AT_DATA([flows.txt], [dnl
7760 table=0 in_port=1,ip actions=resubmit(90)
7761 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
7763 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7764 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)'])
7765 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)'])
7767 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7768 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no), actions: <del>
7769 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no), actions: <del>
7774 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
7776 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7777 add_of_ports br0 1 2
7778 AT_DATA([flows.txt], [dnl
7779 table=0 in_port=1,ip actions=resubmit(,1)
7780 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
7782 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7783 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)'])
7784 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=
7785 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
7787 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7788 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no), actions: <del>
7789 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no), actions: <del>
7794 AT_SETUP([ofproto-dpif megaflow - goto_table action])
7796 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7797 add_of_ports br0 1 2
7798 AT_DATA([flows.txt], [dnl
7799 table=0 in_port=1,ip actions=goto_table(1)
7800 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
7802 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
7803 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)'])
7804 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)'])
7806 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7807 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no), actions: <del>
7808 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no), actions: <del>
7813 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
7814 AT_KEYWORDS([mirror mirrors mirroring])
7816 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7817 add_of_ports br0 1 2 3
7819 set Bridge br0 mirrors=@m --\
7820 --id=@p3 get Port p3 --\
7821 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
7823 AT_DATA([flows.txt], [dnl
7824 in_port=1 actions=output:2
7826 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7827 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)'])
7829 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)'])
7831 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7832 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions: <del>
7837 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
7839 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7840 add_of_ports br0 1 2 3
7842 set Bridge br0 mirrors=@m --\
7843 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
7844 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
7846 AT_DATA([flows.txt], [dnl
7847 in_port=1 actions=output:2
7849 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7850 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))'])
7851 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)'])
7853 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7854 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions: <del>
7855 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x8100),vlan(vid=11,pcp=7/0x0),encap(eth_type(0x0800),ipv4(frag=no)), actions: <del>
7860 AT_SETUP([ofproto-dpif megaflow - move action])
7862 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7863 add_of_ports br0 1 2
7864 AT_DATA([flows.txt], [dnl
7865 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
7866 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
7867 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
7869 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7870 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)'])
7871 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)'])
7873 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7874 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.2,frag=no), actions: <del>
7875 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.4,frag=no), actions: <del>
7880 AT_SETUP([ofproto-dpif megaflow - push action])
7882 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7883 add_of_ports br0 1 2
7884 AT_DATA([flows.txt], [dnl
7885 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
7887 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7888 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)'])
7889 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)'])
7891 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7892 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.2,frag=no), actions: <del>
7893 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.4,frag=no), actions: <del>
7898 AT_SETUP([ofproto-dpif megaflow - learning])
7900 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7901 add_of_ports br0 1 2
7902 AT_DATA([flows.txt], [dnl
7903 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
7905 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7906 ovs-appctl time/stop
7907 # We send each packet twice because the first packet in each flow causes the
7908 # flow table to change and thus revalidations, which (depending on timing)
7909 # can keep a megaflow from being installed. The revalidations are done by
7910 # the second iteration, allowing the flows to be installed.
7912 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)'])
7913 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)'])
7914 ovs-appctl time/warp 100
7917 dnl The original flow is missing due to a revalidation.
7918 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7919 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no), actions: <del>
7920 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no), actions: <del>
7925 AT_SETUP([ofproto-dpif megaflow - tunnels])
7927 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
7928 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7929 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
7930 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
7931 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
7933 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
7934 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
7935 ofport_request=4 options:key=flow])
7936 AT_DATA([flows.txt], [dnl
7937 in_port=1,actions=output(2)
7938 in_port=3,actions=output(4)
7940 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7941 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
7942 dnl will cause the packet to be dropped.
7943 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=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
7945 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=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
7946 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)'])
7948 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)'])
7950 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7951 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(tos=0xfd/0x3,frag=no), actions: <del>
7952 recirc_id(0),in_port(3),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(tos=0x1,ttl=64,frag=no), actions: <del>
7953 recirc_id(0),in_port(3),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(tos=0xfd,ttl=128,frag=no), actions: <del>
7958 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
7960 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7961 add_of_ports br0 1 2
7962 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], [])
7963 AT_DATA([flows.txt], [dnl
7964 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
7966 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7967 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)'])
7968 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)'])
7970 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7971 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,frag=no), actions: <del>
7972 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.4,proto=1,ttl=64,frag=no), actions: <del>
7977 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
7979 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7980 add_of_ports br0 1 2
7981 AT_DATA([flows.txt], [dnl
7982 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
7984 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7985 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)'])
7986 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)'])
7988 dnl The first packet is essentially a no-op, as the new destination MAC is the
7989 dnl same as the original. The second entry actually updates the destination
7991 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
7992 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions:2
7993 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions:set(eth(dst=50:54:00:00:00:0a)),2
7998 m4_define([OFPROTO_DPIF_MEGAFLOW_DISABLED],
7999 [AT_SETUP([ofproto-dpif megaflow - disabled$1])
8000 OVS_VSWITCHD_START([], [], [], [m4_if([$1], [], [], [--dummy-numa="0,0,0,0,1,1,1,1"])])
8001 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8002 func=`echo -n "$1_" | cut -c 4-`
8003 add_${func}of_ports br0 1 2
8004 AT_DATA([flows.txt], [dnl
8005 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
8006 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
8008 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
8010 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
8012 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
8013 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
8014 for i in 1 2 3 4; do
8015 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)'])
8016 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)'])
8017 if [[ $i -eq 1 ]]; then
8022 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
8023 skb_priority(0),skb_mark(0),ct_state(-new-est-rel-rpl-inv-trk-snat-dnat),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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
8024 skb_priority(0),skb_mark(0),ct_state(-new-est-rel-rpl-inv-trk-snat-dnat),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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
8026 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_dump | grep 'packets:3'], [0], [dnl
8027 skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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:126, used:0.0s, actions:2
8028 skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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:126, used:0.0s, actions:drop
8033 OFPROTO_DPIF_MEGAFLOW_DISABLED([])
8034 OFPROTO_DPIF_MEGAFLOW_DISABLED([ - pmd])
8036 AT_SETUP([ofproto-dpif - datapath port number change])
8037 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
8040 # Trace a flow that should output to p1.
8041 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
8043 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
8046 # Change p1's port number to 5.
8047 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
8049 # Trace a flow that should output to p1 in its new location.
8050 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
8052 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
8057 # Tests the bundling with various bfd and cfm configurations.
8058 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
8059 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
8060 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
8061 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
8062 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
8063 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
8064 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
8065 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
8066 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
8067 set Interface p0 cfm_mpid=1 -- \
8068 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
8070 ovs-appctl time/stop
8071 # advance the clock to stablize everything.
8072 ovs-appctl time/warp 5000 100
8073 # cfm/show should show 'recv' fault.
8074 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
8077 # bfd/show should show 'up'.
8078 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
8079 Local Session State: up
8080 Remote Session State: up
8081 Local Session State: up
8082 Remote Session State: up
8084 # bond/show should show 'may-enable: true' for all slaves.
8085 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
8092 # now disable the bfd on p1.
8093 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
8094 # advance the clock to stablize everything.
8095 ovs-appctl time/warp 5000 100
8096 # cfm/show should show 'recv' fault.
8097 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
8100 # bfd/show should show 'down'.
8101 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
8102 Local Session State: down
8103 Remote Session State: down
8105 # bond/show should show 'may-enable: false' for p0.
8106 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
8111 # now enable the bfd on p1 and disable bfd on p0.
8112 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
8113 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
8114 # advance the clock to stablize everything.
8115 ovs-appctl time/warp 5000 100
8116 # cfm/show should show 'recv' fault.
8117 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
8120 # bfd/show should show 'down'.
8121 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
8122 Local Session State: down
8123 Remote Session State: down
8125 # bond/show should show 'may-enable: false' for p0 and p1.
8126 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
8136 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
8137 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
8140 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
8142 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
8143 # disable bfd on p0.
8144 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
8146 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
8147 AT_CHECK([sed -e '/^.*ofproto_dpif_monitor.*$/d' < ovs-vswitchd.log > tmp && ovs-appctl vlog/close && mv tmp ovs-vswitchd.log && ovs-appctl vlog/reopen])
8150 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
8152 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
8153 # disable cfm on p0.
8154 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
8156 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
8157 AT_CHECK([sed -e '/^.*ofproto_dpif_monitor.*$/d' < ovs-vswitchd.log > tmp && ovs-appctl vlog/close && mv tmp ovs-vswitchd.log && ovs-appctl vlog/reopen])
8159 # enable both bfd and cfm on p0.
8160 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
8162 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
8163 # disable bfd on p0.
8164 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
8165 # check log, there should not be the log of thread terminated.
8166 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
8168 # reenable bfd on p0.
8169 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
8170 # check log, should still be on log of thread created.
8171 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
8172 monitor thread created
8174 # disable bfd and cfm together.
8175 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
8177 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
8182 # this test helps avoid the deadlock between the main thread and monitor thread.
8183 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
8186 for i in `seq 1 199`
8188 AT_CHECK([ovs-vsctl add-port br0 p$i -- set interface p$i type=gre options:remote_ip=1.2.3.4 options:key=$i bfd:enable=true])
8194 AT_BANNER([ofproto-dpif - flow translation resource limits])
8196 dnl Resubmits to later tables do not count against the depth limit, so we
8197 dnl can do 99 of them even though the maximum depth is 64.
8198 AT_SETUP([ofproto-dpif - forward resubmit])
8200 (for i in `seq 0 99`; do
8202 echo "table=$i, actions=resubmit(,$j)"
8204 echo "table=100, actions=local") > flows
8205 AT_CHECK([ovs-ofctl add-flows br0 flows])
8206 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
8208 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 100
8213 dnl Resubmits to the same or an earlier table count against the depth limit,
8214 dnl so only 64 of them are allowed.
8215 AT_SETUP([ofproto-dpif - backward resubmit])
8217 (echo "table=0, actions=resubmit(,66)"
8218 for i in `seq 2 66`; do
8220 echo "table=$i, actions=resubmit(,$j)"
8222 echo "table=1, actions=local") > flows
8223 AT_CHECK([ovs-ofctl add-flows br0 flows])
8224 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
8226 AT_CHECK([tail -1 stdout], [0],
8227 [Translation failed (Recursion too deep), packet is dropped.
8229 AT_CHECK([grep -c 'over max translation depth 64' stdout],
8232 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
8235 AT_SETUP([ofproto-dpif - infinite resubmit])
8237 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
8238 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
8240 AT_CHECK([tail -1 stdout], [0],
8241 [Translation failed (Recursion too deep), packet is dropped.
8243 AT_CHECK([grep -c 'over max translation depth 64' stdout],
8246 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
8249 AT_SETUP([ofproto-dpif - exponential resubmit chain])
8252 (for i in `seq 1 64`; do
8254 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
8256 echo "in_port=65, actions=local") > flows
8257 AT_CHECK([ovs-ofctl add-flows br0 flows])
8258 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
8259 AT_CHECK([tail -1 stdout], [0],
8260 [Translation failed (Too many resubmits), packet is dropped.
8262 AT_CHECK([grep -c 'over 4096 resubmit actions' stdout], [0], [1
8264 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
8267 AT_SETUP([ofproto-dpif - too many output actions])
8270 (for i in `seq 1 12`; do
8272 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
8274 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
8275 AT_CHECK([ovs-ofctl add-flows br0 flows])
8276 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
8277 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
8280 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' stdout], [0], [1
8282 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
8285 AT_SETUP([ofproto-dpif - stack too deep])
8288 (for i in `seq 1 12`; do
8290 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
8292 push="push:NXM_NX_REG0[[]]"
8293 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
8294 AT_CHECK([ovs-ofctl add-flows br0 flows])
8295 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
8296 AT_CHECK([tail -1 stdout], [0],
8297 [Translation failed (Stack too deep), packet is dropped.
8299 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' stdout], [0], [1
8301 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
8305 AT_SETUP([ofproto-dpif packet-out controller])
8307 add_of_ports br0 1 2
8309 AT_CHECK([ovs-ofctl add-flow br0 'dl_dst=50:54:00:00:00:0a actions=controller'])
8311 AT_CAPTURE_FILE([ofctl_monitor.log])
8312 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8315 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER controller '50540000000a5054000000091234'])
8318 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8319 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8320 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
8321 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8323 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
8324 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8326 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
8327 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8330 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
8331 dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
8335 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
8337 active=1, lookup=0, matched=0
8340 active=0, lookup=0, matched=0
8342 for i in `seq 2 253`; do
8343 printf ' table %d: ditto\n' $i
8345 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
8350 AT_SETUP([ofproto-dpif packet-out controller (patch port)])
8353 add-port br0 p1 -- \
8354 set interface p1 type=patch options:peer=p2 -- \
8356 set bridge br1 datapath-type=dummy -- \
8357 set bridge br1 fail-mode=secure -- \
8358 set bridge br1 protocols='[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13]' -- \
8359 add-port br1 p2 -- \
8360 set interface p2 type=patch options:peer=p1 --])
8362 AT_CAPTURE_FILE([ofctl_monitor.log])
8363 AT_CHECK([ovs-ofctl monitor br1 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8366 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER output:1 '50540000000a5054000000091234'])
8369 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8370 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8371 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
8372 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8374 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
8375 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8377 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
8378 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8381 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
8383 active=0, lookup=0, matched=0
8385 for i in `seq 1 253`; do
8386 printf ' table %d: ditto\n' $i
8388 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
8390 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
8392 active=0, lookup=3, matched=0
8395 active=0, lookup=0, matched=0
8397 for i in `seq 2 253`; do
8398 printf ' table %d: ditto\n' $i
8400 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br1 ], [0], [expout])
8405 AT_SETUP([ofproto-dpif packet-out pipeline match field (OpenFlow 1.5)])
8408 AT_CHECK([ovs-ofctl add-tlv-map br0 "{class=0xffff,type=0,len=8}->tun_metadata2"])
8409 AT_CHECK([ovs-ofctl add-tlv-map br0 "{class=0xffff,type=1,len=4}->tun_metadata3"])
8410 AT_DATA([flows.txt], [dnl
8411 table=0,in_port=1 actions=controller
8412 table=0,tun_id=3 actions=controller
8413 table=0,metadata=5 actions=controller
8414 table=0,reg0=1,reg4=2,reg8=3,reg12=5 actions=controller
8415 table=0,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_gbp_id=0x01,tun_gbp_flags=0x03 actions=controller
8416 table=0,tun_metadata3=0x11 actions=controller
8418 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
8420 AT_CHECK([ovs-ofctl -O OpenFlow15 -P standard monitor br0 --detach --no-chdir --pidfile])
8421 ovs-appctl -t ovs-ofctl ofctl/send 0609000c0123456700000080
8422 ovs-appctl -t ovs-ofctl ofctl/barrier
8423 ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
8424 AT_CAPTURE_FILE([monitor.log])
8426 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=1 packet=0001020304050010203040501111 actions=table"])
8427 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=2,tunnel_id=3 packet=0001020304050010203040502222 actions=table"])
8428 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=2,metadata=5 packet=0001020304050010203040503333 actions=table"])
8429 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=2,reg0=1,reg4=2,reg8=3,reg12=5 packet=0001020304050010203040503333 actions=table"])
8430 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=2,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_gbp_id=0x01,tun_gbp_flags=0x03 packet=0001020304050010203040503333 actions=table"])
8431 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=2,tun_metadata2=0x22,tun_metadata3=0x11 packet=0001020304050010203040503333 actions=table"])
8433 ovs-appctl -t ovs-ofctl ofctl/barrier
8434 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8436 AT_CHECK([sed 's/ (xid=0x[[0-9a-fA-F]]*)//' monitor.log], [0], [dnl
8437 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 in_port=1 (via packet_out) data_len=14 (unbuffered)
8438 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x1111
8439 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 tun_id=0x3,in_port=2 (via packet_out) data_len=14 (unbuffered)
8440 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x2222
8441 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 metadata=0x5,in_port=2 (via packet_out) data_len=14 (unbuffered)
8442 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x3333
8443 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 reg0=0x1,reg4=0x2,reg8=0x3,reg12=0x5,in_port=2 (via packet_out) data_len=14 (unbuffered)
8444 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x3333
8445 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_gbp_id=1,tun_gbp_flags=0x3,in_port=2 (via packet_out) data_len=14 (unbuffered)
8446 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x3333
8447 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 tun_metadata2=0x22,tun_metadata3=0x11,in_port=2 (via packet_out) data_len=14 (unbuffered)
8448 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x3333
8449 OFPT_BARRIER_REPLY (OF1.5):
8455 AT_SETUP([ofproto-dpif packet-out goto_table])
8457 add_of_ports br0 1 2
8459 AT_DATA([flows.txt], [dnl
8460 table=0 dl_dst=50:54:00:00:00:0a actions=goto_table(1)
8461 table=1 dl_dst=50:54:00:00:00:0a actions=controller
8463 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
8465 AT_CAPTURE_FILE([ofctl_monitor.log])
8466 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8469 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(0x1234)'
8472 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
8473 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8474 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8475 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8476 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8478 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8479 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8481 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8482 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8485 AT_CHECK([ovs-appctl revalidator/purge], [0])
8486 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
8487 n_packets=3, n_bytes=42, dl_dst=50:54:00:00:00:0a actions=goto_table:1
8488 table=1, n_packets=3, n_bytes=42, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
8489 OFPST_FLOW reply (OF1.3):
8492 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
8494 active=1, lookup=3, matched=3
8498 active=0, lookup=0, matched=0
8500 for i in `seq 3 253`; do
8501 printf ' table %d: ditto\n' $i
8503 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
8509 AT_SETUP([ofproto-dpif packet-out table-miss (continue)])
8511 add_of_ports br0 1 2
8513 AT_CHECK([ovs-ofctl -O OpenFlow11 add-flow br0 'table=1 dl_dst=50:54:00:00:00:0a actions=controller'])
8514 AT_CHECK([ovs-ofctl -O OpenFlow11 mod-table br0 all continue])
8516 AT_CAPTURE_FILE([ofctl_monitor.log])
8517 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8520 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(0x1234)'
8523 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
8524 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8525 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8526 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8527 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8529 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8530 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8532 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8533 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8536 AT_CHECK([ovs-appctl revalidator/purge], [0])
8537 AT_CHECK([ovs-ofctl -O OpenFlow11 dump-flows br0 | ofctl_strip | sort], [0], [dnl
8538 table=1, n_packets=3, n_bytes=42, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
8539 OFPST_FLOW reply (OF1.1):
8542 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
8544 active=0, lookup=3, matched=0
8547 active=1, lookup=3, matched=3
8550 active=0, lookup=0, matched=0
8552 for i in `seq 3 253`; do
8553 printf ' table %d: ditto\n' $i
8555 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
8560 AT_SETUP([ofproto-dpif - ICMPv6])
8564 AT_CAPTURE_FILE([ofctl_monitor.log])
8566 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8568 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
8570 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8572 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8573 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
8574 icmp6,vlan_tci=0x0000,dl_src=00:00:86:05:80:da,dl_dst=00:60:97:07:69:ea,ipv6_src=fe80::200:86ff:fe05:80da,ipv6_dst=fe80::260:97ff:fe07:69ea,ipv6_label=0x00000,nw_tos=0,nw_ecn=0,nw_ttl=255,icmp_type=135,icmp_code=0,nd_target=fe80::260:97ff:fe07:69ea,nd_sll=00:00:86:05:80:da,nd_tll=00:00:00:00:00:00 icmp6_csum:68bd
8580 AT_SETUP([ofproto-dpif - ICMPv6 type match])
8582 add_of_ports br0 1 2 3
8584 AT_CHECK([ovs-ofctl add-flow br0 'icmp6,icmp_type=128,actions=2'])
8585 AT_CHECK([ovs-ofctl add-flow br0 'icmp6,icmp_type=129,actions=3'])
8587 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8589 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(1),eth(src=f2:49:6e:52:49:0b,dst=02:b7:d7:17:ff:72),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=128)'])
8590 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(1),eth(src=f2:49:6e:52:49:0b,dst=02:b7:d7:17:ff:72),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=128)'])
8591 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(1),eth(src=f2:49:6e:52:49:0b,dst=02:b7:d7:17:ff:72),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=129)'])
8592 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(1),eth(src=f2:49:6e:52:49:0b,dst=02:b7:d7:17:ff:72),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=129)'])
8594 AT_CHECK([ovs-appctl revalidator/purge], [0])
8596 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
8597 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=128), actions:2
8598 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=129), actions:3
8601 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
8602 n_packets=2, n_bytes=124, icmp6,icmp_type=128 actions=output:2
8603 n_packets=2, n_bytes=124, icmp6,icmp_type=129 actions=output:3
8610 AT_SETUP([ofproto-dpif - Neighbor Discovery set-field with checksum update])
8613 AT_CHECK([ovs-ofctl add-flow br0 icmp6,icmpv6_type=135,action=set_field:fe80::1-\>nd_target,set_field:32:21:14:86:11:74-\>nd_sll,output:controller])
8615 AT_CAPTURE_FILE([ofctl_monitor.log])
8617 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8619 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
8621 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8623 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8624 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via action) data_len=86 (unbuffered)
8625 icmp6,vlan_tci=0x0000,dl_src=00:00:86:05:80:da,dl_dst=00:60:97:07:69:ea,ipv6_src=fe80::200:86ff:fe05:80da,ipv6_dst=fe80::260:97ff:fe07:69ea,ipv6_label=0x00000,nw_tos=0,nw_ecn=0,nw_ttl=255,icmp_type=135,icmp_code=0,nd_target=fe80::1,nd_sll=32:21:14:86:11:74,nd_tll=00:00:00:00:00:00 icmp6_csum:19d3
8631 # Tests the exact match of CFI bit in installed datapath flows matching VLAN.
8632 AT_SETUP([ofproto-dpif - vlan matching])
8634 [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
8635 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8637 AT_CHECK([ovs-ofctl del-flows br0])
8638 AT_CHECK([ovs-ofctl add-flow br0 "vlan_tci=0x000a/0x0fff,action=output:local"])
8640 AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=10,pcp=0),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))'])
8642 OVS_WAIT_UNTIL([grep flow_add: ovs-vswitchd.log])
8643 AT_CHECK([grep 'in_port([[1]])' ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl
8644 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x8100),vlan(vid=10),encap(eth_type(0x0800),ipv4(frag=no)), actions: <del>
8649 # Tests in place modification of installed datapath flows.
8650 AT_SETUP([ofproto-dpif - in place modification])
8652 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
8653 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8655 AT_CHECK([ovs-ofctl del-flows br0])
8656 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=mod_vlan_vid:3,output:local])
8658 ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
8660 ovs-appctl time/stop
8662 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(0x1234)'])
8664 # Wait for the flow setup to be done.
8665 OVS_WAIT_UNTIL([grep 'flow_add:' ovs-vswitchd.log])
8668 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(0x1234)'
8671 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8672 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:2, bytes:28, used:0.0s, actions:push_vlan(vid=3,pcp=0),100
8675 AT_CHECK([ovs-ofctl add-flow br0 priority=60000,in_port=1,actions=mod_vlan_vid:4,output:local])
8677 ovs-appctl time/warp 500
8678 ovs-appctl time/warp 500
8681 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(0x1234)'
8684 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8685 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:5, bytes:70, used:0.0s, actions:push_vlan(vid=4,pcp=0),100
8688 AT_CHECK([grep 'modify' ovs-vswitchd.log | strip_ufid ], [0], [dnl
8689 dpif|DBG|dummy@ovs-dummy: put[[modify]] skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(1),packet_type(ns=0,id=0),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(0x1234), actions:push_vlan(vid=4,pcp=0),100
8694 # Tests in place modification of installed datapath flows with vlans.
8695 AT_SETUP([ofproto-dpif - in place modification (vlan)])
8697 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
8698 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8700 AT_CHECK([ovs-ofctl del-flows br0])
8701 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=output:local])
8703 ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
8705 ovs-appctl time/stop
8707 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(0x1234)'])
8709 # Check that a correct datapath flow is created.
8710 OVS_WAIT_UNTIL([grep 'flow_add:' ovs-vswitchd.log])
8713 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(0x1234)'
8716 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8717 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:2, bytes:28, used:0.0s, actions:100
8720 # Delete the flow. Then check that the datapath flow is modified to
8721 # drop the packets. A modified flow inherits the stats, a new
8722 # datapath flow would start from sero.
8723 AT_CHECK([ovs-ofctl del-flows br0])
8725 ovs-appctl time/warp 500
8726 ovs-appctl time/warp 500
8729 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(0x1234)'
8732 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8733 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:5, bytes:70, used:0.0s, actions:drop
8736 # Add a flow that matches the non-presence of a vlan tag, and check
8737 # that the datapath flow is modified accordingly.
8738 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,vlan_tci=0x0000/0x1fff,actions=output:local])
8740 ovs-appctl time/warp 500
8741 ovs-appctl time/warp 500
8744 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(0x1234)'
8747 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8748 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:8, bytes:112, used:0.0s, actions:100
8751 # Check that VLAN packets will not hit the same datapath megaflow.
8753 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=99,pcp=7),encap(eth_type(0x1234))'])
8754 OVS_WAIT_UNTIL([grep 'flow_add:.*vlan(vid=99' ovs-vswitchd.log])
8757 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=99,pcp=7),encap(eth_type(0x1234))'
8760 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8761 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:8, bytes:112, used:0.0s, actions:100
8762 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x8100),vlan(vid=99,pcp=7/0x0),encap(eth_type(0x1234)), packets:2, bytes:36, used:0.0s, actions:drop
8765 # Check that the new flow matches the CFI bit, while both vid and pcp
8767 AT_CHECK([grep '\(modify\)\|\(flow_add\)' ovs-vswitchd.log | strip_ufid ], [0], [dnl
8768 dpif_netdev|DBG|flow_add: recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), actions:100
8769 dpif|DBG|dummy@ovs-dummy: put[[modify]] skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(1),packet_type(ns=0,id=0),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(0x1234)
8770 dpif|DBG|dummy@ovs-dummy: put[[modify]] skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(1),packet_type(ns=0,id=0),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(0x1234), actions:100
8771 dpif_netdev|DBG|flow_add: recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x8100),vlan(vid=99,pcp=7/0x0),encap(eth_type(0x1234)), actions:drop
8776 AT_SETUP([ofproto-dpif - trace (unchanged)])
8778 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
8779 AT_CHECK([grep "Final flow:" stdout], [0], [Final flow: unchanged
8781 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100)'], [0], [stdout])
8782 AT_CHECK([grep "Final flow:" stdout], [0], [Final flow: unchanged
8788 AT_SETUP([ofproto-dpif - conntrack - controller])
8791 add_of_ports br0 1 2
8793 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
8795 dnl Allow new UDP connections on p1 for dst port 2, drop everything else.
8796 AT_DATA([flows.txt], [dnl
8798 dnl Store zone in reg4 and packet direction in reg3 (IN=1, OUT=2).
8800 table=0,priority=100,arp,action=normal
8801 table=0,priority=10,in_port=1,ip,action=set_field:1->reg4,set_field:1->reg3,ct(zone=NXM_NX_REG4[[0..15]],table=1)
8802 table=0,priority=10,in_port=2,ip,action=set_field:1->reg4,set_field:2->reg3,ct(zone=NXM_NX_REG4[[0..15]],table=1)
8803 table=0,priority=1,action=drop
8805 dnl Pass tracked traffic through ACL, drop everything else.
8806 dnl Non-REPLY/RELATED packets get the ACL lookup with the packet headers
8807 dnl in the actual packet direction in reg0 (IN=1, OUT=2). REPLY packets
8808 dnl get the ACL lookup using the conntrack tuple and the inverted direction.
8809 dnl RELATED packets get ACL lookup using the conntrack tuple in the direction
8810 dnl of the master connection, as storted in ct_mark.
8812 dnl Incoming non-related packet in the original direction (ACL IN)
8813 table=1 reg3=1, ip, ct_state=-rel-rpl+trk-inv action=set_field:1->reg0,resubmit(,3),goto_table:5
8814 dnl Incoming non-related reply packet (CT ACL OUT)
8815 table=1 reg3=1, ip, ct_state=-rel+rpl+trk-inv action=set_field:2->reg0,resubmit(,3,ct),goto_table:4
8816 dnl Outgoing non-related packet (ACL OUT)
8817 table=1 reg3=2, ip, ct_state=-rel-rpl+trk-inv action=set_field:2->reg0,resubmit(,3),goto_table:5
8818 dnl Outgoing non-related reply packet (CT ACL IN)
8819 table=1 reg3=2, ip, ct_state=-rel+rpl+trk-inv action=set_field:1->reg0,resubmit(,3,ct),goto_table:4
8821 dnl Related packet (CT ACL in the direction of the master connection.)
8822 table=1 ip, ct_state=+rel+trk-inv, action=move:NXM_NX_CT_MARK[[]]->NXM_NX_REG0[[]],resubmit(,3,ct),goto_table:4
8823 dnl Drop everything else.
8824 table=1 priority=0, action=drop
8828 dnl Stateful accept (1->reg2) all incoming (reg0=1) IP connections with
8829 dnl UDP destination port '2'. Store rule ID (1234) in reg1, verdict
8831 table=3 priority=10, reg0=1, udp, udp_dst=2 action=set_field:1234->reg1,set_field:1->reg2
8832 dnl Stateless drop (0->reg2) everything else in both directions. (Rule ID: 1235)
8833 table=3 priority=0, action=set_field:1235->reg1,set_field:0->reg2
8835 dnl Re-process stateful traffic that was not accepted by a stateful rule as
8836 dnl normal traffic in the current direction. This should also delete the
8837 dnl now stale conntrack state, so that new state can be created in it's place.
8839 dnl Stateful accepts go to next table.
8840 table=4 priority=100 reg2=1, action=goto_table:5
8841 dnl Everything else is reprocessed disregarding the CT state, using the actual
8842 dnl packet direction.
8843 table=4 priority=0 action=move:NXM_NX_REG3[[]]->NXM_NX_REG0[[]],resubmit(,3),goto_table:5
8845 dnl "ACL verdict processing table."
8847 dnl Handle stateful (reg2=1) / stateless (reg2=2) accepts and drops (reg2=0)
8849 dnl Drop all non-accepted packets.
8850 table=5 reg2=0 priority=1000 action=drop
8851 dnl Commit new non-related IP connections.
8852 table=5 priority=10 reg2=1 ct_state=+new-rel, ip, action=ct(zone=NXM_NX_REG4[[0..15]],commit,exec(move:NXM_NX_REG3[[0..31]]->NXM_NX_CT_MARK[[0..31]],move:NXM_NX_REG1[[0..31]]->NXM_NX_CT_LABEL[[96..127]])),goto_table:6
8853 dnl Commit new related connections in either direction, which inherit the mark
8854 dnl (the direction of the original direction master tuple) from the master
8856 table=5 priority=10 reg2=1 ct_state=+new+rel, ip, action=ct(zone=NXM_NX_REG4[[0..15]],commit,exec(move:NXM_NX_REG1[[0..31]]->NXM_NX_CT_LABEL[[96..127]])),goto_table:6
8857 dnl Forward everything else, including stateless accepts.
8858 table=5 priority=0 action=goto_table:6
8860 dnl "Forwarding table"
8862 table=6 action=controller
8865 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
8867 AT_CAPTURE_FILE([ofctl_monitor.log])
8868 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8870 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
8872 dnl OK, now start a new connection from port 1.
8873 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
8875 dnl Now try a reply from port 2.
8876 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
8878 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
8879 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
8881 dnl Check this output. We only see the latter two packets, not the first.
8882 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8883 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 ct_state=new|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action) data_len=42 (unbuffered)
8884 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
8886 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x2,reg4=0x1,in_port=2 (via action) data_len=42 (unbuffered)
8887 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
8890 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8892 dnl OK, now start a second connection from port 1
8893 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=3,dst=2)'])
8895 dnl Now try a reply from port 2.
8896 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=3)'])
8899 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
8900 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
8902 dnl Check this output. We should see both packets
8903 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8904 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 ct_state=new|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=2,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action) data_len=42 (unbuffered)
8905 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=2 udp_csum:e9d4
8907 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=2,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x2,reg4=0x1,in_port=2 (via action) data_len=42 (unbuffered)
8908 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=3 udp_csum:e9d4
8914 AT_SETUP([ofproto-dpif - conntrack - force commit])
8917 add_of_ports br0 1 2
8919 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
8921 dnl Allow new connections on p1->p2, but not on p2->p1.
8922 AT_DATA([flows.txt], [dnl
8925 table=0,priority=100,arp,action=normal
8926 table=0,priority=10,in_port=1,udp,action=ct(commit),controller
8927 table=0,priority=10,in_port=2,udp,action=ct(table=1)
8928 table=0,priority=1,action=drop
8932 table=1,priority=10,in_port=2,ct_state=+est,udp,action=ct(force,commit),controller
8933 table=1,priority=1,action=drop
8936 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
8938 AT_CAPTURE_FILE([ofctl_monitor.log])
8939 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8941 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
8943 dnl OK, now start a new connection from port 1.
8944 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
8946 dnl Now try a reply from port 2.
8947 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
8949 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
8950 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
8952 dnl Check this output. We only see the latter two packets, not the first.
8953 dnl Note that the first packet doesn't have the ct_state bits set. This
8954 dnl happens because the ct_state field is available only after recirc.
8955 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8956 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
8957 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
8959 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
8960 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
8963 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8965 dnl OK, now start a second connection from port 1
8966 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=3,dst=4)'])
8968 dnl Now try a reply from port 2.
8969 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=4,dst=3)'])
8971 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
8972 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
8974 dnl Check this output. We should see both packets
8975 dnl Note that the first packet doesn't have the ct_state bits set. This
8976 dnl happens because the ct_state field is available only after recirc.
8977 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8978 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
8979 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=4 udp_csum:e9d2
8981 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=4,in_port=2 (via action) data_len=42 (unbuffered)
8982 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:e9d2
8986 dnl Check that the directionality has been changed by force commit.
8988 AT_CHECK([ovs-appctl dpctl/dump-conntrack | sort], [], [dnl
8989 udp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=2,dport=1),reply=(src=10.1.1.1,dst=10.1.1.2,sport=1,dport=2)
8990 udp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=4,dport=3),reply=(src=10.1.1.1,dst=10.1.1.2,sport=3,dport=4)
8996 AT_SETUP([ofproto-dpif - conntrack - ipv6])
8999 add_of_ports br0 1 2
9001 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9003 dnl Allow new connections on p1->p2, but not on p2->p1.
9004 AT_DATA([flows.txt], [dnl
9007 table=0,priority=100,arp,action=normal
9008 table=0,priority=10,in_port=1,udp6,action=ct(commit,zone=0),controller
9009 table=0,priority=10,in_port=2,udp6,action=ct(table=1,zone=0)
9010 table=0,priority=1,action=drop
9013 table=1,priority=10,in_port=2,ct_state=+trk+est-new,udp6,action=controller
9014 table=1,priority=1,action=drop
9017 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9019 AT_CAPTURE_FILE([ofctl_monitor.log])
9020 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9022 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x86dd),ipv6(src=2001:db8::2,dst=2001:db8::1,label=0,proto=17,tclass=0x70,hlimit=128,frag=no),udp(src=2,dst=1)'])
9024 dnl OK, now start a new connection from port 1.
9025 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::1,dst=2001:db8::2,label=0,proto=17,tclass=0x70,hlimit=128,frag=no),udp(src=1,dst=2)'])
9027 dnl Now try a reply from port 2.
9028 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x86dd),ipv6(src=2001:db8::2,dst=2001:db8::1,label=0,proto=17,tclass=0x70,hlimit=128,frag=no),udp(src=2,dst=1)'])
9030 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
9031 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9033 dnl Check this output. We only see the latter two packets, not the first.
9034 dnl Note that the first packet doesn't have the ct_state bits set. This
9035 dnl happens because the ct_state field is available only after recirc.
9036 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9037 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
9038 udp6,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,ipv6_src=2001:db8::1,ipv6_dst=2001:db8::2,ipv6_label=0x00000,nw_tos=112,nw_ecn=0,nw_ttl=128,tp_src=1,tp_dst=2 udp_csum:a466
9039 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=62 ct_state=est|rpl|trk,ct_ipv6_src=2001:db8::1,ct_ipv6_dst=2001:db8::2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=62 (unbuffered)
9040 udp6,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,ipv6_src=2001:db8::2,ipv6_dst=2001:db8::1,ipv6_label=0x00000,nw_tos=112,nw_ecn=0,nw_ttl=128,tp_src=2,tp_dst=1 udp_csum:a466
9046 AT_SETUP([ofproto-dpif - conntrack - output action])
9049 add_of_ports br0 1 2
9051 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9053 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9054 AT_DATA([flows.txt], [dnl
9055 dnl The flows are in two separate tables for two reasons:
9056 dnl * To make the pipeline more clear.
9057 dnl * To make megaflows more consistent (we check megaflows below). The
9058 dnl unwildcarding in megaflows depends on the internal ordering of the
9059 dnl subtables, which are sorted using the system qsort(). qsort()
9060 dnl is provided by libc and may or may not be stable, so we can't rely
9061 dnl on that. By having separate tables we have more control over which
9062 dnl subtables are visited, meaning consistent megaflows.
9066 table=0,priority=100,arp,action=normal
9067 table=0,priority=10,in_port=1,udp,action=ct(commit,zone=0),2
9068 table=0,priority=10,in_port=2,udp,action=ct(table=1,zone=0)
9069 table=0,priority=1,action=drop
9073 table=1,priority=10,in_port=2,ct_state=+trk+est-new,udp,action=1
9074 table=1,priority=1,action=drop
9077 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9080 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9082 dnl OK, now start a new connection from port 1.
9083 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9085 dnl Now try a reply from port 2.
9086 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9088 dnl OK, now start a second connection from port 1
9089 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9091 dnl Now try a reply from port 2.
9092 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9095 AT_CHECK([cat ovs-vswitchd.log | strip_ufid | filter_flow_install], [0], [dnl
9096 ct_state(+new-est+trk),recirc_id(0x1),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:drop
9097 ct_state(-new+est+trk),recirc_id(0x1),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=no), actions:1
9098 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=no), actions:ct(commit),2
9099 recirc_id(0),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=no), actions:ct,recirc(0x1)
9105 AT_SETUP([ofproto-dpif - conntrack - expiration])
9108 add_of_ports br0 1 2
9110 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9112 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9113 AT_DATA([flows.txt], [dnl
9116 table=0,priority=100,arp,action=normal
9117 table=0,priority=10,in_port=1,udp,action=ct(commit,zone=0)
9118 table=0,priority=10,in_port=2,udp,action=ct(table=1,zone=0)
9119 table=0,priority=1,action=drop
9123 table=1,priority=10,in_port=2,ct_state=+trk+est-new,udp,action=controller
9124 table=1,priority=1,action=drop
9127 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9129 AT_CAPTURE_FILE([ofctl_monitor.log])
9130 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9132 AT_CHECK([ovs-appctl time/stop])
9134 dnl Start a new connection from port 1.
9135 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9137 dnl Now try a reply from port 2.
9138 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9140 ovs-appctl time/warp 100000
9142 dnl Now try another reply from port 2.
9143 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9145 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 3])
9146 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9148 dnl Check this output. Only one reply must be there
9149 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9150 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9151 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9153 OFPT_ECHO_REQUEST (xid=0x0): 0 bytes of payload
9159 AT_SETUP([ofproto-dpif - conntrack - untrackable traffic])
9162 add_of_ports br0 1 2
9164 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9166 AT_DATA([flows.txt], [dnl
9167 ipv6,ct_state=-trk,action=ct(table=0,zone=0)
9168 ct_state=+trk,action=controller
9171 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9173 AT_CAPTURE_FILE([ofctl_monitor.log])
9174 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9176 AT_CHECK([ovs-appctl time/stop])
9178 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'])
9180 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 1])
9181 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9183 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9184 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 ct_state=inv|trk,in_port=2 (via action) data_len=86 (unbuffered)
9185 icmp6,vlan_tci=0x0000,dl_src=00:00:86:05:80:da,dl_dst=00:60:97:07:69:ea,ipv6_src=fe80::200:86ff:fe05:80da,ipv6_dst=fe80::260:97ff:fe07:69ea,ipv6_label=0x00000,nw_tos=0,nw_ecn=0,nw_ttl=255,icmp_type=135,icmp_code=0,nd_target=fe80::260:97ff:fe07:69ea,nd_sll=00:00:86:05:80:da,nd_tll=00:00:00:00:00:00 icmp6_csum:68bd
9191 AT_SETUP([ofproto-dpif - conntrack - zones])
9194 add_of_ports br0 1 2 3 4
9196 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9198 dnl Allow new connections on p1->p2 or p3->p4.
9199 dnl Allow only established connections p2->p1 and p4->p3
9200 dnl p1,p2 and p3,p4 are on different zones
9201 AT_DATA([flows.txt], [dnl
9204 table=0,priority=100,arp,action=normal
9205 table=0,priority=10,in_port=1,udp,action=ct(commit,zone=0),controller
9206 table=0,priority=10,in_port=2,udp,action=ct(table=1,zone=0)
9207 table=0,priority=10,in_port=3,udp,action=ct(commit,zone=1),controller
9208 table=0,priority=10,in_port=4,udp,action=ct(table=1,zone=1)
9209 table=0,priority=1,action=drop
9213 table=1,priority=10,in_port=2,ct_state=+trk+est-new,udp,action=controller
9214 table=1,priority=10,in_port=4,ct_state=+trk+est-new,udp,action=controller
9215 table=1,priority=1,action=drop
9218 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9220 AT_CAPTURE_FILE([ofctl_monitor.log])
9221 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9223 dnl Basic "only established" test on ports 1,2
9225 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9226 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9227 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9229 dnl Now use the same 5-tuples but on ports 3,4
9231 AT_CHECK([ovs-appctl netdev-dummy/receive p4 'in_port(4),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9232 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9233 AT_CHECK([ovs-appctl netdev-dummy/receive p4 'in_port(4),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9235 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 8])
9236 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9238 dnl Check this output. We only see the latter two packets (for each zone), not the first.
9239 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9240 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
9241 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9243 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9244 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9246 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=3 (via action) data_len=42 (unbuffered)
9247 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9249 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_zone=1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=4 (via action) data_len=42 (unbuffered)
9250 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9256 AT_SETUP([ofproto-dpif - conntrack - recirc,commit])
9259 add_of_ports br0 1 2
9261 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9263 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9264 AT_DATA([flows.txt], [dnl
9267 table=0,priority=100,arp,action=normal
9268 table=0,priority=10,udp,action=ct(table=1,zone=0)
9269 table=0,priority=1,action=drop
9273 table=1,priority=10,in_port=1,ct_state=+trk+new,udp,action=ct(commit,zone=0),controller
9274 table=1,priority=10,ct_state=+trk+est,udp,action=controller
9275 table=1,priority=1,action=drop
9278 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9280 AT_CAPTURE_FILE([ofctl_monitor.log])
9281 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9283 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9285 dnl OK, now start a new connection from port 1.
9286 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9288 dnl Now try a reply from port 2.
9289 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9291 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
9292 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9294 dnl Check this output. We only see the latter two packets, not the first.
9295 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9296 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=new|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=1 (via action) data_len=42 (unbuffered)
9297 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9299 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9300 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9306 AT_SETUP([ofproto-dpif - conntrack - ICMP related])
9309 add_of_ports br0 1 2
9311 dnl Allow any traffic from ns0->ns1. Only allow nd, return traffic from ns1->ns0.
9312 AT_DATA([flows.txt], [dnl
9315 table=0,priority=100,arp,action=normal
9316 table=0,priority=10,ip,in_port=1,udp,action=ct(commit,table=1)
9317 table=0,priority=10,ip,in_port=2,action=ct(table=1)
9318 table=0,priority=1,action=drop
9322 table=1,priority=10,in_port=1,ct_state=+trk,action=controller
9323 table=1,priority=10,in_port=2,ct_state=+trk-inv-new,action=controller
9324 table=1,priority=1,action=drop
9327 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9329 AT_CAPTURE_FILE([ofctl_monitor.log])
9330 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9332 dnl 1. Send an ICMP port unreach reply for port 8738, without any previous request
9333 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 2 ct\(table=1\) 'f64c473528c9c6f54ecb72db080045c0003d2e8700004001f351ac100004ac1000030303553f0000000045000021317040004011b138ac100003ac10000411112222000da5a06369616f0a'])
9335 dnl 2. Send and UDP packet to port 5555
9336 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 1 ct\(commit,table=1\) 'c6f94ecb72dbe64c473528c9080045000021317040004011b138ac100001ac100002a28e15b3000d20966369616f0a'])
9338 dnl 3. Send an ICMP port unreach reply for port 5555, related to the first packet
9339 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 2 ct\(table=1\) 'e64c473528c9c6f94ecb72db080045c0003d2e8700004001f355ac100002ac1000010303553f0000000045000021317040004011b138ac100001ac100002a28e15b3000d20966369616f0a'])
9341 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
9342 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9344 dnl Check this output. We only see the first and the last packet
9345 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9346 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=47 ct_state=new|trk,ct_nw_src=172.16.0.1,ct_nw_dst=172.16.0.2,ct_nw_proto=17,ct_tp_src=41614,ct_tp_dst=5555,in_port=1 (via action) data_len=47 (unbuffered)
9347 udp,vlan_tci=0x0000,dl_src=e6:4c:47:35:28:c9,dl_dst=c6:f9:4e:cb:72:db,nw_src=172.16.0.1,nw_dst=172.16.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=41614,tp_dst=5555 udp_csum:2096
9349 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=75 ct_state=rel|rpl|trk,ct_nw_src=172.16.0.1,ct_nw_dst=172.16.0.2,ct_nw_proto=17,ct_tp_src=41614,ct_tp_dst=5555,in_port=2 (via action) data_len=75 (unbuffered)
9350 icmp,vlan_tci=0x0000,dl_src=c6:f9:4e:cb:72:db,dl_dst=e6:4c:47:35:28:c9,nw_src=172.16.0.2,nw_dst=172.16.0.1,nw_tos=192,nw_ecn=0,nw_ttl=64,icmp_type=3,icmp_code=3 icmp_csum:553f
9356 AT_SETUP([ofproto-dpif - conntrack - ct_mark])
9359 add_of_ports br0 1 2
9361 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9363 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9364 AT_DATA([flows.txt], [dnl
9367 table=0,arp,action=normal
9368 table=0,ip,in_port=1,udp,tp_src=1,action=ct(commit,exec(set_field:1->ct_mark)),controller
9369 table=0,ip,in_port=1,udp,tp_src=3,action=ct(commit,exec(set_field:3->ct_mark)),controller
9370 table=0,ip,in_port=1,udp,tp_src=5,action=ct(commit,exec(set_field:5->ct_mark)),controller
9371 table=0,ip,in_port=2,actions=ct(table=1)
9372 table=0,priority=0,action=drop
9376 table=1,priority=100,ct_state=+trk+rpl,ct_mark=0/4,actions=controller
9377 table=1,priority=1,action=drop
9380 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9382 AT_CAPTURE_FILE([ofctl_monitor.log])
9383 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9385 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9386 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=3,dst=4)'])
9387 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=5,dst=6)'])
9389 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9390 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=4,dst=3)'])
9391 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=6,dst=5)'])
9393 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 10])
9394 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9396 dnl Check this output.
9397 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9398 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 ct_mark=0x1,in_port=1 (via action) data_len=42 (unbuffered)
9399 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9401 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 ct_mark=0x3,in_port=1 (via action) data_len=42 (unbuffered)
9402 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=4 udp_csum:e9d2
9404 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 ct_mark=0x5,in_port=1 (via action) data_len=42 (unbuffered)
9405 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=5,tp_dst=6 udp_csum:e9ce
9407 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_mark=0x1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9408 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9410 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_mark=0x3,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=4,in_port=2 (via action) data_len=42 (unbuffered)
9411 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:e9d2
9417 AT_SETUP([ofproto-dpif - conntrack - ct_label])
9420 add_of_ports br0 1 2
9422 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9424 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9425 AT_DATA([flows.txt], [dnl
9428 table=0,arp,action=normal
9429 table=0,ip,in_port=1,udp,tp_src=1,action=ct(commit,exec(set_field:000000000000000001->ct_label))
9430 table=0,ip,in_port=1,udp,tp_src=3,action=ct(commit,exec(set_field:000000000000000002->ct_label))
9431 table=0,ip,in_port=2,actions=ct(table=1)
9435 table=1,priority=10,ct_state=+trk+rpl,actions=controller
9436 table=1,priority=1,action=drop
9439 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9441 AT_CAPTURE_FILE([ofctl_monitor.log])
9442 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9444 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9445 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=3,dst=4)'])
9447 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9448 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=4,dst=3)'])
9450 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
9451 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9453 dnl Check this output.
9454 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9455 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_label=0x1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9456 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9458 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_label=0x2,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=4,in_port=2 (via action) data_len=42 (unbuffered)
9459 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:e9d2
9465 AT_SETUP([ofproto-dpif - conntrack - ct_label datapath flow])
9468 add_of_ports br0 1 2
9470 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9472 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9473 AT_DATA([flows.txt], [dnl
9474 dnl The flows are in two separate tables for two reasons:
9475 dnl * To make the pipeline more clear.
9476 dnl * To make megaflows more consistent (we check megaflows below). The
9477 dnl unwildcarding in megaflows depends on the internal ordering of the
9478 dnl subtables, which are sorted using the system qsort(). qsort()
9479 dnl is provided by libc and may or may not be stable, so we can't rely
9480 dnl on that. By having separate tables we have more control over which
9481 dnl subtables are visited, meaning consistent megaflows.
9485 table=0,arp,action=normal
9486 table=0,ip,in_port=1,udp,tp_src=1,action=ct(commit,exec(set_field:1->ct_label)),2
9487 table=0,ip,in_port=2,actions=ct(table=1)
9488 table=0,priority=0,action=drop
9492 table=1,priority=10,ct_state=+trk+rpl,ct_label=0x1,actions=1
9493 table=1,priority=1,action=drop
9496 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9498 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9499 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9501 # Give time for logs to appear.
9502 ovs-appctl revalidator/wait
9504 AT_CHECK([cat ovs-vswitchd.log | strip_ufid | filter_flow_install], [0], [dnl
9505 ct_state(+rpl+trk),ct_label(0x1),recirc_id(0x1),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:1
9506 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=no),udp(src=1), actions:ct(commit,label=0x1),2
9507 recirc_id(0),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:ct,recirc(0x1)
9513 AT_SETUP([ofproto-dpif - conntrack - no output])
9518 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9520 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9521 AT_DATA([flows.txt], [dnl
9522 in_port=1,udp,action=ct(commit,zone=0)
9525 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9527 dnl Start a new connection from port 1.
9528 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9530 AT_CHECK([cat ovs-vswitchd.log | strip_ufid | filter_flow_install], [0], [dnl
9531 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=no), actions:ct(commit)
9537 AT_SETUP([ofproto-dpif - conntrack - tcp port reuse])
9540 add_of_ports br0 1 2
9542 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9544 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9545 AT_DATA([flows.txt], [dnl
9548 table=0,priority=100,arp,action=normal
9549 table=0,priority=10,in_port=1,ip,action=ct(commit,table=1)
9550 table=0,priority=10,in_port=2,ip,action=ct(table=1)
9551 table=0,priority=1,action=drop
9555 dnl The following two flows are separated to explicitly count the packets
9556 dnl that create a new connection
9557 table=1,priority=100,cookie=0x1,in_port=1,ip,ct_state=+trk+new-inv-rpl,action=2
9558 table=1,priority=100,in_port=1,ip,ct_state=+trk-new-inv-rpl,action=2
9560 table=1,priority=100,in_port=2,ip,ct_state=+trk+est+rpl-new-inv,action=1
9561 table=1,ip,ct_state=+trk+inv,action=drop
9564 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9566 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a50540000000908004500002ca4e5400040067fe20a0101010a0101020001000259b5d93f0000000060027210dd190000020405b4'])
9567 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a08004500002c00004000400624c80a0101020a010101000200017c35468459b5d940601272101a4f0000020405b4'])
9568 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028a4e6400040067fe50a0101010a0101020001000259b5d9407c35468550107210320c0000'])
9569 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a0800450000303b5f40004006e9640a0101020a010101000200017c35468559b5d9405018721074c200007061796c6f61640a'])
9570 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028a4e7400040067fe40a0101010a0101020001000259b5d9407c35468d5010721032040000'])
9571 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a0800450000283b6040004006e96b0a0101020a010101000200017c35468d59b5d9405011721032030000'])
9572 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028a4e8400040067fe30a0101010a0101020001000259b5d9407c35468e5010721032030000'])
9573 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028a4e9400040067fe20a0101010a0101020001000259b5d9407c35468e5011721032020000'])
9574 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a0800450000283b6140004006e96a0a0101020a010101000200017c35468e59b5d9415010721032020000'])
9576 AT_CHECK([ovs-appctl revalidator/purge])
9577 AT_CHECK([ovs-ofctl dump-flows br0 | grep cookie=0x1 | grep -o "n_packets=[[0-9]]*"], [0], [dnl
9578 dnl Only one new connection
9582 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a50540000000908004500002cc0a74000400664200a0101010a010102000100025b7dbf1f0000000060027210f5710000020405b4'])
9583 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a08004500002c00004000400624c80a0101020a010101000200017c36468f5b7dbf2060127210329b0000020405b4'])
9584 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028c0a84000400664230a0101010a010102000100025b7dbf207c364690501072104a580000'])
9585 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a080045000030392840004006eb9b0a0101020a010101000200017c3646905b7dbf20501872108d0e00007061796c6f61640a'])
9586 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028c0a94000400664220a0101010a010102000100025b7dbf207c364698501072104a500000'])
9587 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a080045000028392940004006eba20a0101020a010101000200017c3646985b7dbf20501172104a4f0000'])
9588 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028c0aa4000400664210a0101010a010102000100025b7dbf207c364699501072104a4f0000'])
9589 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028c0ab4000400664200a0101010a010102000100025b7dbf207c364699501172104a4e0000'])
9590 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a080045000028392a40004006eba10a0101020a010101000200017c3646995b7dbf21501072104a4e0000'])
9592 AT_CHECK([ovs-appctl revalidator/purge])
9593 AT_CHECK([ovs-ofctl dump-flows br0 | grep cookie=0x1 | grep -o "n_packets=[[0-9]]*"], [0], [dnl
9594 dnl Two new connections
9601 AT_SETUP([ofproto-dpif - conntrack - tcp pick up])
9604 add_of_ports br0 1 2
9606 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9608 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9609 AT_DATA([flows.txt], [dnl
9612 table=0,priority=100,arp,action=normal
9613 table=0,priority=10,in_port=1,tcp,action=ct(commit,table=1)
9614 table=0,priority=10,in_port=2,tcp,action=ct(table=1)
9615 table=0,priority=1,action=drop
9619 table=1,priority=10,cookie=0x1,ip,ct_state=+trk+inv,action=controller
9620 table=1,priority=1,action=drop
9623 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9625 AT_CHECK([ovs-appctl revalidator/purge])
9626 AT_CHECK([ovs-ofctl dump-flows br0 | grep cookie=0x1 | grep -o "n_packets=[[0-9]]*"], [0], [dnl
9627 dnl No dropped packets
9631 AT_CAPTURE_FILE([ofctl_monitor.log])
9632 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9634 dnl The first two packets (SYN, SYN|ACK) are commented out. We're making
9635 dnl sure that the connection tracker is able to pick up already established
9636 dnl connections that use window scaling.
9638 dnl AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000030fc2540004006289e0a0101020a01010100020001396bb359000000007002008080cc0000020405b401030307'])
9639 dnl AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a50540000000908004500003000004000400624c40a0101010a010102000100028cadbdb3396bb35a70120080365a0000020405b401030307'])
9640 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000028fc264000400628a50a0101020a01010100020001396bb35a8cadbdb45010000a629b0000'])
9641 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000029fc274000400628a30a0101020a01010100020001396bb35a8cadbdb45018000a589200000a'])
9642 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a505400000009080045000028f2c84000400632030a0101010a010102000100028cadbdb4396bb35b5010000a629a0000'])
9643 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a08004500022afc284000400626a10a0101020a01010100020001396bb35b8cadbdb45018000a941f0000 dnl
9644 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9645 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9646 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9647 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9648 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9649 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9650 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9651 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9652 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9653 6666666666666666666666666666666666666666666666666666660a'])
9654 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a505400000009080045000028f2c94000400632020a0101010a010102000100028cadbdb4396bb55d5010000a60980000'])
9655 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a5054000000090800450001fdf2ca40004006302c0a0101010a010102000100028cadbdb4396bb55d5018000aa60c0000 dnl
9656 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9657 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9658 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9659 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9660 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9661 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9662 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9663 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9664 6565656565656565656565656565656565656565656565656565656565656565656565650a'])
9665 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000028fc294000400628a20a0101020a01010100020001396bb55d8cadbf895010000a5ec30000'])
9666 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000028fc2a4000400628a10a0101020a01010100020001396bb55d8cadbf895011000a5ec20000'])
9667 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a505400000009080045000028f2cb4000400632000a0101010a010102000100028cadbf89396bb55e5010000a5ec20000'])
9668 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a505400000009080045000028f2cc4000400631ff0a0101010a010102000100028cadbf89396bb55e5011000a5ec10000'])
9669 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000028258e40004006ff3d0a0101020a01010100020001396bb55e8cadbf8a5010000a5ec10000'])
9671 AT_CHECK([ovs-appctl revalidator/purge])
9673 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9675 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9678 AT_CHECK([ovs-ofctl dump-flows br0 | grep cookie=0x1 | grep -o "n_packets=[[0-9]]*"], [0], [dnl
9679 dnl No dropped packets
9686 dnl This is a truncated version of "ofproto-dpif - conntrack - controller",
9687 dnl with extra send-to-controller actions following ct_clear to show that
9688 dnl the connection tracking data has been cleared.
9689 AT_SETUP([ofproto-dpif - conntrack - ct_clear])
9692 add_of_ports br0 1 2
9694 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9696 dnl Allow new connections on p1->p2, but not on p2->p1.
9697 AT_DATA([flows.txt], [dnl
9700 table=0,priority=100,arp,action=normal
9701 table=0,priority=10,in_port=1,udp,action=ct(commit,zone=0),controller,ct_clear,controller
9702 table=0,priority=10,in_port=2,udp,action=ct(table=1,zone=0)
9703 table=0,priority=1,action=drop
9707 table=1,priority=10,in_port=2,ct_state=+trk+est-new,udp,action=controller,ct_clear,controller
9708 table=1,priority=1,action=drop
9711 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9713 AT_CAPTURE_FILE([ofctl_monitor.log])
9714 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9716 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9718 dnl OK, now start a new connection from port 1.
9719 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9721 dnl Now try a reply from port 2.
9722 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9724 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 8])
9725 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9727 dnl Check this output. We only see the latter two packets, not the first.
9728 dnl Note that the first packet doesn't have the ct_state bits set. This
9729 dnl happens because the ct_state field is available only after recirc.
9730 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9731 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
9732 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9734 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
9735 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9737 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9738 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9740 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered)
9741 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9746 AT_SETUP([ofproto-dpif - conntrack - ofproto/trace])
9749 add_of_ports br0 1 2 3 4
9751 AT_DATA([flows.txt], [dnl
9754 table=0,priority=100,arp,action=normal
9755 table=0,priority=10,udp,action=ct(table=1,zone=0)
9756 table=0,priority=10,tcp,action=ct(table=2,zone=1)
9757 table=0,priority=1,action=drop
9761 table=1,priority=10,in_port=1,ct_state=+trk+new,udp,action=ct(commit,zone=0),2
9762 table=1,priority=10,in_port=1,ct_state=+trk+est,udp,action=2
9763 table=1,priority=10,in_port=2,ct_state=+trk+est,udp,action=1
9764 table=1,priority=1,action=drop
9768 table=2,priority=10,in_port=1,tcp,ct_state=+trk+new,tcp,action=ct(commit,zone=1),ct(table=3,zone=2)
9769 table=2,priority=10,in_port=1,tcp,ct_state=+trk+est,tcp,action=ct(table=3,zone=2)
9770 table=2,priority=1,action=drop
9774 table=3,priority=10,in_port=1,tcp,ct_state=+trk+new,tcp,action=ct(commit,zone=2),4
9775 table=3,priority=10,in_port=1,tcp,ct_state=+trk+est,tcp,action=3
9776 table=2,priority=1,action=drop
9779 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9781 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=2,udp'], [0], [stdout])
9782 AT_CHECK([tail -1 stdout], [0],
9783 [Datapath actions: drop
9786 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,udp'], [0], [stdout])
9787 AT_CHECK([tail -1 stdout], [0],
9788 [Datapath actions: ct(commit),2
9791 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,tcp'], [0], [stdout])
9792 AT_CHECK([tail -1 stdout], [0],
9793 [Datapath actions: ct(commit,zone=2),4
9796 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,tcp' --ct-next 'trk,est' --ct-next 'trk,est' ], [0], [stdout])
9797 AT_CHECK([tail -1 stdout], [0],
9798 [Datapath actions: 3
9804 AT_SETUP([ofproto - set mtu])
9809 # Check that initial MTU is 1500 for 'br0' and 'p1'.
9810 AT_CHECK([ovs-vsctl get Interface br0 mtu], [0], [dnl
9813 AT_CHECK([ovs-vsctl get Interface p1 mtu], [0], [dnl
9817 # Request new MTU for 'p1'
9818 AT_CHECK([ovs-vsctl set Interface p1 mtu_request=1600])
9820 # Check that the new MTU is applied
9821 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface p1 mtu=1600])
9822 # The internal port 'br0' should have the same MTU value as p1, becase it's
9823 # the new bridge minimum.
9824 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1600])
9826 AT_CHECK([ovs-vsctl del-port br0 p1])
9828 # When 'p1' is deleted, the internal port should return to the default MTU
9829 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1500])
9831 # New port with 'mtu_request' in the same transaction.
9832 AT_CHECK([ovs-vsctl add-port br0 p2 -- set int p2 type=dummy mtu_request=1600])
9833 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface p2 mtu=1600])
9834 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1600])
9836 # Explicitly set mtu_request on the internal interface. This should prevent
9837 # the MTU from being overriden.
9838 AT_CHECK([ovs-vsctl set int br0 mtu_request=1700])
9839 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1700])
9841 # The new MTU on p2 should not affect br0.
9842 AT_CHECK([ovs-vsctl set int p2 mtu_request=1400])
9843 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface p2 mtu=1400])
9844 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1700])
9846 # Remove explicit mtu_request from br0. Now it should track the bridge
9848 AT_CHECK([ovs-vsctl set int br0 mtu_request=[[]]])
9849 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1400])
9854 AT_SETUP([ofproto - fragment prerequisites])
9857 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
9861 AT_DATA([flows.txt], [dnl
9862 priority=10,in_port=1,udp,tp_src=67,tp_dst=68,action=drop
9863 priority=1,in_port=1,udp,action=drop
9866 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9868 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:max-idle=10000])
9870 ovs-appctl time/stop
9871 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(1),eth_type(0x0800),ipv4(proto=17,frag=later)'])
9872 ovs-appctl time/warp 5000
9874 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
9875 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=later), actions:drop
9878 dnl Change the flow table. This will trigger revalidation of all the flows.
9879 AT_CHECK([ovs-ofctl add-flow br0 priority=5,in_port=1,action=drop])
9880 AT_CHECK([ovs-appctl revalidator/wait], [0])
9882 dnl We don't want revalidators to delete any flow. If the flow has been
9883 dnl deleted it means that there's some inconsistency with the revalidation.
9884 AT_CHECK([grep flow_del ovs-vswitchd.log], [1])