ofproto: Allow in-place modifications of datapath flows.
[cascardo/ovs.git] / tests / ofproto-dpif.at
1 AT_BANNER([ofproto-dpif])
2
3 AT_SETUP([ofproto-dpif - revalidator/wait])
4 OVS_VSWITCHD_START
5 AT_CHECK([ovs-appctl revalidator/wait])
6 OVS_VSWITCHD_STOP
7 AT_CLEANUP
8
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.
13 OVS_VSWITCHD_START(
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 -- \
18    add-br br1 -- \
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 \
21                   fail-mode=secure -- \
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])
27
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
33 ovs-appctl time/stop
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
44 sleep 1
45 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port=[[348]]' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
46 recirc_id=0,ip,in_port=3,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
47 recirc_id=0,ip,in_port=3,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
48 recirc_id=0,ip,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0d,nw_frag=no, actions: <del>
49 recirc_id=0,ip,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0e,nw_frag=no, actions: <del>
50 recirc_id=0,rarp,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=ff:ff:ff:ff:ff:ff, actions: <del>
51 recirc_id=0,rarp,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=ff:ff:ff:ff:ff:ff, actions: <del>
52 ])
53 OVS_VSWITCHD_STOP
54 AT_CLEANUP
55
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.
61 OVS_VSWITCHD_START(
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 -- \
67    add-br br1 -- \
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 \
70                   fail-mode=secure -- \
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
79 ])
80 ovs-appctl time/stop
81 ovs-appctl time/warp 100
82 (
83 for i in `seq 0 100 |xargs printf '%02x\n'`;
84     do
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])
87     done
88 )
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])
96 OVS_VSWITCHD_STOP
97 AT_CLEANUP
98
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.
102 #    bond0 <-> bond1
103 # Send some traffic, make sure the traffic are spread based on L4 headers.
104 OVS_VSWITCHD_START(
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 -- \
111    add-br br1 -- \
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
122 ])
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
126 ], [])
127 OVS_WAIT_WHILE([ovs-appctl bond/show | grep "may_enable: false"])
128 ovs-appctl time/stop
129 ovs-appctl time/warp 100
130 ovs-appctl lacp/show > lacp.txt
131 ovs-appctl bond/show > bond.txt
132 (
133 for i in `seq 0 255` ;
134     do
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])
137     done
138 )
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])
147
148 OVS_VSWITCHD_STOP()
149 AT_CLEANUP
150
151 # Makes sure recirculation does not change the way packet is handled.
152 AT_SETUP([ofproto-dpif - balance-tcp bonding, different recirc flow ])
153 OVS_VSWITCHD_START(
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 -- \
158    add-br br1 -- \
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 -- \
167    add-br br-int -- \
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
173 ])
174 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
175 ])
176
177 # Waits for all ifaces enabled.
178 OVS_WAIT_UNTIL([test `ovs-appctl bond/show | grep -- "may_enable: true" |  wc -l` -ge 4])
179
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
185 ])
186 AT_CHECK([ovs-ofctl add-flows br-int flows.txt])
187
188 # Sends a packet to trigger recirculation.
189 # Should generate recirc_id(0x2),dp_hash(0xc1261ba2/0xff).
190 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
192 # Collects flow stats.
193 AT_CHECK([ovs-appctl revalidator/purge], [0])
194
195 # Checks the flow stats in br1, should only be one flow with non-zero
196 # 'n_packets' from internal table.
197 AT_CHECK([ovs-appctl bridge/dump-flows br1 | ofctl_strip | grep -- "n_packets" | grep -- "table_id" | sed -e 's/dp_hash=0x[[0-9a-f]][[0-9a-f]]*/dp_hash=0x0/' -e 's/output:[[0-9]][[0-9]]*/output/'], [0], [dnl
198 table_id=254, n_packets=1, n_bytes=64, priority=20,recirc_id=0x2,dp_hash=0x0/0xff,actions=output
199 ])
200
201 # Checks the flow stats in br-int, should be only one match.
202 AT_CHECK([ovs-ofctl dump-flows br-int | ofctl_strip | sort], [0], [dnl
203  n_packets=1, n_bytes=60, priority=1,in_port=5 actions=mod_vlan_vid:1,output:101
204  priority=2,in_port=5,dl_vlan=1 actions=drop
205 NXST_FLOW reply:
206 ])
207
208 OVS_VSWITCHD_STOP()
209 AT_CLEANUP
210
211 AT_SETUP([ofproto-dpif - resubmit])
212 OVS_VSWITCHD_START
213 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
214                     [16], [17], [18], [19], [20], [21])
215 AT_DATA([flows.txt], [dnl
216 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
217 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
218 table=0 in_port=3 priority=2000 icmp actions=output(20)
219 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
220 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
221 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
222 ])
223 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
224 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])
225 AT_CHECK([tail -1 stdout], [0],
226   [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
227 ])
228 OVS_VSWITCHD_STOP
229 AT_CLEANUP
230
231 AT_SETUP([ofproto-dpif - goto table])
232 OVS_VSWITCHD_START
233 ADD_OF_PORTS([br0], [1], [10], [11])
234 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
235 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
236 echo "table=64 actions=output(11)" >> flows.txt
237 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
238 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])
239 AT_CHECK([tail -1 stdout], [0],
240   [Datapath actions: 10,11
241 ])
242 OVS_VSWITCHD_STOP
243 AT_CLEANUP
244
245 AT_SETUP([ofproto-dpif - write actions])
246 OVS_VSWITCHD_START
247 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
248 AT_DATA([flows.txt], [dnl
249 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
250 table=1 ip actions=write_actions(output(13)),goto_table(2)
251 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
252 ])
253 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
254 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])
255 AT_CHECK([tail -2 stdout], [0],
256   [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
257 Datapath actions: 10,set(ipv4(src=192.168.3.91)),11,set(ipv4(src=192.168.3.90)),13
258 ])
259 OVS_VSWITCHD_STOP
260 AT_CLEANUP
261
262 AT_SETUP([ofproto-dpif - modify IPv6 Neighbor Solitication (ND)])
263 OVS_VSWITCHD_START
264 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
265 AT_DATA([flows.txt], [dnl
266 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)
267 table=1 icmp6 actions=write_actions(output(13)),goto_table(2)
268 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)
269 ])
270 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
271 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])
272 AT_CHECK([tail -4 stdout], [0],
273   [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
274 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
275 This flow is handled by the userspace slow path because it:
276         - Uses action(s) not supported by datapath.
277 ])
278 OVS_VSWITCHD_STOP
279 AT_CLEANUP
280
281 AT_SETUP([ofproto-dpif - clear actions])
282 OVS_VSWITCHD_START
283 ADD_OF_PORTS([br0], [1], [10], [11], [12])
284 AT_DATA([flows.txt], [dnl
285 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
286 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
287 ])
288 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
289 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])
290 AT_CHECK([tail -2 stdout], [0],
291   [Megaflow: recirc_id=0,tcp,in_port=1,nw_frag=no,tp_src=8
292 Datapath actions: 10,set(tcp(src=91)),11
293 ])
294 OVS_VSWITCHD_STOP
295 AT_CLEANUP
296
297 AT_SETUP([ofproto-dpif - group chaining])
298 OVS_VSWITCHD_START
299 ADD_OF_PORTS([br0], [1], [10], [11])
300 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'])
301 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=123,type=all,bucket=output:10'])
302 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
303 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])
304 AT_CHECK([tail -1 stdout], [0],
305   [Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
306 ])
307 OVS_VSWITCHD_STOP
308 AT_CLEANUP
309
310 AT_SETUP([ofproto-dpif - all group in action list])
311 OVS_VSWITCHD_START
312 ADD_OF_PORTS([br0], [1], [10], [11])
313 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'])
314 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
315 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])
316 # Must match on the source address to be able to restore it's value for
317 # the second bucket
318 AT_CHECK([tail -2 stdout], [0],
319   [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
320 Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
321 ])
322 OVS_VSWITCHD_STOP
323 AT_CLEANUP
324
325 AT_SETUP([ofproto-dpif - indirect group in action list])
326 OVS_VSWITCHD_START
327 ADD_OF_PORTS([br0], [1], [10])
328 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
329 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
330 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])
331 AT_CHECK([tail -1 stdout], [0],
332   [Datapath actions: 10
333 ])
334 OVS_VSWITCHD_STOP
335 AT_CLEANUP
336
337 AT_SETUP([ofproto-dpif - group actions have no effect afterwards])
338 OVS_VSWITCHD_START
339 ADD_OF_PORTS([br0], [1], [10])
340 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'])
341 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234,output:10'])
342 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])
343 AT_CHECK([tail -1 stdout], [0],
344   [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
345 ])
346 OVS_VSWITCHD_STOP
347 AT_CLEANUP
348
349 AT_SETUP([ofproto-dpif - all group in action set])
350 OVS_VSWITCHD_START
351 ADD_OF_PORTS([br0], [1], [10], [11])
352 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'])
353 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
354 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])
355 # Must match on the source address to be able to restore it's value for
356 # the third bucket
357 AT_CHECK([tail -2 stdout], [0],
358   [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
359 Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
360 ])
361 OVS_VSWITCHD_STOP
362 AT_CLEANUP
363
364 AT_SETUP([ofproto-dpif - indirect group in action set])
365 OVS_VSWITCHD_START
366 ADD_OF_PORTS([br0], [1], [10])
367 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
368 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
369 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])
370 AT_CHECK([tail -1 stdout], [0],
371   [Datapath actions: 10
372 ])
373 OVS_VSWITCHD_STOP
374 AT_CLEANUP
375
376 AT_SETUP([ofproto-dpif - select group])
377 OVS_VSWITCHD_START
378 ADD_OF_PORTS([br0], [1], [10], [11])
379 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
380 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
381
382 # Try a bunch of different flows and make sure that they get distributed
383 # at least somewhat.
384 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
385     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])
386     tail -1 stdout >> results
387 done
388 sort results | uniq -c
389 AT_CHECK([sort results | uniq], [0],
390   [Datapath actions: 10
391 Datapath actions: 11
392 ])
393 OVS_VSWITCHD_STOP
394 AT_CLEANUP
395
396 AT_SETUP([ofproto-dpif - select group with watch port])
397 OVS_VSWITCHD_START
398 ADD_OF_PORTS([br0], [1], [10], [11])
399 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
400 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
401 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])
402 AT_CHECK([tail -1 stdout], [0],
403   [Datapath actions: 11
404 ])
405 OVS_VSWITCHD_STOP
406 AT_CLEANUP
407
408 AT_SETUP([ofproto-dpif - select group with weight])
409 OVS_VSWITCHD_START
410 ADD_OF_PORTS([br0], [1], [10], [11], [12])
411 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'])
412 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
413 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])
414 AT_CHECK([tail -1 stdout], [0],
415   [Datapath actions: 11
416 ])
417 OVS_VSWITCHD_STOP
418 AT_CLEANUP
419
420 AT_SETUP([ofproto-dpif - select group with hash selection method])
421 OVS_VSWITCHD_START
422 ADD_OF_PORTS([br0], [1], [10], [11])
423 AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 'group_id=1234,type=select,selection_method=hash,fields=eth_dst,bucket=output:10,bucket=output:11'])
424 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 'ip actions=write_actions(group:1234)'])
425
426 # Try a bunch of different flows and make sure that they get distributed
427 # at least somewhat.
428 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
429     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])
430     tail -1 stdout >> results
431 done
432 sort results | uniq -c
433 AT_CHECK([sort results | uniq], [0],
434   [Datapath actions: 10
435 Datapath actions: 11
436 ])
437
438 > results
439 # Try a bunch of different flows and make sure that they are not distributed
440 # as they only vary a field that is not hashed
441 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
442     AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:$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])
443     tail -1 stdout >> results
444 done
445 sort results | uniq -c
446 AT_CHECK([sort results | uniq], [0],
447   [Datapath actions: 10
448 ])
449
450 OVS_VSWITCHD_STOP
451 AT_CLEANUP
452
453 AT_SETUP([ofproto-dpif - fast failover group])
454 OVS_VSWITCHD_START
455 ADD_OF_PORTS([br0], [1], [10], [11])
456 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'])
457 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
458 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])
459 AT_CHECK([tail -1 stdout], [0],
460   [Datapath actions: drop
461 ])
462 OVS_VSWITCHD_STOP
463 AT_CLEANUP
464
465 AT_SETUP([ofproto-dpif - group stats single bucket])
466 OVS_VSWITCHD_START
467 ADD_OF_PORTS([br0], [1], [10], [11])
468 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,weight=2000,bucket=output:11,weight=0'])
469 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
470 (
471 for i in `seq 0 2`;
472     do
473     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)"
474     AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
475     done
476 )
477 AT_CHECK([ovs-appctl revalidator/purge], [0])
478 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
479 AT_CHECK([STRIP_XIDS stdout | sort], [0], [dnl
480  group_id=1234,ref_count=0,packet_count=3,byte_count=180,bucket0:packet_count=3,byte_count=180,bucket1:packet_count=0,byte_count=0
481 OFPST_GROUP reply (OF1.2):
482 ])
483 OVS_VSWITCHD_STOP
484 AT_CLEANUP
485
486 AT_SETUP([ofproto-dpif - group stats all buckets])
487 OVS_VSWITCHD_START
488 ADD_OF_PORTS([br0], [1], [10], [11])
489 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:11'])
490 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
491 (
492 for i in `seq 0 2`;
493     do
494     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)"
495     AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
496     done
497 )
498 AT_CHECK([ovs-appctl revalidator/purge], [0])
499 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
500 AT_CHECK([STRIP_XIDS stdout | sort], [0], [dnl
501  group_id=1234,ref_count=0,packet_count=3,byte_count=180,bucket0:packet_count=3,byte_count=180,bucket1:packet_count=3,byte_count=180
502 OFPST_GROUP reply (OF1.2):
503 ])
504 OVS_VSWITCHD_STOP
505 AT_CLEANUP
506
507 AT_SETUP([ofproto-dpif - registers])
508 OVS_VSWITCHD_START
509 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
510 AT_DATA([flows.txt], [dnl
511 in_port=90                 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
512 in_port=91                 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
513 in_port=92                 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
514 in_port=93                 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
515
516 in_port=2                  actions=load:0x000db000->NXM_NX_REG0[[]]
517 in_port=3                  actions=load:0xdea->NXM_NX_REG0[[20..31]]
518 in_port=4                  actions=load:0xeef->NXM_NX_REG0[[0..11]]
519 in_port=5                  actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
520 in_port=6                  actions=load:0x22222222->NXM_NX_REG2[[]]
521 in_port=7                  actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
522 in_port=8                  actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
523 in_port=9,reg0=0xdeadbeef  actions=output:20
524 in_port=10,reg1=0xdeadbeef actions=output:21
525 in_port=11,reg2=0xeef22dea actions=output:22
526
527 dnl Sanilty check all registers
528 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
529 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
530 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
531 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
532
533 ])
534 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
535 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])
536 AT_CHECK([tail -1 stdout], [0],
537   [Datapath actions: 20,21,22,33
538 ])
539 OVS_VSWITCHD_STOP
540 AT_CLEANUP
541
542 dnl Tests that the standardized xregs are mapped onto the legacy OVS registers
543 dnl in the manner documented in ovs-ofctl(8).
544 AT_SETUP([ofproto-dpif - extended registers])
545 OVS_VSWITCHD_START
546 ADD_OF_PORTS([br0], [1], [2], [3])
547 AT_DATA([flows.txt], [dnl
548 table=0     actions=load:0xfedcba9876543210->OXM_OF_PKT_REG1[[]],resubmit(,1)
549 table=1,reg2=0xfedcba98,reg3=0x76543210   actions=2
550
551 # These low-priority rules shouldn't match.  They're here only to make really
552 # sure that the test fails if either of the above rules fails to match.
553 table=0,priority=0                        actions=3
554 table=1,priority=0                        actions=3
555 ])
556 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
557 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])
558 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
559 ])
560 OVS_VSWITCHD_STOP
561 AT_CLEANUP
562
563 AT_SETUP([ofproto-dpif - load and move order])
564 OVS_VSWITCHD_START
565 ADD_OF_PORTS([br0], [1], [10], [11])
566 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'])
567 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)'])
568 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])
569 AT_CHECK([tail -2 stdout], [0],
570   [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
571 Datapath actions: set(ipv4(src=255.255.255.255)),10,set(ipv4(src=192.168.0.1)),11
572 ])
573 OVS_VSWITCHD_STOP
574 AT_CLEANUP
575
576 dnl Tests that 1.5 copy-field can copy into the standardized xregs.
577 AT_SETUP([ofproto-dpif - copy-field into extended registers])
578 OVS_VSWITCHD_START
579 ADD_OF_PORTS([br0], [1], [2], [3])
580 AT_DATA([flows.txt], [dnl
581 table=0     actions=move:OXM_OF_ETH_SRC[[0..47]]->OXM_OF_PKT_REG0[[0..47]],goto_table(1)
582 table=1,xreg0=0x0000505400000005   actions=2
583
584 # These low-priority rules shouldn't match.  They're here only to make really
585 # sure that the test fails if either of the above rules fails to match.
586 table=0,priority=0                        actions=3
587 table=1,priority=0                        actions=3
588 ])
589 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
590 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])
591 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
592 ])
593 OVS_VSWITCHD_STOP
594 AT_CLEANUP
595
596 dnl Tests that 1.5 set-field with mask in the metadata register.
597 AT_SETUP([ofproto-dpif - masked set-field into metadata])
598 OVS_VSWITCHD_START
599 ADD_OF_PORTS([br0], [1], [2], [3])
600 AT_DATA([flows.txt], [dnl
601 table=0     actions=set_field:0xfafafafa5a5a5a5a->metadata,goto_table(1)
602 table=1     actions=set_field:0x6b/0xff->metadata,goto_table(2)
603 table=2,metadata=0xfafafafa5a5a5a6b  actions=2
604
605 # These low-priority rules shouldn't match.  They're here only to make really
606 # sure that the test fails if either of the above rules fails to match.
607 table=0,priority=0                        actions=3
608 table=1,priority=0                        actions=3
609 table=2,priority=0                        actions=3
610 ])
611 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
612 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])
613 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
614 ])
615 OVS_VSWITCHD_STOP
616 AT_CLEANUP
617
618
619 AT_SETUP([ofproto-dpif - actset_output])
620 OVS_VSWITCHD_START
621 ADD_OF_PORTS(
622   [br0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13])
623 AT_DATA([flows.txt], [dnl
624 table=0,actset_output=unset     actions=write_actions(output(2)),goto_table(1)
625 table=1     actions=move:ONFOXM_ET_ACTSET_OUTPUT[[0..31]]->OXM_OF_PKT_REG0[[0..31]],goto_table(2)
626
627 # Verify that actset_output got set.
628 table=2,priority=20,actset_output=2  actions=4,goto_table(3)
629 table=2,priority=10                  actions=5,goto_table(3)
630
631 # Verify that xreg0 got copied properly from actset_output.
632 table=3,priority=20,xreg0=2  actions=6,goto_table(4)
633 table=3,priority=10          actions=7,goto_table(4)
634
635 # Verify that adding a group action unsets actset_output,
636 # even if output follows group.
637 table=4 actions=write_actions(group(5),output(10)),goto_table(5)
638 table=5,priority=20,actset_output=unset  actions=8,goto_table(6)
639 table=5,priority=10                      actions=9,goto_table(6)
640
641 # Verify that adding another output action doesn't change actset_output
642 # (since there's still a group).
643 table=6 actions=write_actions(output(3)),goto_table(7)
644 table=7,priority=20,actset_output=unset  actions=10,goto_table(8)
645 table=7,priority=10                      actions=11,goto_table(8)
646
647 # Verify that clearing the action set, then writing an output action,
648 # causes actset_output to be set again.
649 table=8,actions=clear_actions,write_actions(output(3),output(2)),goto_table(9)
650 table=9,priority=20,actset_output=2 actions=12
651 table=9,priority=10                 actions=13
652 ])
653 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
654 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])
655 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 4,6,8,10,12,2
656 ])
657 OVS_VSWITCHD_STOP
658 AT_CLEANUP
659 AT_SETUP([ofproto-dpif - push-pop])
660 OVS_VSWITCHD_START
661 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
662 AT_DATA([flows.txt], [dnl
663 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
664 in_port=2            actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
665 in_port=3            actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
666 in_port=4            actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
667 in_port=5            actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
668
669 ])
670 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
671 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])
672 AT_CHECK([tail -1 stdout], [0],
673   [Datapath actions: 33,22,21,20
674 ])
675 OVS_VSWITCHD_STOP
676 AT_CLEANUP
677
678 AT_SETUP([ofproto-dpif - output])
679 OVS_VSWITCHD_START
680 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
681 AT_DATA([flows.txt], [dnl
682 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
683 in_port=2 actions=output:9
684 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
685 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
686 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
687 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
688 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
689 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
690 ])
691 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
692 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])
693 AT_CHECK([tail -1 stdout], [0],
694   [Datapath actions: 9,55,10,55,66,11,77,88,9,1
695 ])
696 OVS_VSWITCHD_STOP
697 AT_CLEANUP
698
699 AT_SETUP([ofproto-dpif - dec_ttl])
700 OVS_VSWITCHD_START
701 ADD_OF_PORTS([br0], [1], [2], [3], [4])
702 AT_DATA([flows.txt], [dnl
703 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
704 table=1 in_port=1 action=dec_ttl,output:3
705 ])
706 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
707 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])
708 AT_CHECK([tail -4 stdout], [0],
709   [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=2,nw_frag=no
710 Datapath actions: set(ipv4(ttl=1)),2,4
711 This flow is handled by the userspace slow path because it:
712         - Sends "packet-in" messages to the OpenFlow controller.
713 ])
714 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])
715 AT_CHECK([tail -2 stdout], [0],
716   [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=3,nw_frag=no
717 Datapath actions: set(ipv4(ttl=2)),2,set(ipv4(ttl=1)),3,4
718 ])
719 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])
720 AT_CHECK([tail -2 stdout], [0],
721   [Megaflow: recirc_id=0,ipv6,in_port=1,nw_ttl=128,nw_frag=no
722 Datapath actions: set(ipv6(hlimit=127)),2,set(ipv6(hlimit=126)),3,4
723 ])
724
725 AT_CAPTURE_FILE([ofctl_monitor.log])
726 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
727 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])
728 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
729 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
730 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
731 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
732 ])
733 OVS_VSWITCHD_STOP
734 AT_CLEANUP
735
736 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
737 dnl buffer to be resized just before pushing the id of the dec_ttl action.
738 dnl Thus the implementation must account for this by using the
739 dnl reallocated buffer rather than the original buffer.
740 dnl
741 dnl A number of similar rules are added to try and exercise
742 dnl xrealloc sufficiently that it returns a different base pointer
743 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
744 OVS_VSWITCHD_START
745 ADD_OF_PORTS([br0], [1])
746 (for i in `seq 0 255`; do
747   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
748  done) > flows.txt
749 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
750 OVS_VSWITCHD_STOP
751 AT_CLEANUP
752
753 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
754 dnl buffer to be resized just before pushing the id of the dec_ttl action.
755 dnl Thus the implementation must account for this by using the
756 dnl reallocated buffer rather than the original buffer.
757 dnl
758 dnl A number of similar rules are added to try and exercise
759 dnl xrealloc sufficiently that it returns a different base pointer
760 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
761 OVS_VSWITCHD_START
762 ADD_OF_PORTS([br0], [1])
763 (for i in `seq 0 255`; do
764   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
765  done) > flows.txt
766 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
767 OVS_VSWITCHD_STOP
768 AT_CLEANUP
769
770 dnl A note action at offset 24 in ofpacts will cause the ofpacts
771 dnl buffer to be resized just before pushing the id of the dec_ttl action.
772 dnl Thus the implementation must account for this by using the
773 dnl reallocated buffer rather than the original buffer.
774 dnl
775 dnl A number of similar rules are added to try and exercise
776 dnl xrealloc sufficiently that it returns a different base pointer
777 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
778 OVS_VSWITCHD_START
779 ADD_OF_PORTS([br0], [1])
780 (for i in `seq 0 255`; do
781   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
782  done) > flows.txt
783 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
784 OVS_VSWITCHD_STOP
785 AT_CLEANUP
786
787 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
788 OVS_VSWITCHD_START
789 ADD_OF_PORTS([br0], [1], [2])
790
791 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
792
793 # "in_port" defaults to OFPP_NONE if it's not specified.
794 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"
795 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
796 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
797 1
798 2
799 100
800 ])
801
802 OVS_VSWITCHD_STOP
803 AT_CLEANUP
804
805 AT_SETUP([ofproto-dpif - DSCP])
806 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
807 ADD_OF_PORTS([br0], [9])
808 AT_DATA([flows.txt], [dnl
809 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
810 ])
811 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
812 AT_CHECK([ovs-vsctl -- \
813         set Port p1 qos=@newqos --\
814         --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
815         --id=@q1 create Queue dscp=1 --\
816         --id=@q2 create Queue dscp=2], [0], [ignore])
817 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])
818 AT_CHECK([tail -2 stdout], [0],
819   [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=9,nw_tos=252,nw_frag=no
820 Datapath actions: dnl
821 100,dnl
822 set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl
823 set(ipv4(tos=0x8/0xfc)),set(skb_priority(0x2)),1,dnl
824 1,dnl
825 set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl
826 set(ipv4(tos=0xfc/0xfc)),set(skb_priority(0)),1,dnl
827 set(ipv4(tos=0/0xfc)),1,100
828 ])
829 OVS_VSWITCHD_STOP
830 AT_CLEANUP
831
832 AT_SETUP([ofproto-dpif - output/flood flags])
833 OVS_VSWITCHD_START
834 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
835
836 AT_DATA([flows.txt], [dnl
837 in_port=local actions=local,flood
838 in_port=1 actions=flood
839 in_port=2 actions=all
840 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
841 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
842 ])
843 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
844 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
845 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
846
847 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])
848 AT_CHECK([tail -1 stdout \
849 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
850 1
851 2
852 3
853 4
854 7
855 ])
856
857 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])
858 AT_CHECK([tail -1 stdout \
859 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
860 100
861 2
862 3
863 4
864 7
865 ])
866
867 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])
868 AT_CHECK([tail -1 stdout \
869 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
870 1
871 100
872 3
873 4
874 6
875 7
876 ])
877
878 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])
879 AT_CHECK([tail -1 stdout], [0],
880   [Datapath actions: 100,1,2,4,6,7
881 ])
882
883 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])
884 AT_CHECK([tail -1 stdout], [0],
885   [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
886 ])
887 OVS_VSWITCHD_STOP
888 AT_CLEANUP
889
890 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
891 OVS_VSWITCHD_START([dnl
892    add-port br0 p1 -- set Interface p1 type=dummy
893 ])
894 ON_EXIT([kill `cat ovs-ofctl.pid`])
895
896 AT_CAPTURE_FILE([ofctl_monitor.log])
897
898 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
899
900 for i in 1 2 3 ; do
901     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)'
902 done
903 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
904 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
905 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
906 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
907 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:0
908 dnl
909 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
910 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:0
911 dnl
912 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
913 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:0
914 ])
915
916 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
917 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
918 NXST_FLOW reply:
919 ])
920
921 OVS_VSWITCHD_STOP
922 AT_CLEANUP
923
924 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
925 OVS_VSWITCHD_START([dnl
926    add-port br0 p1 -- set Interface p1 type=dummy
927 ])
928 ON_EXIT([kill `cat ovs-ofctl.pid`])
929
930 AT_CAPTURE_FILE([ofctl_monitor.log])
931 AT_CHECK([ovs-ofctl del-flows br0])
932
933 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
934
935 dnl Test that missed packets are droped
936 for i in 1 2 3 ; do
937     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)'
938 done
939 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
940
941 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
942 ])
943
944 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
945 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
946 OFPST_FLOW reply (OF1.3):
947 ])
948
949 OVS_VSWITCHD_STOP
950 AT_CLEANUP
951
952 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
953 OVS_VSWITCHD_START([dnl
954    add-port br0 p1 -- set Interface p1 type=dummy
955 ])
956 ON_EXIT([kill `cat ovs-ofctl.pid`])
957
958 AT_CAPTURE_FILE([ofctl_monitor.log])
959 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
960
961 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
962
963 for i in 1 2 3 ; do
964     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)'
965 done
966 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
967 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
968 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
969 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
970 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:0
971 dnl
972 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
973 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:0
974 dnl
975 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
976 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:0
977 ])
978
979 AT_CHECK([ovs-appctl revalidator/purge], [0])
980 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
981  n_packets=3, n_bytes=180, actions=goto_table:1
982 OFPST_FLOW reply (OF1.2):
983 ])
984
985 OVS_VSWITCHD_STOP
986 AT_CLEANUP
987
988 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
989 OVS_VSWITCHD_START([dnl
990    add-port br0 p1 -- set Interface p1 type=dummy
991 ])
992 ON_EXIT([kill `cat ovs-ofctl.pid`])
993
994 AT_CAPTURE_FILE([ofctl_monitor.log])
995 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
996
997 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
998
999 for i in 1 2 3 ; do
1000     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)'
1001 done
1002
1003 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1004 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1005 ])
1006
1007 AT_CHECK([ovs-appctl revalidator/purge], [0])
1008 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1009  n_packets=3, n_bytes=180, actions=resubmit(1,1)
1010 OFPST_FLOW reply (OF1.2):
1011 ])
1012
1013 OVS_VSWITCHD_STOP
1014 AT_CLEANUP
1015
1016 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
1017 OVS_VSWITCHD_START([dnl
1018    add-port br0 p1 -- set Interface p1 type=dummy
1019 ])
1020 ON_EXIT([kill `cat ovs-ofctl.pid`])
1021
1022 AT_CAPTURE_FILE([ofctl_monitor.log])
1023 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
1024 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1025
1026 dnl Miss table 0, Hit table 1
1027 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1028
1029 for i in 1 2 3 ; do
1030     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)'
1031 done
1032 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1033 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1034
1035 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1036 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1037 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:0
1038 dnl
1039 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1040 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:0
1041 dnl
1042 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1043 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:0
1044 ])
1045
1046 dnl Hit table 0, Miss all other tables, sent to controller
1047 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1048
1049 for i in 1 2 3 ; do
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(0x010)'
1051 done
1052 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1053 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1054
1055 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1056 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1057 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:0
1058 dnl
1059 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1060 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:0
1061 dnl
1062 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1063 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:0
1064 ])
1065
1066 AT_CHECK([ovs-appctl revalidator/purge], [0])
1067 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1068  table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1069 OFPST_FLOW reply (OF1.2):
1070 ])
1071
1072 OVS_VSWITCHD_STOP
1073 AT_CLEANUP
1074
1075 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
1076 OVS_VSWITCHD_START([dnl
1077    add-port br0 p1 -- set Interface p1 type=dummy
1078 ])
1079 ON_EXIT([kill `cat ovs-ofctl.pid`])
1080
1081 AT_CAPTURE_FILE([ofctl_monitor.log])
1082 AT_DATA([flows.txt], [dnl
1083 table=0 actions=goto_table(1)
1084 table=2 dl_src=10:11:11:11:11:11 actions=controller
1085 ])
1086 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
1087 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1088
1089 dnl Hit table 0, Miss table 1, Hit table 2
1090 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1091
1092 for i in 1 2 3 ; do
1093     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)'
1094 done
1095 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1096 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1097
1098 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1099 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1100 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:0
1101 dnl
1102 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1103 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:0
1104 dnl
1105 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1106 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:0
1107 ])
1108
1109 dnl Hit table 1, Miss all other tables, sent to controller
1110 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1111
1112 for i in 1 2 3 ; do
1113     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)'
1114 done
1115 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1116 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1117
1118 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1119 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1120 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:0
1121 dnl
1122 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1123 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:0
1124 dnl
1125 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1126 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:0
1127 ])
1128
1129 AT_CHECK([ovs-appctl revalidator/purge], [0])
1130 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1131  n_packets=6, n_bytes=360, actions=goto_table:1
1132  table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1133 OFPST_FLOW reply (OF1.2):
1134 ])
1135
1136 OVS_VSWITCHD_STOP
1137 AT_CLEANUP
1138
1139 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
1140 OVS_VSWITCHD_START([dnl
1141    add-port br0 p1 -- set Interface p1 type=dummy
1142 ])
1143 ON_EXIT([kill `cat ovs-ofctl.pid`])
1144
1145 AT_CAPTURE_FILE([ofctl_monitor.log])
1146 AT_DATA([flows.txt], [dnl
1147 table=0 actions=resubmit(1,1)
1148 table=2 dl_src=10:11:11:11:11:11 actions=controller
1149 ])
1150 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
1151 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1152
1153 dnl Hit table 0, Miss table 1, Dropped
1154 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1155
1156 for i in 1 2 3 ; do
1157     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)'
1158 done
1159 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1160
1161 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1162 ])
1163
1164 dnl Hit table 1, Dropped
1165 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1166
1167 for i in 1 2 3 ; do
1168     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)'
1169 done
1170 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1171
1172 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1173 ])
1174
1175 AT_CHECK([ovs-appctl revalidator/purge], [0])
1176 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1177  n_packets=6, n_bytes=360, actions=resubmit(1,1)
1178  table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1179 OFPST_FLOW reply (OF1.2):
1180 ])
1181
1182 OVS_VSWITCHD_STOP
1183 AT_CLEANUP
1184
1185 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
1186 OVS_VSWITCHD_START([dnl
1187    add-port br0 p1 -- set Interface p1 type=dummy
1188 ])
1189 ON_EXIT([kill `cat ovs-ofctl.pid`])
1190
1191 AT_CAPTURE_FILE([ofctl_monitor.log])
1192 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1193
1194 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1195
1196 dnl Test that missed packets are droped
1197 for i in 1 2 3 ; do
1198     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)'
1199 done
1200 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1201
1202 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1203 ])
1204
1205 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1206 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1207 NXST_FLOW reply:
1208 ])
1209
1210 OVS_VSWITCHD_STOP
1211 AT_CLEANUP
1212
1213 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
1214 OVS_VSWITCHD_START([dnl
1215    add-port br0 p1 -- set Interface p1 type=dummy
1216 ])
1217 ON_EXIT([kill `cat ovs-ofctl.pid`])
1218
1219 AT_CAPTURE_FILE([ofctl_monitor.log])
1220 AT_CHECK([ovs-ofctl del-flows br0])
1221 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1222 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1223
1224 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1225
1226 dnl Test that missed packets are droped
1227 for i in 1 2 3 ; do
1228     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)'
1229 done
1230 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1231
1232 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1233 ])
1234
1235 AT_CHECK([ovs-appctl revalidator/purge], [0])
1236 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1237  n_packets=3, n_bytes=180, actions=goto_table:1
1238 OFPST_FLOW reply (OF1.2):
1239 ])
1240
1241 OVS_VSWITCHD_STOP
1242 AT_CLEANUP
1243
1244 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1245 OVS_VSWITCHD_START([dnl
1246    add-port br0 p1 -- set Interface p1 type=dummy
1247 ])
1248 ON_EXIT([kill `cat ovs-ofctl.pid`])
1249
1250 AT_CAPTURE_FILE([ofctl_monitor.log])
1251 AT_CHECK([ovs-ofctl del-flows br0])
1252 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1253 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1254
1255 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1256
1257 dnl Test that missed packets are droped
1258 for i in 1 2 3 ; do
1259     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)'
1260 done
1261 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1262
1263 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1264 ])
1265
1266 AT_CHECK([ovs-appctl revalidator/purge], [0])
1267 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1268  n_packets=3, n_bytes=180, actions=resubmit(1,1)
1269 OFPST_FLOW reply (OF1.2):
1270 ])
1271
1272 OVS_VSWITCHD_STOP
1273 AT_CLEANUP
1274
1275 AT_SETUP([ofproto-dpif - controller])
1276 OVS_VSWITCHD_START([dnl
1277    add-port br0 p1 -- set Interface p1 type=dummy
1278 ])
1279 ON_EXIT([kill `cat ovs-ofctl.pid`])
1280
1281 AT_CAPTURE_FILE([ofctl_monitor.log])
1282 AT_DATA([flows.txt], [dnl
1283 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1284 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1285 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1286
1287 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1288 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)
1289 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)
1290 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1291 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)
1292 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1293 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1294 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1295 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
1296 ])
1297 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1298
1299 dnl Flow miss.
1300 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1301
1302 for i in 1 2 3 ; do
1303     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)'
1304 done
1305 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1306 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1307
1308 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1309 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1310 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:0
1311 dnl
1312 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1313 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:0
1314 dnl
1315 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1316 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:0
1317 ])
1318
1319 dnl Singleton controller action.
1320 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1321
1322 for i in 1 2 3 ; do
1323     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)'
1324 done
1325 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1326 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1327
1328 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1329 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1330 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:0
1331 dnl
1332 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1333 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:0
1334 dnl
1335 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1336 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:0
1337 ])
1338
1339 dnl Modified controller action.
1340 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1341
1342 for i in 1 2 3 ; do
1343     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)'
1344 done
1345 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1346 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1347
1348 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1349 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1350 tcp,dl_vlan=15,dl_vlan_pcp=0,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:0
1351 dnl
1352 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1353 tcp,dl_vlan=15,dl_vlan_pcp=0,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:0
1354 dnl
1355 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1356 tcp,dl_vlan=15,dl_vlan_pcp=0,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:0
1357 ])
1358
1359 dnl Modified VLAN controller action.
1360 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1361
1362 for i in 1 2 3; do
1363     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)'
1364 done
1365 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1366 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1367
1368 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1369 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1370 ip,dl_vlan=99,dl_vlan_pcp=1,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
1371 dnl
1372 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1373 ip,dl_vlan=99,dl_vlan_pcp=1,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
1374 dnl
1375 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1376 ip,dl_vlan=99,dl_vlan_pcp=1,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
1377 ])
1378
1379 dnl Checksum TCP.
1380 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1381
1382 for i in 1 ; do
1383     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)'
1384 done
1385 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1386 ovs-appctl -t ovs-ofctl exit
1387
1388 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1389 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1390 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:0
1391 dnl
1392 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 reg0=0x1,in_port=1 (via action) data_len=64 (unbuffered)
1393 tcp,dl_vlan=80,dl_vlan_pcp=0,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:0
1394 dnl
1395 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)
1396 tcp,dl_vlan=80,dl_vlan_pcp=0,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:0
1397 dnl
1398 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)
1399 tcp,dl_vlan=80,dl_vlan_pcp=0,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:0
1400 dnl
1401 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)
1402 tcp,dl_vlan=80,dl_vlan_pcp=0,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:1a03
1403 dnl
1404 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)
1405 tcp,dl_vlan=80,dl_vlan_pcp=0,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:3205
1406 dnl
1407 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)
1408 tcp,dl_vlan=80,dl_vlan_pcp=0,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:31b8
1409 dnl
1410 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)
1411 tcp,dl_vlan=80,dl_vlan_pcp=0,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:316d
1412 dnl
1413 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)
1414 tcp,dl_vlan=80,dl_vlan_pcp=0,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:316d
1415 ])
1416
1417 dnl Checksum UDP.
1418 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1419
1420 for i in 1 ; do
1421     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'
1422 done
1423 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1424 ovs-appctl -t ovs-ofctl exit
1425
1426 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1427 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1428 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
1429 dnl
1430 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 reg0=0x1,in_port=1 (via action) data_len=64 (unbuffered)
1431 udp,dl_vlan=80,dl_vlan_pcp=0,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
1432 dnl
1433 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)
1434 udp,dl_vlan=80,dl_vlan_pcp=0,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
1435 dnl
1436 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)
1437 udp,dl_vlan=80,dl_vlan_pcp=0,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
1438 dnl
1439 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)
1440 udp,dl_vlan=80,dl_vlan_pcp=0,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
1441 dnl
1442 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)
1443 udp,dl_vlan=80,dl_vlan_pcp=0,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
1444 dnl
1445 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)
1446 udp,dl_vlan=80,dl_vlan_pcp=0,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
1447 dnl
1448 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)
1449 udp,dl_vlan=80,dl_vlan_pcp=0,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
1450 dnl
1451 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)
1452 udp,dl_vlan=80,dl_vlan_pcp=0,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
1453 ])
1454
1455 dnl Modified ARP controller action.
1456 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1457
1458 for i in 1 2 3; do
1459     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)'
1460 done
1461
1462 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1463 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1464 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1465 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1466 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
1467 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1468 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
1469 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1470 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
1471 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1472 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
1473 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1474 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
1475 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1476 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
1477 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1478 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
1479 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1480 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
1481 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1482 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
1483 ])
1484
1485 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1486
1487 dnl Checksum SCTP.
1488 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1489
1490 for i in 1 ; do
1491     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'
1492 done
1493
1494 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
1495 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1496 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1497 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1498 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1499 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
1500 dnl
1501 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 reg0=0x1,in_port=1 (via action) data_len=102 (unbuffered)
1502 sctp,dl_vlan=80,dl_vlan_pcp=0,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
1503 dnl
1504 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)
1505 sctp,dl_vlan=80,dl_vlan_pcp=0,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
1506 dnl
1507 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)
1508 sctp,dl_vlan=80,dl_vlan_pcp=0,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
1509 dnl
1510 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)
1511 sctp,dl_vlan=80,dl_vlan_pcp=0,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
1512 dnl
1513 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)
1514 sctp,dl_vlan=80,dl_vlan_pcp=0,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
1515 dnl
1516 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)
1517 sctp,dl_vlan=80,dl_vlan_pcp=0,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
1518 dnl
1519 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)
1520 sctp,dl_vlan=80,dl_vlan_pcp=0,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
1521 dnl
1522 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)
1523 sctp,dl_vlan=80,dl_vlan_pcp=0,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
1524 ])
1525
1526 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1527  cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1528  cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1529  cookie=0x3, table=1, n_packets=3, n_bytes=218, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
1530  cookie=0x4, table=2, n_packets=3, n_bytes=218, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
1531  cookie=0x5, table=3, n_packets=3, n_bytes=218, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
1532  cookie=0x6, table=4, n_packets=3, n_bytes=218, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
1533  cookie=0x7, table=5, n_packets=3, n_bytes=218, 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)
1534  cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1535  cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1536  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
1537  cookie=0xd, n_packets=3, n_bytes=180, 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
1538  n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1539 NXST_FLOW reply:
1540 ])
1541
1542 OVS_VSWITCHD_STOP
1543 AT_CLEANUP
1544
1545 AT_SETUP([ofproto-dpif - MPLS handling])
1546 OVS_VSWITCHD_START([dnl
1547    add-port br0 p1 -- set Interface p1 type=dummy
1548 ])
1549 ON_EXIT([kill `cat ovs-ofctl.pid`])
1550
1551 AT_CAPTURE_FILE([ofctl_monitor.log])
1552 AT_DATA([flows.txt], [dnl
1553 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
1554 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
1555 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
1556 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
1557 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
1558 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
1559 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
1560 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
1561 cookie=0xa mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:10->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1562 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1563 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1564 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
1565
1566 cookie=0xd dl_src=60:66:66:66:00:01 actions=pop_mpls:0x0800,dec_ttl,controller
1567 cookie=0xd dl_src=60:66:66:66:00:02 actions=pop_mpls:0x0800,load:0xa000001->OXM_OF_IPV4_DST[[]],controller
1568 cookie=0xd dl_src=60:66:66:66:00:03 actions=pop_mpls:0x0800,move:OXM_OF_IPV4_DST[[]]->OXM_OF_IPV4_SRC[[]],controller
1569 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
1570 cookie=0xd dl_src=60:66:66:66:00:05 actions=pop_mpls:0x0800,multipath(eth_src,50,modulo_n,256,0,OXM_OF_IPV4_SRC[[0..7]]),controller
1571 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
1572 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
1573
1574 cookie=0xd dl_src=60:66:66:66:00:08 actions=pop_mpls:0x0806,resubmit(1,1)
1575 cookie=0xd table=1 arp actions=controller
1576
1577 cookie=0xdeadbeef table=2 dl_src=60:66:66:66:00:09 actions=pop_mpls:0x0800,mod_nw_tos:48
1578 cookie=0xd dl_src=60:66:66:66:00:09 actions=resubmit(,2),controller
1579 cookie=0xd dl_src=60:66:66:66:00:0a actions=pop_mpls:0x0800,mod_nw_dst:10.0.0.1,controller
1580 cookie=0xd dl_src=60:66:66:66:00:0b actions=pop_mpls:0x0800,mod_nw_src:10.0.0.1,controller
1581
1582 cookie=0xd dl_src=60:66:66:66:01:00 actions=pop_mpls:0x8848,controller
1583 cookie=0xd dl_src=60:66:66:66:01:01 actions=pop_mpls:0x8847,dec_mpls_ttl,controller
1584 cookie=0xd dl_src=60:66:66:66:01:02 actions=pop_mpls:0x8848,load:3->OXM_OF_MPLS_TC[[]],controller
1585
1586 cookie=0xd dl_src=60:66:66:66:02:00 actions=pop_mpls:0x8847,pop_mpls:0x0800,controller
1587 cookie=0xe dl_src=60:66:66:66:02:01 actions=pop_mpls:0x8848,pop_mpls:0x0800,dec_ttl,controller
1588 cookie=0xe dl_src=60:66:66:66:02:10 actions=pop_mpls:0x8847,dec_mpls_ttl,pop_mpls:0x0800,dec_ttl,controller
1589
1590 cookie=0xe dl_src=60:66:66:66:03:00 actions=pop_mpls:0x8848,pop_mpls:0x8848,controller
1591 cookie=0xe dl_src=60:66:66:66:03:01 actions=pop_mpls:0x8847,pop_mpls:0x8847,dec_mpls_ttl,controller
1592 cookie=0xe dl_src=60:66:66:66:03:10 actions=pop_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8848,dec_mpls_ttl,controller
1593
1594 cookie=0xf dl_src=60:66:66:66:04:00 actions=pop_mpls:0x0800,push_mpls:0x8847,controller
1595 cookie=0xf dl_src=60:66:66:66:04:01 actions=pop_mpls:0x0800,push_mpls:0x8848,dec_mpls_ttl,controller
1596 cookie=0xf dl_src=60:66:66:66:04:10 actions=pop_mpls:0x0800,dec_ttl,push_mpls:0x8848,dec_mpls_ttl,controller
1597
1598 cookie=0x5 dl_src=60:66:66:66:05:00 actions=push_mpls:0x8848,pop_mpls:0x8847,controller
1599 cookie=0x5 dl_src=60:66:66:66:05:01 actions=push_mpls:0x8847,pop_mpls:0x8848,dec_mpls_ttl,controller
1600 cookie=0x5 dl_src=60:66:66:66:05:10 actions=push_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8847,dec_mpls_ttl,controller
1601 ])
1602 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1603
1604 dnl Modified MPLS controller action.
1605 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1606
1607 for i in 1 2 3; do
1608     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)'
1609 done
1610 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1611 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1612
1613 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1614 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1615 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
1616 dnl
1617 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1618 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
1619 dnl
1620 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1621 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
1622 ])
1623
1624 dnl Modified MPLS controller action.
1625 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1626
1627 for i in 1 2 3; do
1628     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)'
1629 done
1630 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1631 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1632
1633 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1634 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1635 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
1636 dnl
1637 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1638 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
1639 dnl
1640 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1641 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
1642 ])
1643
1644 dnl Modified MPLS controller action.
1645 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1646
1647 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)
1648
1649 for i in 1 2 3; do
1650     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)'
1651 done
1652 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1653 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1654
1655 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1656 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1657 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
1658 dnl
1659 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1660 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
1661 dnl
1662 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1663 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
1664 ])
1665
1666 dnl Modified MPLS controller action.
1667 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1668
1669 for i in 1 2 3; do
1670     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))'
1671 done
1672 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1673 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1674
1675 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1676 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1677 mpls,dl_vlan=99,dl_vlan_pcp=7,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
1678 dnl
1679 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1680 mpls,dl_vlan=99,dl_vlan_pcp=7,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
1681 dnl
1682 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1683 mpls,dl_vlan=99,dl_vlan_pcp=7,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
1684 ])
1685
1686 dnl Modified MPLS controller action.
1687 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1688
1689 for i in 1 2 3; do
1690     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)'
1691 done
1692 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1693 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1694
1695 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1696 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1697 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
1698 dnl
1699 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1700 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
1701 dnl
1702 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1703 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
1704 ])
1705
1706 dnl Modified MPLS controller action.
1707 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1708
1709 for i in 1 2 3; do
1710     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)'
1711 done
1712 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1713 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1714
1715 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1716 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1717 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
1718 dnl
1719 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1720 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
1721 dnl
1722 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1723 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
1724 ])
1725
1726 dnl Modified MPLS controller action.
1727 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1728
1729 for i in 1 2 3; do
1730     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)'
1731 done
1732 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1733 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1734
1735 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1736 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1737 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
1738 dnl
1739 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1740 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
1741 dnl
1742 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1743 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
1744 ])
1745
1746 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1747
1748 dnl Modified MPLS controller action.
1749 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1750
1751 for i in 1 2 3; do
1752     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)'
1753 done
1754 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1755 ovs-appctl -t ovs-ofctl exit
1756
1757 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1758 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1759 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
1760 dnl
1761 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1762 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
1763 dnl
1764 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1765 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
1766 ])
1767
1768 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1769
1770 dnl Modified MPLS controller action.
1771 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1772
1773 for i in 1 2 3; do
1774     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)'
1775 done
1776 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1777 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1778
1779 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1780 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1781 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
1782 dnl
1783 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1784 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
1785 dnl
1786 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1787 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
1788 ])
1789
1790 dnl Modified MPLS actions.
1791 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1792
1793 for i in 1 2 3; do
1794     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)'
1795 done
1796 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1797 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1798
1799 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1800 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1801 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
1802 dnl
1803 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1804 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
1805 dnl
1806 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1807 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
1808 ])
1809
1810 dnl Modified MPLS ipv6 controller action.
1811 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1812
1813 for i in 1 2 3; do
1814     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)'
1815 done
1816 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1817 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1818
1819 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1820 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1821 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
1822 dnl
1823 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1824 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
1825 dnl
1826 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1827 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
1828 ])
1829
1830
1831 dnl Modified MPLS pop action.
1832 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1833 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)
1834 dnl             (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1835
1836 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1837
1838 for i in 1 2 3; do
1839     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'
1840 done
1841 #for i in 2 3; do
1842 #    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)'
1843 #done
1844 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1845 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1846
1847 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1848 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1849 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
1850 dnl
1851 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1852 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
1853 dnl
1854 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1855 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
1856 ])
1857
1858 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1859
1860 dnl Modified MPLS pop action.
1861 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1862 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)
1863 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1864 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1865 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1866
1867 for i in 1 2 3; do
1868     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'
1869 done
1870 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1871 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1872
1873 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
1874 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1875 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
1876 dnl
1877 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1878 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
1879 dnl
1880 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1881 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
1882 ])
1883
1884 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1885
1886 dnl Modified MPLS pop action.
1887 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1888 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)
1889 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1890 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1891 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1892
1893 for i in 1 2 3; do
1894     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'
1895 done
1896 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1897 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1898
1899 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
1900 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1901 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
1902 dnl
1903 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1904 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
1905 dnl
1906 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1907 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
1908 ])
1909
1910 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1911
1912 dnl Modified MPLS pop action.
1913 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1914 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)
1915 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1916 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1917 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1918
1919 for i in 1 2 3; do
1920     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'
1921 done
1922 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1923 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1924
1925 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
1926 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1927 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
1928 dnl
1929 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1930 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
1931 dnl
1932 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1933 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
1934 ])
1935
1936 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1937
1938 dnl Modified MPLS pop action.
1939 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1940 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)
1941 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1942 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1943 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1944
1945 for i in 1 2 3; do
1946     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'
1947 done
1948 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1949 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1950
1951 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
1952 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1953 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
1954 dnl
1955 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1956 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
1957 dnl
1958 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1959 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
1960 ])
1961
1962 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1963
1964 dnl Modified MPLS pop action.
1965 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1966 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)
1967 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1968 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1969 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1970
1971 for i in 1 2 3; do
1972     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'
1973 done
1974 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1975 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1976
1977 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
1978 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1979 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.106,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:76db
1980 dnl
1981 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1982 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.106,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:76db
1983 dnl
1984 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1985 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.106,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:76db
1986 ])
1987
1988 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1989
1990 dnl Modified MPLS pop action.
1991 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1992 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)
1993 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1994 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1995 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1996
1997 for i in 1 2 3; do
1998     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'
1999 done
2000 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2001 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2002
2003 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2004 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2005 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
2006 dnl
2007 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2008 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
2009 dnl
2010 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2011 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
2012 ])
2013
2014 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2015
2016 dnl Modified MPLS pop action.
2017 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2018 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)
2019 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2020 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2021 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2022
2023 for i in 1 2 3; do
2024     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'
2025 done
2026 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2027 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2028
2029 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2030 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2031 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
2032 dnl
2033 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2034 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
2035 dnl
2036 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2037 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
2038 ])
2039
2040 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2041
2042 dnl Modified MPLS pop action.
2043 dnl The input is an ARP frame with a single MPLS label stack entry which tcpdump -vve shows as:
2044 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)
2045 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2046
2047 for i in 1 2 3; do
2048     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'
2049 done
2050 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2051 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2052
2053 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2054 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
2055 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
2056 dnl
2057 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
2058 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
2059 dnl
2060 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
2061 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
2062 ])
2063
2064 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2065
2066 dnl Modified MPLS pop action.
2067 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2068 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)
2069 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2070 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2071 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2072
2073 for i in 1 2 3; do
2074     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'
2075 done
2076 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2077 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2078
2079 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2080 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2081 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
2082 dnl
2083 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2084 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
2085 dnl
2086 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2087 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
2088 ])
2089
2090 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2091
2092 dnl Modified MPLS pop action.
2093 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2094 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)
2095 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2096 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2097 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2098
2099 for i in 1 2 3; do
2100     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'
2101 done
2102 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2103 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2104
2105 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2106 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2107 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
2108 dnl
2109 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2110 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
2111 dnl
2112 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2113 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
2114 ])
2115
2116 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2117
2118 dnl Modified MPLS pop action.
2119 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2120 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)
2121 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2122 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2123 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2124
2125 for i in 1 2 3; do
2126     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'
2127 done
2128 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2129 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2130
2131 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2132 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2133 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
2134 dnl
2135 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2136 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
2137 dnl
2138 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2139 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
2140 ])
2141
2142 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2143
2144 dnl Modified MPLS pop action.
2145 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2146 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)
2147 dnl             (label 20, exp 0, [S], ttl 31)
2148 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2149 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2150 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2151
2152 for i in 1 2 3; do
2153     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'
2154 done
2155 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2156 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2157
2158 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2159 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2160 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
2161 dnl
2162 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2163 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
2164 dnl
2165 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2166 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
2167 ])
2168
2169 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2170
2171 dnl Modified MPLS pop action.
2172 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2173 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)
2174 dnl             (label 20, exp 0, [S], ttl 31)
2175 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2176 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2177 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2178
2179 for i in 1 2 3; do
2180     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'
2181 done
2182 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2183 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2184
2185 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2186 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2187 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
2188 dnl
2189 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2190 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
2191 dnl
2192 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2193 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
2194 ])
2195
2196 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2197
2198 dnl Modified MPLS pop action.
2199 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2200 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)
2201 dnl             (label 20, exp 0, [S], ttl 31)
2202 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2203 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2204 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2205
2206 for i in 1 2 3; do
2207     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'
2208 done
2209 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2210 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2211
2212 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2213 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2214 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
2215 dnl
2216 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2217 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
2218 dnl
2219 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2220 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
2221 ])
2222
2223 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2224
2225 dnl Modified MPLS pop action.
2226 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2227 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)
2228 dnl             (label 20, exp 0, [S], ttl 31)
2229 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2230 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2231 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2232
2233 for i in 1 2 3; do
2234     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'
2235 done
2236 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2237 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2238
2239 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2240 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2241 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
2242 dnl
2243 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2244 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
2245 dnl
2246 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2247 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
2248 ])
2249
2250 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2251
2252 dnl Modified MPLS pop action.
2253 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2254 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)
2255 dnl             (label 20, exp 0, [S], ttl 31)
2256 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2257 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2258 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2259
2260 for i in 1 2 3; do
2261     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'
2262 done
2263
2264 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2265 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2266
2267 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2268 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2269 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
2270 dnl
2271 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2272 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
2273 dnl
2274 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2275 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
2276 ])
2277
2278 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2279
2280 dnl Modified MPLS pop action.
2281 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2282 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)
2283 dnl             (label 20, exp 0, [S], ttl 31)
2284 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2285 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2286 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2287
2288 for i in 1 2 3; do
2289     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'
2290 done
2291 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2292 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2293
2294 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2295 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2296 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
2297 dnl
2298 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2299 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
2300 dnl
2301 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2302 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
2303 ])
2304
2305 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2306
2307 dnl Modified MPLS pop action.
2308 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2309 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)
2310 dnl             (label 20, exp 0, ttl 31)
2311 dnl             (label 20, exp 0, [S], ttl 30)
2312 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2313 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2314 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2315
2316 for i in 1 2 3; do
2317     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'
2318 done
2319 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2320 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2321
2322 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2323 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2324 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
2325 dnl
2326 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2327 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
2328 dnl
2329 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2330 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
2331 ])
2332
2333 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2334
2335 dnl Modified MPLS pop action.
2336 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2337 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)
2338 dnl             (label 20, exp 0, ttl 31)
2339 dnl             (label 20, exp 0, [S], ttl 30)
2340 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2341 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2342 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2343
2344 for i in 1 2 3; do
2345     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'
2346 done
2347 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2348 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2349
2350 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2351 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2352 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
2353 dnl
2354 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2355 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
2356 dnl
2357 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2358 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
2359 ])
2360
2361 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2362
2363 dnl Modified MPLS pop action.
2364 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2365 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)
2366 dnl             (label 20, exp 0, ttl 31)
2367 dnl             (label 20, exp 0, [S], ttl 30)
2368 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2369 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2370 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2371
2372 for i in 1 2 3; do
2373     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'
2374 done
2375 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2376 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2377
2378 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2379 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2380 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
2381 dnl
2382 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2383 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
2384 dnl
2385 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2386 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
2387 ])
2388
2389 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2390
2391 dnl Modified MPLS pop action.
2392 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2393 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)
2394 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2395 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2396 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2397
2398 for i in 1 2 3; do
2399     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'
2400 done
2401 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2402 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2403
2404 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2405 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2406 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
2407 dnl
2408 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2409 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
2410 dnl
2411 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2412 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
2413 ])
2414
2415 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2416
2417 dnl Modified MPLS pop action.
2418 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2419 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)
2420 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2421 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2422 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2423
2424 for i in 1 2 3; do
2425     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'
2426 done
2427 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2428 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2429
2430 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2431 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2432 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
2433 dnl
2434 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2435 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
2436 dnl
2437 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2438 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
2439 ])
2440
2441 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2442
2443 dnl Modified MPLS pop action.
2444 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2445 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)
2446 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2447 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2448 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2449
2450 for i in 1 2 3; do
2451     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'
2452 done
2453 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2454 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2455
2456 AT_CHECK([STRIP_METADATA  ofctl_monitor.log], [0], [dnl
2457 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2458 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
2459 dnl
2460 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2461 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
2462 dnl
2463 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2464 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
2465 ])
2466
2467 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2468
2469 dnl Modified MPLS pop action.
2470 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2471 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)
2472 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2473 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2474 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2475
2476 for i in 1 2 3; do
2477     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'
2478 done
2479
2480 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2481 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2482
2483 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2484 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2485 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
2486 dnl
2487 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2488 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
2489 dnl
2490 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2491 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
2492 ])
2493
2494 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2495
2496 dnl Modified MPLS pop action.
2497 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2498 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)
2499 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2500 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2501 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2502
2503 for i in 1 2 3; do
2504     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'
2505 done
2506 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2507 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2508
2509 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2510 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2511 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
2512 dnl
2513 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2514 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
2515 dnl
2516 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2517 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
2518 ])
2519
2520 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2521
2522 dnl Modified MPLS pop action.
2523 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2524 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)
2525 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2526 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2527 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2528
2529 for i in 1 2 3; do
2530     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'
2531 done
2532
2533 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2534 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2535
2536 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2537 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2538 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
2539 dnl
2540 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2541 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
2542 dnl
2543 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2544 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
2545 ])
2546
2547 AT_CHECK([ovs-appctl revalidator/purge], [0])
2548 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
2549  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
2550  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
2551  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
2552  cookie=0xa, n_packets=3, n_bytes=180, 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
2553  cookie=0xa, n_packets=3, n_bytes=180, 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
2554  cookie=0xa, n_packets=3, n_bytes=180, 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
2555  cookie=0xa, n_packets=3, n_bytes=180, 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
2556  cookie=0xa, n_packets=3, n_bytes=180, 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
2557  cookie=0xa, n_packets=3, n_bytes=180, 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
2558  cookie=0xa, n_packets=3, n_bytes=180, 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
2559  cookie=0xa, n_packets=3, n_bytes=180, 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
2560  cookie=0xa, n_packets=3, n_bytes=180, mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2561  cookie=0xb, n_packets=3, n_bytes=180, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2562  cookie=0xc, n_packets=3, n_bytes=180, 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
2563  cookie=0xd, n_packets=3, n_bytes=180, dl_src=60:66:66:66:00:08 actions=pop_mpls:0x0806,resubmit(1,1)
2564  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:01 actions=pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
2565  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
2566  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
2567  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
2568  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,256,0,NXM_OF_IP_SRC[[0..7]]),CONTROLLER:65535
2569  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
2570  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
2571  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:09 actions=resubmit(,2),CONTROLLER:65535
2572  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
2573  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
2574  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
2575  cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:00 actions=pop_mpls:0x8848,CONTROLLER:65535
2576  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
2577  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
2578  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
2579  cookie=0xd, table=1, n_packets=3, n_bytes=168, arp actions=CONTROLLER:65535
2580  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
2581  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
2582  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
2583  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
2584  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
2585  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
2586  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
2587  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
2588  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
2589 NXST_FLOW reply:
2590 ])
2591
2592 OVS_VSWITCHD_STOP
2593 AT_CLEANUP
2594
2595 AT_SETUP([ofproto-dpif - MPLS handling with goto_table])
2596 OVS_VSWITCHD_START([dnl
2597    add-port br0 p1 -- set Interface p1 type=dummy
2598 ])
2599 ON_EXIT([kill `cat ovs-ofctl.pid`])
2600
2601 AT_CAPTURE_FILE([ofctl_monitor.log])
2602 AT_DATA([flows.txt], [dnl
2603 table=0 mplsm actions=pop_mpls:0x800,goto_table(1)
2604 table=1 ip,ip_dscp=8 actions=controller
2605 ])
2606 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2607
2608
2609 dnl Modified MPLS pop action.
2610 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2611 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)
2612 dnl             (tos 0x20, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2613 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2614 AT_CHECK([ovs-ofctl -O OpenFlow12 monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2615
2616 for i in 1 2 3; do
2617     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'
2618 done
2619 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2620 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2621
2622 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2623 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2624 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
2625 dnl
2626 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2627 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
2628 dnl
2629 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2630 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
2631 ])
2632
2633 AT_CHECK([ovs-appctl revalidator/purge], [0])
2634 AT_CHECK([ovs-ofctl -O OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2635  n_packets=3, n_bytes=186, mplsm actions=pop_mpls:0x0800,goto_table:1
2636  table=1, n_packets=3, n_bytes=174, ip,nw_tos=32 actions=CONTROLLER:65535
2637 OFPST_FLOW reply (OF1.2):
2638 ])
2639
2640 OVS_VSWITCHD_STOP
2641 AT_CLEANUP
2642
2643 AT_SETUP([ofproto-dpif - MPLS handling with write_actions])
2644 OVS_VSWITCHD_START([dnl
2645    add-port br0 p1 -- set Interface p1 type=dummy
2646 ])
2647 ON_EXIT([kill `cat ovs-ofctl.pid`])
2648
2649 dnl N.B: The first (and only) action that accesses L3 data after the
2650 dnl pop_mpls action is present in write_actions. This exercises recirculation
2651 dnl triggered in write_actions due to a previous action not in write actions.
2652 AT_CAPTURE_FILE([ofctl_monitor.log])
2653 AT_DATA([flows.txt], [dnl
2654 mplsm actions=pop_mpls:0x800,write_actions(dec_ttl,controller)
2655 ])
2656 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2657
2658 dnl Modified MPLS pop action.
2659 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2660 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)
2661 dnl             (tos 0x20, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2662 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2663 AT_CHECK([ovs-ofctl -O OpenFlow12 monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2664
2665 for i in 1 2 3; do
2666     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'
2667 done
2668 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2669 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2670
2671 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2672 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2673 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
2674 dnl
2675 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2676 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
2677 dnl
2678 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2679 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
2680 ])
2681
2682 AT_CHECK([ovs-appctl revalidator/purge], [0])
2683 AT_CHECK([ovs-ofctl -O OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2684  n_packets=3, n_bytes=186, mplsm actions=pop_mpls:0x0800,write_actions(dec_ttl,CONTROLLER:65535)
2685 OFPST_FLOW reply (OF1.2):
2686 ])
2687
2688 OVS_VSWITCHD_STOP
2689 AT_CLEANUP
2690
2691 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
2692 OVS_VSWITCHD_START([dnl
2693    add-port br0 p1 -- set Interface p1 type=dummy
2694 ])
2695 ON_EXIT([kill `cat ovs-ofctl.pid`])
2696
2697 AT_CAPTURE_FILE([ofctl_monitor.log])
2698 # A table-miss flow has priority 0 and no match
2699 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2700
2701 dnl Singleton controller action.
2702 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2703
2704 for i in 1 2 3 ; do
2705     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)'
2706 done
2707 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2708 ovs-appctl -t ovs-ofctl exit
2709
2710 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2711 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2712 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:0
2713 dnl
2714 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2715 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:0
2716 dnl
2717 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2718 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:0
2719 ])
2720
2721 AT_CHECK([ovs-appctl revalidator/purge], [0])
2722 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2723  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2724 NXST_FLOW reply:
2725 ])
2726
2727 OVS_VSWITCHD_STOP
2728 AT_CLEANUP
2729
2730
2731 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
2732 OVS_VSWITCHD_START([dnl
2733    add-port br0 p1 -- set Interface p1 type=dummy
2734 ])
2735 ON_EXIT([kill `cat ovs-ofctl.pid`])
2736
2737 AT_CAPTURE_FILE([ofctl_monitor.log])
2738 # A table-miss flow has priority 0 and no match
2739 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2740
2741 dnl Singleton controller action.
2742 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2743
2744 for i in 1 2 3 ; do
2745     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)'
2746 done
2747 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2748 ovs-appctl -t ovs-ofctl exit
2749
2750 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2751
2752 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2753 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2754 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:0
2755 dnl
2756 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2757 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:0
2758 dnl
2759 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2760 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:0
2761 ])
2762
2763 AT_CHECK([ovs-appctl revalidator/purge], [0])
2764 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2765  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2766 OFPST_FLOW reply (OF1.3):
2767 ])
2768
2769 OVS_VSWITCHD_STOP
2770 AT_CLEANUP
2771
2772 AT_SETUP([ofproto-dpif - table-miss flow with async config (OpenFlow 1.3)])
2773 OVS_VSWITCHD_START([dnl
2774    add-port br0 p1 -- set Interface p1 type=dummy
2775 ])
2776 ON_EXIT([kill `cat ovs-ofctl.pid`])
2777
2778 ovs-appctl time/stop
2779
2780 AT_CAPTURE_FILE([ofctl_monitor.log])
2781 # A table-miss flow has priority 0 and no match
2782 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2783
2784 dnl Singleton controller action.
2785 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2786
2787 # Become slave (OF 1.3), which should disable everything except port status.
2788 ovs-appctl -t ovs-ofctl ofctl/send 041800180000000200000003000000000000000000000001
2789
2790 # Ensure that ovs-vswitchd gets a chance to reply before sending another command.
2791 ovs-appctl time/warp 500 100
2792
2793 # Use OF 1.3 OFPT_SET_ASYNC to enable OFPR_NO_MATCH for slave only.
2794 ovs-appctl -t ovs-ofctl ofctl/send 041c002000000002000000000000000100000000000000000000000000000000
2795
2796 ovs-appctl time/warp 500 100
2797 for i in 1 2 3 ; do
2798     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)'
2799 done
2800 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2801 ovs-appctl -t ovs-ofctl exit
2802
2803 AT_CHECK([ovs-appctl revalidator/purge], [0])
2804 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2805 send: OFPT_ROLE_REQUEST (OF1.3) (xid=0x2): role=slave generation_id=1
2806 OFPT_ROLE_REPLY (OF1.3) (xid=0x2): role=slave generation_id=1
2807 dnl
2808 send: OFPT_SET_ASYNC (OF1.3) (xid=0x2):
2809  master:
2810        PACKET_IN: (off)
2811      PORT_STATUS: (off)
2812     FLOW_REMOVED: (off)
2813
2814  slave:
2815        PACKET_IN: no_match
2816      PORT_STATUS: (off)
2817     FLOW_REMOVED: (off)
2818 dnl
2819 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2820 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:0
2821 dnl
2822 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2823 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:0
2824 dnl
2825 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2826 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:0
2827 ])
2828
2829 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2830
2831 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2832  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2833 OFPST_FLOW reply (OF1.3):
2834 ])
2835
2836 OVS_VSWITCHD_STOP
2837 AT_CLEANUP
2838
2839
2840 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.4)])
2841 OVS_VSWITCHD_START([dnl
2842    add-port br0 p1 -- set Interface p1 type=dummy
2843 ])
2844 ON_EXIT([kill `cat ovs-ofctl.pid`])
2845
2846 AT_CAPTURE_FILE([ofctl_monitor.log])
2847 # A table-miss flow has priority 0 and no match
2848 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2849
2850 dnl Singleton controller action.
2851 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2852
2853 for i in 1 2 3 ; do
2854     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)'
2855 done
2856 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2857 ovs-appctl -t ovs-ofctl exit
2858
2859 AT_CHECK([ovs-appctl revalidator/purge], [0])
2860 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2861 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2862 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:0
2863 dnl
2864 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2865 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:0
2866 dnl
2867 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2868 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:0
2869 ])
2870
2871 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2872
2873 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2874  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2875 OFPST_FLOW reply (OF1.4):
2876 ])
2877
2878 OVS_VSWITCHD_STOP
2879 AT_CLEANUP
2880
2881
2882 AT_SETUP([ofproto-dpif - packet-in reasons (Openflow 1.3)])
2883 OVS_VSWITCHD_START([dnl
2884    add-port br0 p1 -- set Interface p1 type=dummy
2885 ])
2886 ON_EXIT([kill `cat ovs-ofctl.pid`])
2887
2888 AT_CAPTURE_FILE([ofctl_monitor.log])
2889 AT_DATA([flows.txt], [dnl
2890 table=0 in_port=1 actions=write_actions(output(CONTROLLER)),goto_table(1)
2891 table=1 actions=output(CONTROLLER),goto_table(2)
2892 table=2 actions=group:1234
2893 ])
2894 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:CONTROLLER'])
2895 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flows br0 flows.txt])
2896
2897 dnl Singleton controller action.
2898 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2899
2900 for i in 1 2 3 ; do
2901     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)'
2902 done
2903 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2904 ovs-appctl -t ovs-ofctl exit
2905
2906 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2907
2908 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2909 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2910 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:0
2911 dnl
2912 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2913 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:0
2914 dnl
2915 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2916 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:0
2917 dnl
2918 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2919 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:0
2920 dnl
2921 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2922 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:0
2923 dnl
2924 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2925 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:0
2926 dnl
2927 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2928 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:0
2929 dnl
2930 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2931 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:0
2932 dnl
2933 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2934 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:0
2935 ])
2936
2937 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2938
2939 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2940  n_packets=3, n_bytes=180, in_port=1 actions=write_actions(CONTROLLER:65535),goto_table:1
2941  table=1, n_packets=3, n_bytes=180, actions=CONTROLLER:65535,goto_table:2
2942  table=2, n_packets=3, n_bytes=180, actions=group:1234
2943 OFPST_FLOW reply (OF1.3):
2944 ])
2945
2946 OVS_VSWITCHD_STOP
2947 AT_CLEANUP
2948
2949
2950 AT_SETUP([ofproto-dpif - packet-in reasons (Openflow 1.4)])
2951 OVS_VSWITCHD_START([dnl
2952    add-port br0 p1 -- set Interface p1 type=dummy
2953 ])
2954 ON_EXIT([kill `cat ovs-ofctl.pid`])
2955
2956 AT_CAPTURE_FILE([ofctl_monitor.log])
2957 AT_DATA([flows.txt], [dnl
2958 table=0 in_port=1 actions=write_actions(output(CONTROLLER)),goto_table(1)
2959 table=1 actions=output(CONTROLLER),goto_table(2)
2960 table=2 actions=group:1234
2961 ])
2962 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:CONTROLLER'])
2963 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flows br0 flows.txt])
2964
2965 dnl Singleton controller action.
2966 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2967
2968 for i in 1 2 3 ; do
2969     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)'
2970 done
2971 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2972 ovs-appctl -t ovs-ofctl exit
2973
2974 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2975
2976 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2977 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2978 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:0
2979 dnl
2980 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via group) data_len=60 (unbuffered)
2981 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:0
2982 dnl
2983 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action_set) data_len=60 (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:0
2985 dnl
2986 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (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:0
2988 dnl
2989 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via group) data_len=60 (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:0
2991 dnl
2992 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action_set) data_len=60 (unbuffered)
2993 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:0
2994 dnl
2995 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2996 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:0
2997 dnl
2998 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via group) data_len=60 (unbuffered)
2999 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:0
3000 dnl
3001 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action_set) data_len=60 (unbuffered)
3002 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:0
3003 ])
3004
3005 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3006
3007 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3008  n_packets=3, n_bytes=180, in_port=1 actions=write_actions(CONTROLLER:65535),goto_table:1
3009  table=1, n_packets=3, n_bytes=180, actions=CONTROLLER:65535,goto_table:2
3010  table=2, n_packets=3, n_bytes=180, actions=group:1234
3011 OFPST_FLOW reply (OF1.4):
3012 ])
3013
3014 OVS_VSWITCHD_STOP
3015 AT_CLEANUP
3016
3017
3018 AT_SETUP([ofproto-dpif - ARP modification slow-path])
3019 OVS_VSWITCHD_START
3020 ADD_OF_PORTS([br0], [1], [2])
3021
3022 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
3023 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'
3024
3025 # Input some packets that should follow the arp modification slow-path.
3026 for i in 1 2 3; do
3027     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)'
3028 done
3029 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3030
3031 # Check the packets that were output.
3032 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
3033 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
3034 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
3035 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
3036 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
3037 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
3038 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
3039 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
3040 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
3041 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
3042 ])
3043
3044 OVS_VSWITCHD_STOP
3045 AT_CLEANUP
3046
3047 AT_SETUP([ofproto-dpif - VLAN handling])
3048 OVS_VSWITCHD_START(
3049   [set Bridge br0 fail-mode=standalone -- \
3050    add-port br0 p1                                  trunks=10,12 -- \
3051    add-port br0 p2                           tag=10              -- \
3052    add-port br0 p3                           tag=12              \
3053                    other-config:priority-tags=true               -- \
3054    add-port br0 p4                           tag=12              -- \
3055    add-port br0 p5 vlan_mode=native-tagged   tag=10              -- \
3056    add-port br0 p6 vlan_mode=native-tagged   tag=10 trunks=10,12 -- \
3057    add-port br0 p7 vlan_mode=native-untagged tag=12              -- \
3058    add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
3059                    other-config:priority-tags=true               -- \
3060    set Interface p1 type=dummy -- \
3061    set Interface p2 type=dummy -- \
3062    set Interface p3 type=dummy -- \
3063    set Interface p4 type=dummy -- \
3064    set Interface p5 type=dummy -- \
3065    set Interface p6 type=dummy -- \
3066    set Interface p7 type=dummy -- \
3067    set Interface p8 type=dummy --])
3068
3069 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
3070 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
3071 dnl actions.
3072 for tuple in \
3073         "100 none 0 drop" \
3074         "100 0    0 drop" \
3075         "100 0    1 drop" \
3076         "100 10   0 1,5,6,7,8,pop_vlan,2" \
3077         "100 10   1 1,5,6,7,8,pop_vlan,2" \
3078         "100 11   0 5,7" \
3079         "100 11   1 5,7" \
3080         "100 12   0 1,5,6,pop_vlan,3,4,7,8" \
3081         "100 12   1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3082         "1  none 0 drop" \
3083         "1  0    0 drop" \
3084         "1  0    1 drop" \
3085         "1  10   0 5,6,7,8,100,pop_vlan,2" \
3086         "1  10   1 5,6,7,8,100,pop_vlan,2" \
3087         "1  11   0 drop" \
3088         "1  11   1 drop" \
3089         "1  12   0 5,6,100,pop_vlan,3,4,7,8" \
3090         "1  12   1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3091         "2  none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3092         "2  0    0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3093         "2  0    1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
3094         "2  10   0 drop" \
3095         "2  10   1 drop" \
3096         "2  11   0 drop" \
3097         "2  11   1 drop" \
3098         "2  12   0 drop" \
3099         "2  12   1 drop" \
3100         "3  none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3101         "3  0    0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3102         "3  0    1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
3103         "3  10   0 drop" \
3104         "3  10   1 drop" \
3105         "3  11   0 drop" \
3106         "3  11   1 drop" \
3107         "3  12   0 drop" \
3108         "3  12   1 drop" \
3109         "4  none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3110         "4  0    0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3111         "4  0    1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
3112         "4  10   0 drop" \
3113         "4  10   1 drop" \
3114         "4  11   0 drop" \
3115         "4  11   1 drop" \
3116         "4  12   0 drop" \
3117         "4  12   1 drop" \
3118         "5  none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
3119         "5  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
3120         "5  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
3121         "5  10   0 1,6,7,8,100,pop_vlan,2" \
3122         "5  10   1 1,6,7,8,100,pop_vlan,2" \
3123         "5  11   0 7,100" \
3124         "5  11   1 7,100" \
3125         "5  12   0 1,6,100,pop_vlan,3,4,7,8" \
3126         "5  12   1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3127         "6  none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
3128         "6  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
3129         "6  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
3130         "6  10   0 1,5,7,8,100,pop_vlan,2" \
3131         "6  10   1 1,5,7,8,100,pop_vlan,2" \
3132         "6  11   0 drop" \
3133         "6  11   1 drop" \
3134         "6  12   0 1,5,100,pop_vlan,3,4,7,8" \
3135         "6  12   1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3136         "7  none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3137         "7  0    0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3138         "7  0    1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
3139         "7  10   0 1,5,6,8,100,pop_vlan,2" \
3140         "7  10   1 1,5,6,8,100,pop_vlan,2" \
3141         "7  11   0 5,100" \
3142         "7  11   1 5,100" \
3143         "7  12   0 1,5,6,100,pop_vlan,3,4,8" \
3144         "7  12   1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
3145         "8  none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
3146         "8  0    0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
3147         "8  0    1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
3148         "8  10   0 1,5,6,7,100,pop_vlan,2" \
3149         "8  10   1 1,5,6,7,100,pop_vlan,2" \
3150         "8  11   0 drop" \
3151         "8  11   1 drop" \
3152         "8  12   0 1,5,6,100,pop_vlan,3,4,7" \
3153         "8  12   1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
3154 do
3155   set $tuple
3156   in_port=$1
3157   vlan=$2
3158   pcp=$3
3159   expected=$4
3160
3161   if test $vlan = none; then
3162     flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
3163   else
3164     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))"
3165   fi
3166
3167   echo "----------------------------------------------------------------------"
3168   echo "in_port=$in_port vlan=$vlan pcp=$pcp"
3169
3170   AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3171   actual=`tail -1 stdout | sed 's/Datapath actions: //'`
3172
3173   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
3174   mv stdout expout
3175   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
3176 done
3177
3178 OVS_VSWITCHD_STOP
3179 AT_CLEANUP
3180
3181 AT_SETUP([ofproto-dpif - MPLS handling])
3182 OVS_VSWITCHD_START([dnl
3183    add-port br0 p1 -- set Interface p1 type=dummy
3184 ])
3185 ON_EXIT([kill `cat ovs-ofctl.pid`])
3186
3187 AT_CAPTURE_FILE([ofctl_monitor.log])
3188 AT_DATA([flows.txt], [dnl
3189 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
3190 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
3191 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
3192 ])
3193 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3194
3195 dnl In this test, we push an MPLS tag to an ethernet packet.
3196 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3197
3198 for i in 1 2 3; do
3199     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)'
3200 done
3201 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3202 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3203
3204 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3205 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3206 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
3207 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3208 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3209 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3210 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
3211 dnl
3212 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3213 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
3214 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3215 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3216 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3217 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
3218 dnl
3219 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3220 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
3221 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3222 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3223 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3224 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
3225 ])
3226
3227 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3228 dnl copied exactly, except for the BOS bit.
3229 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3230
3231 for i in 1 2 3; do
3232     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)'
3233 done
3234 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3235 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3236
3237 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3238 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3239 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
3240 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3241 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3242 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3243 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3244 dnl
3245 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3246 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
3247 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3248 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3249 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3250 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3251 dnl
3252 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3253 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
3254 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3255 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3256 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3257 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3258 ])
3259
3260 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3261 dnl copied exactly, except for the BOS bit. The ethertype should be updated
3262 dnl to the MPLS ethertype of the MPLS push action which differs to that
3263 dnl of the input packet.
3264 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3265
3266 for i in 1 2 3; do
3267     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)'
3268 done
3269 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3270 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
3271
3272 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3273 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3274 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
3275 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3276 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3277 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3278 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3279 dnl
3280 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3281 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
3282 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3283 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3284 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3285 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3286 dnl
3287 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3288 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
3289 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3290 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3291 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3292 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3293 ])
3294
3295 OVS_VSWITCHD_STOP
3296 AT_CLEANUP
3297
3298 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
3299 OVS_VSWITCHD_START([dnl
3300    add-port br0 p1 -- set Interface p1 type=dummy
3301 ])
3302 ON_EXIT([kill `cat ovs-ofctl.pid`])
3303
3304 AT_CAPTURE_FILE([ofctl_monitor.log])
3305 AT_DATA([flows.txt], [dnl
3306 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
3307 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
3308 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
3309 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
3310 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
3311 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
3312 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
3313 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
3314 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
3315 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
3316 ])
3317 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3318
3319 dnl Modified MPLS controller action.
3320 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3321 dnl both of these in the final flow
3322 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3323
3324 for i in 1 2 3; do
3325     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)'
3326 done
3327 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3328 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3329
3330 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3331 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3332 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3333 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3334 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3335 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3336 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3337 00000040  00 00 00 00
3338 dnl
3339 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3340 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3341 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3342 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3343 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3344 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3345 00000040  00 00 00 00
3346 dnl
3347 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3348 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3349 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3350 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3351 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3352 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3353 00000040  00 00 00 00
3354 ])
3355
3356 dnl Modified MPLS controller action.
3357 dnl In this test, the input packet in vlan-tagged, which should be stripped
3358 dnl before we push the MPLS and VLAN tags.
3359 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3360
3361 for i in 1 2 3; do
3362     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))'
3363 done
3364 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3365 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3366
3367 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3368 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3369 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3370 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3371 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3372 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3373 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3374 dnl
3375 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3376 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3377 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3378 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3379 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3380 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3381 dnl
3382 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3383 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3384 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3385 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3386 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3387 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3388 ])
3389
3390 dnl Modified MPLS controller action.
3391 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3392 dnl both of these in the final flow
3393 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3394
3395 for i in 1 2 3; do
3396     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)'
3397 done
3398 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3399 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3400
3401 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3402 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3403 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3404 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3405 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3406 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3407 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3408 00000040  00 00 00 00
3409 dnl
3410 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3411 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3412 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3413 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3414 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3415 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3416 00000040  00 00 00 00
3417 dnl
3418 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3419 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3420 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3421 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3422 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3423 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3424 00000040  00 00 00 00
3425 ])
3426
3427 dnl Modified MPLS controller action.
3428 dnl In this test, the input packet in vlan-tagged, which should be stripped
3429 dnl before we push the MPLS and VLAN tags.
3430 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3431
3432 for i in 1 2 3; do
3433     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))'
3434 done
3435 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3436 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3437
3438 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3439 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3440 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3441 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3442 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3443 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3444 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3445 dnl
3446 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3447 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3448 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3449 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3450 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3451 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3452 dnl
3453 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3454 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3455 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3456 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3457 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3458 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3459 ])
3460
3461 dnl Modified MPLS controller action.
3462 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3463 dnl actions are reordered, so we see both of these in the final flow.
3464 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3465
3466 for i in 1 2 3; do
3467     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)'
3468 done
3469 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3470 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3471
3472 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3473 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3474 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3475 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3476 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3477 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3478 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3479 00000040  00 00 00 00
3480 dnl
3481 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3482 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3483 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3484 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3485 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3486 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3487 00000040  00 00 00 00
3488 dnl
3489 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3490 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3491 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3492 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3493 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3494 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3495 00000040  00 00 00 00
3496 ])
3497
3498 dnl Modified MPLS controller action.
3499 dnl In this test, the input packet in vlan-tagged, which should be stripped
3500 dnl before we push the MPLS and VLAN tags.
3501 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3502
3503 for i in 1 2 3; do
3504     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))'
3505 done
3506 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3507 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3508
3509 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3510 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3511 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3512 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3513 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3514 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3515 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3516 dnl
3517 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3518 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3519 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3520 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3521 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3522 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3523 dnl
3524 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3525 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3526 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3527 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3528 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3529 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3530 ])
3531
3532 dnl Modified MPLS controller action.
3533 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3534 dnl actions are reordered, so we see both of these in the final flow.
3535 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3536
3537 for i in 1 2 3; do
3538     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)'
3539 done
3540 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3541 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3542
3543 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3544 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3545 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3546 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3547 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3548 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3549 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3550 00000040  00 00 00 00
3551 dnl
3552 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3553 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3554 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3555 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3556 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3557 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3558 00000040  00 00 00 00
3559 dnl
3560 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3561 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3562 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3563 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3564 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3565 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3566 00000040  00 00 00 00
3567 ])
3568
3569 dnl Modified MPLS controller action.
3570 dnl In this test, the input packet in vlan-tagged, which should be stripped
3571 dnl before we push the MPLS and VLAN tags.
3572 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
3573
3574 for i in 1 2 3; do
3575     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))'
3576 done
3577 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3578 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3579
3580 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3581 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3582 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3583 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3584 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3585 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3586 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3587 dnl
3588 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3589 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3590 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3591 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3592 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3593 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3594 dnl
3595 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3596 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3597 00000000  50 54 00 00 00 07 40 44-44 44 54 57 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 00 00 00 00 00 00
3601 ])
3602
3603 dnl Modified MPLS controller action.
3604 dnl In this test, the input packet in vlan-tagged, which should be stripped
3605 dnl before we push the MPLS and VLAN tags.
3606 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3607
3608 for i in 1 2 3; do
3609     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))'
3610 done
3611 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3612 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3613
3614 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3615 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3616 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3617 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3618 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3619 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3620 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3621 dnl
3622 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3623 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3624 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3625 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3626 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3627 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3628 dnl
3629 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3630 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3631 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3632 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3633 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3634 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3635 ])
3636
3637 dnl Modified MPLS controller action.
3638 dnl In this test, the input packet in vlan-tagged, which should be modified
3639 dnl before we push MPLS and VLAN tags.
3640 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3641
3642 for i in 1 2 3; do
3643     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))'
3644 done
3645 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3646 ovs-appctl -t ovs-ofctl exit
3647
3648 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3649 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3650 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3651 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3652 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3653 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3654 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3655 dnl
3656 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3657 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3658 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3659 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3660 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3661 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3662 dnl
3663 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3664 mpls,dl_vlan=99,dl_vlan_pcp=1,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
3665 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3666 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3667 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3668 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3669 ])
3670
3671 AT_CHECK([ovs-appctl revalidator/purge], [0])
3672 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3673  cookie=0xa, n_packets=3, n_bytes=180, 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
3674  cookie=0xa, n_packets=3, n_bytes=180, 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
3675  cookie=0xa, n_packets=3, n_bytes=180, 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
3676  cookie=0xa, n_packets=3, n_bytes=180, 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
3677  cookie=0xa, n_packets=3, n_bytes=180, 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
3678  cookie=0xa, n_packets=3, n_bytes=180, 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
3679  cookie=0xa, n_packets=3, n_bytes=180, 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
3680  cookie=0xa, n_packets=3, n_bytes=180, 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
3681  cookie=0xa, n_packets=3, n_bytes=180, 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
3682  cookie=0xa, n_packets=3, n_bytes=180, 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
3683 OFPST_FLOW reply (OF1.2):
3684 ])
3685
3686 OVS_VSWITCHD_STOP
3687 AT_CLEANUP
3688
3689 AT_SETUP([ofproto-dpif - fragment handling - trace])
3690 OVS_VSWITCHD_START
3691 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3692 AT_DATA([flows.txt], [dnl
3693 priority=75 tcp ip_frag=no    tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:1
3694 priority=75 tcp ip_frag=first tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:2
3695 priority=50 tcp ip_frag=no              actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:4
3696 priority=50 tcp ip_frag=first           actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:5
3697 priority=50 tcp ip_frag=later           actions=output:6
3698 ])
3699 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
3700
3701 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"
3702 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
3703 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
3704 later_flow="$base_flow,frag=later)"
3705
3706     # mode    no  first  later
3707 for tuple in \
3708     'normal    1     5      6' \
3709     'drop      1  drop   drop' \
3710     'nx-match  1     2      6'
3711 do
3712   set $tuple
3713   mode=$1
3714   no=$2
3715   first=$3
3716   later=$4
3717
3718   AT_CHECK([ovs-ofctl set-frags br0 $mode])
3719   for type in no first later; do
3720     eval flow=\$${type}_flow exp_output=\$$type
3721     printf "\n%s\n" "----$mode $type-----"
3722     AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3723     : > expout
3724     if test $mode = drop && test $type != no; then
3725         echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
3726         echo "Datapath actions: $exp_output" >> expout
3727     elif test $type = later; then
3728         echo "Datapath actions: $exp_output" >> expout
3729     else
3730         echo "Datapath actions: set(tcp(src=80,dst=80)),$exp_output" >> expout
3731     fi
3732     AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
3733   done
3734 done
3735 OVS_VSWITCHD_STOP
3736 AT_CLEANUP
3737
3738 AT_SETUP([ofproto-dpif - fragment handling - upcall])
3739 OVS_VSWITCHD_START
3740 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3741 AT_DATA([flows.txt], [dnl
3742 priority=75 tcp ip_frag=no    tp_dst=80 actions=set_field:81->tcp_dst,output:1
3743 priority=75 tcp ip_frag=first tp_dst=80 actions=set_field:81->tcp_dst,output:2
3744 priority=50 tcp ip_frag=no              actions=set_field:81->tcp_dst,output:4
3745 priority=50 tcp ip_frag=first           actions=set_field:81->tcp_dst,output:5
3746 priority=50 tcp ip_frag=later           actions=output:6
3747 ])
3748 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
3749
3750 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"
3751 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
3752 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
3753 later_flow="$base_flow,frag=later)"
3754
3755 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
3756
3757 mode=normal
3758
3759 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3760 for type in no first later; do
3761   eval flow=\$${type}_flow
3762   printf "\n%s\n" "----$mode $type-----"
3763
3764   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3765 done
3766
3767 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
3768 flow-dump from non-dpdk interfaces:
3769 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
3770 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),5
3771 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
3772 ])
3773
3774 mode=drop
3775
3776 AT_CHECK([ovs-appctl revalidator/purge], [0])
3777 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3778 for type in no first later; do
3779   eval flow=\$${type}_flow
3780   printf "\n%s\n" "----$mode $type-----"
3781
3782   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3783 done
3784
3785 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
3786 flow-dump from non-dpdk interfaces:
3787 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
3788 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(frag=first), packets:0, bytes:0, used:never, actions:drop
3789 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(frag=later), packets:0, bytes:0, used:never, actions:drop
3790 ])
3791
3792 mode=nx-match
3793
3794 AT_CHECK([ovs-appctl revalidator/purge], [0])
3795 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3796 for type in no first later; do
3797   eval flow=\$${type}_flow
3798   printf "\n%s\n" "----$mode $type-----"
3799
3800   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3801 done
3802
3803 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
3804 flow-dump from non-dpdk interfaces:
3805 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
3806 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),2
3807 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
3808 ])
3809
3810 OVS_VSWITCHD_STOP
3811 AT_CLEANUP
3812
3813 AT_SETUP([ofproto-dpif - fragment handling - actions])
3814 OVS_VSWITCHD_START
3815 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3816
3817 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])
3818 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3819 source field tcp_dst lacks correct prerequisites
3820 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3821 ])
3822
3823 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])
3824 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3825 destination field tcp_src lacks correct prerequisites
3826 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3827 ])
3828
3829 AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=set_field:8888->udp_src,output:1"], [1], [], [stderr])
3830 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3831 set_field udp_src lacks correct prerequisities
3832 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3833 ])
3834
3835 AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=load:8888->NXM_OF_UDP_DST[[]],output:1"], [1], [], [stderr])
3836 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3837 set_field udp_dst lacks correct prerequisities
3838 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3839 ])
3840
3841 AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_src,output:1"], [1], [], [stderr])
3842 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3843 set_field sctp_src lacks correct prerequisities
3844 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3845 ])
3846
3847 AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_dst,output:1"], [1], [], [stderr])
3848 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3849 set_field sctp_dst lacks correct prerequisities
3850 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3851 ])
3852
3853 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])
3854 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3855 source field tcp_dst lacks correct prerequisites
3856 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3857 ])
3858
3859 AT_DATA([flows.txt], [dnl
3860 priority=75 tcp actions=load:42->OXM_OF_TCP_SRC[[0..7]],output:1
3861 ])
3862 AT_CHECK([ovs-ofctl -O OpenFlow12 replace-flows br0 flows.txt])
3863
3864 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
3865
3866 mode=normal
3867
3868 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3869 for frag in 4000 6000 6008 4010; do
3870   printf "\n%s\n" "----$mode $frag-----"
3871
3872   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"])
3873 done
3874
3875 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
3876 flow-dump from non-dpdk interfaces:
3877 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=33419), packets:0, bytes:0, used:never, actions:set(tcp(src=33322)),1
3878 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=33419), packets:0, bytes:0, used:never, actions:set(tcp(src=33322)),1
3879 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:74, used:0.001s, actions:1
3880 ])
3881
3882 AT_CHECK([ovs-appctl revalidator/purge], [0])
3883 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3884 for frag in 4000 6000 6008 4010; do
3885   printf "\n%s\n" "----$mode $frag truncated transport header -----"
3886
3887   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0018 2e24 $frag 40 06 465d ac11370d ac11370b 828b 0016"])
3888 done
3889
3890 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
3891 flow-dump from non-dpdk interfaces:
3892 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=0), packets:0, bytes:0, used:never, actions:set(tcp(src=42)),1
3893 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=0), packets:0, bytes:0, used:never, actions:set(tcp(src=42)),1
3894 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:60, used:0.001s, actions:1
3895 ])
3896
3897 AT_CHECK([ovs-appctl revalidator/purge], [0])
3898 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3899 for frag in 4000 6000 6001 4002; do
3900   printf "\n%s\n" "----$mode $frag missing transport header-----"
3901
3902   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0014 2e24 $frag 40 06 465d ac11370d ac11370b"])
3903 done
3904
3905 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
3906 flow-dump from non-dpdk interfaces:
3907 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=0), packets:0, bytes:0, used:never, actions:set(tcp(src=42)),1
3908 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=0), packets:0, bytes:0, used:never, actions:set(tcp(src=42)),1
3909 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:60, used:0.001s, actions:1
3910 ])
3911
3912 OVS_VSWITCHD_STOP
3913 AT_CLEANUP
3914
3915 AT_SETUP([ofproto-dpif - exit])
3916 OVS_VSWITCHD_START
3917 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
3918 AT_DATA([flows.txt], [dnl
3919 in_port=1 actions=output:10,exit,output:11
3920 in_port=2 actions=output:12,resubmit:1,output:12
3921 in_port=3 actions=output:13,resubmit:2,output:14
3922 ])
3923 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3924 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])
3925 AT_CHECK([tail -1 stdout], [0],
3926   [Datapath actions: 10
3927 ])
3928 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])
3929 AT_CHECK([tail -1 stdout], [0],
3930   [Datapath actions: 12,10
3931 ])
3932 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])
3933 AT_CHECK([tail -1 stdout], [0],
3934   [Datapath actions: 13,12,10
3935 ])
3936 OVS_VSWITCHD_STOP
3937 AT_CLEANUP
3938
3939
3940 AT_SETUP([ofproto-dpif - mirroring, select_all])
3941 OVS_VSWITCHD_START
3942 ADD_OF_PORTS([br0], 1, 2, 3)
3943 ovs-vsctl \
3944         set Bridge br0 mirrors=@m --\
3945         --id=@p3 get Port p3 --\
3946         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3947
3948 AT_DATA([flows.txt], [dnl
3949 in_port=1 actions=output:2
3950 in_port=2 actions=output:1
3951 ])
3952 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3953
3954 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)"
3955 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3956 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3957   [Datapath actions: 3,2
3958 ])
3959
3960 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)"
3961 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3962 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3963   [Datapath actions: 3,1
3964 ])
3965
3966 OVS_VSWITCHD_STOP
3967 AT_CLEANUP
3968
3969
3970 AT_SETUP([ofproto-dpif - mirroring, select_src])
3971 OVS_VSWITCHD_START
3972 ADD_OF_PORTS([br0], 1, 2, 3)
3973 ovs-vsctl \
3974         set Bridge br0 mirrors=@m --\
3975         --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
3976         --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
3977
3978 AT_DATA([flows.txt], [dnl
3979 in_port=1 actions=output:2
3980 in_port=2 actions=output:1
3981 ])
3982 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3983
3984 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)"
3985 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3986 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3987   [Datapath actions: 3,2
3988 ])
3989
3990 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)"
3991 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3992 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3993   [Datapath actions: 1
3994 ])
3995 OVS_VSWITCHD_STOP
3996 AT_CLEANUP
3997
3998 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
3999 OVS_VSWITCHD_START
4000 ADD_OF_PORTS([br0], 1, 2)
4001 ovs-vsctl \
4002         set Bridge br0 mirrors=@m --\
4003         --id=@p2 get Port p2 --\
4004         --id=@m create Mirror name=mymirror select_all=true output_port=@p2
4005
4006 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
4007
4008 # "in_port" defaults to OFPP_NONE if it's not specified.
4009 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"
4010 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4011 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4012   [Datapath actions: 1,2
4013 ])
4014
4015 OVS_VSWITCHD_STOP
4016 AT_CLEANUP
4017
4018
4019 AT_SETUP([ofproto-dpif - mirroring, select_dst])
4020 OVS_VSWITCHD_START
4021 ADD_OF_PORTS([br0], 1, 2, 3)
4022 ovs-vsctl \
4023         set Bridge br0 mirrors=@m --\
4024         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4025         --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
4026
4027 AT_DATA([flows.txt], [dnl
4028 in_port=1 actions=output:2
4029 in_port=2 actions=output:1
4030 ])
4031 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4032
4033 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)"
4034 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4035 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4036   [Datapath actions: 2,3
4037 ])
4038
4039 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)"
4040 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4041 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4042   [Datapath actions: 1
4043 ])
4044
4045 OVS_VSWITCHD_STOP
4046 AT_CLEANUP
4047
4048
4049 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
4050 OVS_VSWITCHD_START
4051 ADD_OF_PORTS([br0], 1, 2, 3)
4052 ovs-vsctl \
4053         set Bridge br0 mirrors=@m --\
4054         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4055         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4056
4057 AT_DATA([flows.txt], [dnl
4058 in_port=1, actions=output:2
4059 ])
4060 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4061
4062 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)"
4063 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4064 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4065   [Datapath actions: 2
4066 ])
4067
4068 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))"
4069 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4070 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4071   [Datapath actions: 2
4072 ])
4073
4074 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))"
4075 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4076 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4077   [Datapath actions: 3,2
4078 ])
4079
4080 OVS_VSWITCHD_STOP
4081 AT_CLEANUP
4082
4083
4084 AT_SETUP([ofproto-dpif - mirroring, output_port])
4085 OVS_VSWITCHD_START
4086 ADD_OF_PORTS([br0], 1, 2, 3)
4087 ovs-vsctl \
4088         set Bridge br0 mirrors=@m --\
4089         --id=@p3 get Port p3 --\
4090         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4091
4092 AT_DATA([flows.txt], [dnl
4093 in_port=1 actions=mod_vlan_vid:17,output:2
4094 in_port=2 actions=output:1
4095 ])
4096 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4097
4098 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)"
4099 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4100 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4101   [Datapath actions: 3,push_vlan(vid=17,pcp=0),2
4102 ])
4103
4104 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)"
4105 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4106 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4107   [Datapath actions: 3,1
4108 ])
4109
4110 OVS_VSWITCHD_STOP
4111 AT_CLEANUP
4112
4113 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
4114 OVS_VSWITCHD_START
4115 ADD_OF_PORTS([br0], 1, 2)
4116 ovs-vsctl \
4117         set Bridge br0 mirrors=@m --\
4118         --id=@m create Mirror name=mymirror select_all=true output_vlan=12
4119
4120 AT_DATA([flows.txt], [dnl
4121 in_port=1 actions=output:2
4122 in_port=2 actions=mod_vlan_vid:17,output:1
4123 ])
4124 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4125
4126 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)"
4127 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4128 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4129
4130 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
4131 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
4132 mv stdout expout
4133 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
4134
4135 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)"
4136 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4137 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4138
4139 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
4140 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
4141 mv stdout expout
4142 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
4143
4144 OVS_VSWITCHD_STOP
4145 AT_CLEANUP
4146
4147 # This test verifies that mirror state is preserved across recirculation.
4148 #
4149 # Otherwise, post-recirculation the ingress and the output to port 4
4150 # would cause the packet to be mirrored to port 3 a second time.
4151 AT_SETUP([ofproto-dpif - mirroring with recirculation])
4152 OVS_VSWITCHD_START
4153 ADD_OF_PORTS([br0], 1, 2, 3, 4)
4154 ovs-vsctl \
4155         set Bridge br0 mirrors=@m --\
4156         --id=@p3 get Port p3 --\
4157         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4158
4159 AT_DATA([flows.txt], [dnl
4160 in_port=1 actions=2,debug_recirc,4
4161 ])
4162 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4163
4164 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)"
4165 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4166 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 3,2,recirc(0x1)
4167 ])
4168 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4169 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 4
4170 ])
4171
4172 OVS_VSWITCHD_STOP
4173 AT_CLEANUP
4174
4175 # Two testcases below are for the ofproto/trace command
4176 # The first one tests all correct syntax:
4177 # ofproto/trace [dp_name] odp_flow [-generate|packet]
4178 # ofproto/trace br_name br_flow [-generate|packet]
4179 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
4180 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
4181 ADD_OF_PORTS([br0], 1, 2, 3)
4182
4183 AT_DATA([flows.txt], [dnl
4184 in_port=1 actions=output:2
4185 in_port=2 actions=output:1
4186 ])
4187 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4188
4189 odp_flow="in_port(p1)"
4190 br_flow="in_port=1"
4191 # Test command: ofproto/trace odp_flow with in_port as a name.
4192 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4193 AT_CHECK([tail -1 stdout], [0], [dnl
4194 Datapath actions: 2
4195 ])
4196
4197 odp_flow="in_port(1)"
4198 # Test command: ofproto/trace odp_flow
4199 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4200 AT_CHECK([tail -1 stdout], [0], [dnl
4201 Datapath actions: 2
4202 ])
4203
4204 # Test command: ofproto/trace dp_name odp_flow
4205 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
4206 AT_CHECK([tail -1 stdout], [0], [dnl
4207 Datapath actions: 2
4208 ])
4209 # Test commmand: ofproto/trace br_name br_flow
4210 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
4211 AT_CHECK([tail -1 stdout], [0], [dnl
4212 Datapath actions: 2
4213 ])
4214
4215 # Delete the inserted flows
4216 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
4217 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
4218
4219 # This section below tests the [-generate] option
4220 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
4221 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"
4222
4223 # Test command: ofproto/trace odp_flow
4224 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4225 # Check for no MAC learning entry
4226 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4227  port  VLAN  MAC                Age
4228 ])
4229
4230 # Test command: ofproto/trace br_name br_flow
4231 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
4232 # Check for no MAC learning entry
4233 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4234  port  VLAN  MAC                Age
4235 ])
4236
4237 # Test command: ofproto/trace odp_flow -generate
4238 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
4239 # Check for the MAC learning entry
4240 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4241  port  VLAN  MAC                Age
4242     3     0  50:54:00:00:00:05    ?
4243 ])
4244
4245 # Test command: ofproto/trace dp_name odp_flow -generate
4246 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4247   "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
4248   -generate], [0], [stdout])
4249 # Check for both MAC learning entries
4250 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4251  port  VLAN  MAC                Age
4252     3     0  50:54:00:00:00:05    ?
4253     1     0  50:54:00:00:00:06    ?
4254 ])
4255
4256 # Test command: ofproto/trace br_name br_flow -generate
4257 AT_CHECK([ovs-appctl ofproto/trace br0 \
4258   "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
4259   -generate], [0], [stdout])
4260 # Check for both MAC learning entries.
4261 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4262  port  VLAN  MAC                Age
4263     3     0  50:54:00:00:00:05    ?
4264     1     0  50:54:00:00:00:06    ?
4265     2     0  50:54:00:00:00:07    ?
4266 ])
4267
4268 # This section beflow tests the [packet] option
4269 # The ovs-tcpundump of packets between port1 and port2
4270 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
4271 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
4272
4273 # Construct the MAC learning table
4274 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4275   "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
4276   -generate], [0], [stdout])
4277
4278 # Construct the MAC learning table
4279 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4280   "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
4281   -generate], [0], [stdout])
4282
4283 # Test command: ofproto/trace odp_flow packet
4284 AT_CHECK([ovs-appctl ofproto/trace \
4285   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
4286 AT_CHECK([tail -1 stdout], [0], [dnl
4287 Datapath actions: 2
4288 ])
4289 AT_CHECK([head -n 2 stdout], [0], [dnl
4290 Bridge: br0
4291 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
4292 ])
4293
4294 # Test command: ofproto/trace dp_name odp_flow packet
4295 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4296   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
4297 AT_CHECK([tail -1 stdout], [0], [dnl
4298 Datapath actions: 2
4299 ])
4300 AT_CHECK([head -n 2 stdout], [0], [dnl
4301 Bridge: br0
4302 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
4303 ])
4304
4305 # Test command: ofproto/trace br_name br_flow packet
4306 AT_CHECK([ovs-appctl ofproto/trace br0 \
4307   "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
4308 AT_CHECK([tail -1 stdout], [0], [dnl
4309 Datapath actions: 1
4310 ])
4311 AT_CHECK([head -n 2 stdout], [0], [dnl
4312 Bridge: br0
4313 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
4314 ])
4315
4316 OVS_VSWITCHD_STOP
4317 AT_CLEANUP
4318
4319 # The second test tests the corner cases
4320 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
4321 OVS_VSWITCHD_START
4322 ADD_OF_PORTS([br0], 1, 2)
4323
4324 # Define flows
4325 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
4326 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
4327 # Define options
4328 generate="-generate"
4329 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
4330
4331 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
4332 m4_foreach(
4333 [option],
4334 [[],
4335 ["$generate"],
4336 ["$pkt"]],
4337 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
4338   [2], [], [stderr])
4339 AT_CHECK([tail -2 stderr], [0], [dnl
4340 Cannot find the datapath
4341 ovs-appctl: ovs-vswitchd: server returned an error
4342 ])])
4343
4344 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
4345 m4_foreach(
4346 [option],
4347 [[],
4348 ["$generate"],
4349 ["$pkt"]],
4350 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
4351   [2], [], [stderr])
4352 AT_CHECK([tail -2 stderr], [0], [dnl
4353 Cannot find the datapath
4354 ovs-appctl: ovs-vswitchd: server returned an error
4355 ])])
4356
4357 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
4358 m4_foreach(
4359 [option],
4360 [[],
4361 ["$generate"],
4362 ["$pkt"]],
4363 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
4364   [2], [], [stderr])
4365 AT_CHECK([tail -2 stderr], [0], [dnl
4366 Cannot find the datapath
4367 ovs-appctl: ovs-vswitchd: server returned an error
4368 ])])
4369
4370 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
4371 m4_foreach(
4372 [option],
4373 [[],
4374 ["$generate"],
4375 ["$pkt"]],
4376 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
4377   [2], [], [stderr])
4378 AT_CHECK([tail -2 stderr], [0], [dnl
4379 Cannot find the datapath
4380 ovs-appctl: ovs-vswitchd: server returned an error
4381 ])])
4382
4383 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
4384 m4_foreach(
4385 [option],
4386 [[],
4387 ["$generate"],
4388 ["$pkt"]],
4389 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
4390   [2], [], [stderr])
4391 AT_CHECK([tail -2 stderr], [0], [dnl
4392 Unknown bridge name
4393 ovs-appctl: ovs-vswitchd: server returned an error
4394 ])])
4395
4396 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
4397 m4_foreach(
4398 [option],
4399 [[],
4400 ["$generate"],
4401 ["$pkt"]],
4402 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
4403   [2], [], [stderr])
4404 AT_CHECK([tail -2 stderr], [0], [dnl
4405 Must specify bridge name
4406 ovs-appctl: ovs-vswitchd: server returned an error
4407 ])])
4408
4409 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
4410 AT_CHECK([ovs-appctl ofproto/trace \
4411   ovs-dummy "$odp_flow" garbage_option],
4412   [2], [stdout],[stderr])
4413 AT_CHECK([tail -2 stderr], [0], [dnl
4414 Trailing garbage in packet data
4415 ovs-appctl: ovs-vswitchd: server returned an error
4416 ])
4417
4418 # Test incorrect command: ofproto/trace with 4 arguments
4419 AT_CHECK([ovs-appctl ofproto/trace \
4420   arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
4421 AT_CHECK([tail -2 stderr], [0], [dnl
4422 "ofproto/trace" command takes at most 3 arguments
4423 ovs-appctl: ovs-vswitchd: server returned an error
4424 ])
4425
4426 # Test incorrect command: ofproto/trace with 0 argument
4427 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
4428 AT_CHECK([tail -2 stderr], [0], [dnl
4429 "ofproto/trace" command requires at least 1 arguments
4430 ovs-appctl: ovs-vswitchd: server returned an error
4431 ])
4432
4433 OVS_VSWITCHD_STOP
4434 AT_CLEANUP
4435
4436 # The third test checks that the output of "ovs-dpctl -m" is valid to trace.
4437 AT_SETUP([ofproto-dpif - ofproto/trace from dpctl output])
4438 OVS_VSWITCHD_START([dnl
4439     set Open_vSwitch . other_config:max-idle=10000 \
4440     -- add-port br0 p1 -- set Interface p1 type=dummy])
4441
4442 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)'])
4443 ovs-appctl revalidator/wait
4444 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows1.txt])
4445
4446 odp_flow=`cat dp_flows1.txt`
4447 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
4448 Bridge: br0
4449 Flow: <cleared>
4450 No match, packets dropped because OFPPC_NO_PACKET_IN is set on in_port.
4451
4452 Rule: table=254 cookie=0 priority=0,reg0=0x2
4453 OpenFlow actions=drop
4454
4455 Final flow: <cleared>
4456 Megaflow: <cleared>
4457 Datapath actions: drop
4458 ])
4459
4460 dnl Now, try again without megaflows:
4461 ovs-appctl upcall/disable-megaflows
4462
4463 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)'])
4464 ovs-appctl revalidator/wait
4465 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows2.txt])
4466
4467 odp_flow=`cat dp_flows2.txt`
4468 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
4469 Bridge: br0
4470 Flow: <cleared>
4471 No match, packets dropped because OFPPC_NO_PACKET_IN is set on in_port.
4472
4473 Rule: table=254 cookie=0 priority=0,reg0=0x2
4474 OpenFlow actions=drop
4475
4476 Final flow: <cleared>
4477 Megaflow: <cleared>
4478 Datapath actions: drop
4479 ])
4480
4481 OVS_VSWITCHD_STOP
4482 AT_CLEANUP
4483
4484 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
4485 OVS_VSWITCHD_START
4486 ADD_OF_PORTS([br0], 1, 2, 3)
4487
4488 AT_DATA([flows.txt], [dnl
4489 in_port=1 actions=output:2
4490 in_port=2 actions=output:1
4491 ])
4492 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4493
4494 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
4495 AT_CHECK([tail -1 stdout], [0], [dnl
4496 Datapath actions: push_vlan(vid=123,pcp=0),2
4497 ])
4498
4499 OVS_VSWITCHD_STOP
4500 AT_CLEANUP
4501
4502
4503 m4_define([OFPROTO_TRACE],
4504   [flow="$2"
4505    AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
4506    actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4507    expected="$4"
4508    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
4509      [0], [stdout])
4510    mv stdout expout
4511    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
4512      [0], [expout])])
4513
4514 AT_SETUP([ofproto-dpif - MAC learning])
4515 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
4516 ADD_OF_PORTS([br0], 1, 2, 3)
4517
4518 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)'
4519
4520 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
4521 OFPROTO_TRACE(
4522   [ovs-dummy],
4523   [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
4524   [-generate],
4525   [1,2,100])
4526
4527 # Check for the MAC learning entry.
4528 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4529  port  VLAN  MAC                Age
4530     3     0  50:54:00:00:00:05    ?
4531 ])
4532
4533 # Trace a packet arrival destined for the learned MAC.
4534 # (This will also learn a MAC.)
4535 OFPROTO_TRACE(
4536   [ovs-dummy],
4537   [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
4538   [-generate],
4539   [3])
4540
4541 # Check for both MAC learning entries.
4542 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4543  port  VLAN  MAC                Age
4544     3     0  50:54:00:00:00:05    ?
4545     1     0  50:54:00:00:00:06    ?
4546 ])
4547
4548 # Trace a packet arrival that updates the first learned MAC entry.
4549 OFPROTO_TRACE(
4550   [ovs-dummy],
4551   [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
4552   [-generate],
4553   [1,3,100])
4554
4555 # Check that the MAC learning entry was updated.
4556 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4557  port  VLAN  MAC                Age
4558     1     0  50:54:00:00:00:06    ?
4559     2     0  50:54:00:00:00:05    ?
4560 ])
4561
4562 # Add another bridge.
4563 AT_CHECK(
4564   [ovs-vsctl \
4565      -- add-br br1 \
4566      -- set bridge br1 datapath-type=dummy])
4567 ADD_OF_PORTS([br1], 4, 5)
4568
4569 # Trace some packet arrivals in br1 to create MAC learning entries there too.
4570 OFPROTO_TRACE(
4571   [ovs-dummy],
4572   [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
4573   [-generate],
4574   [5,101])
4575 OFPROTO_TRACE(
4576   [ovs-dummy],
4577   [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
4578   [-generate],
4579   [4,101])
4580
4581 # Check that the MAC learning entries were added.
4582 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4583  port  VLAN  MAC                Age
4584     4     0  50:54:00:00:00:06    ?
4585     5     0  50:54:00:00:00:07    ?
4586 ])
4587
4588 # Delete port p1 and see that its MAC learning entry disappeared, and
4589 # that the MAC learning entry for the same MAC was also deleted from br1.
4590 AT_CHECK([ovs-vsctl del-port p1])
4591 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4592  port  VLAN  MAC                Age
4593     2     0  50:54:00:00:00:05    ?
4594 ])
4595 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4596  port  VLAN  MAC                Age
4597     5     0  50:54:00:00:00:07    ?
4598 ])
4599
4600 OVS_VSWITCHD_STOP
4601 AT_CLEANUP
4602
4603 AT_SETUP([ofproto-dpif - MAC table overflow])
4604 OVS_VSWITCHD_START(
4605   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
4606 ADD_OF_PORTS([br0], 1, 2, 3)
4607
4608 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)'
4609
4610 AT_CHECK([ovs-appctl time/stop])
4611
4612 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
4613 for i in 0 1 2 3 4 5 6 7 8 9; do
4614     OFPROTO_TRACE(
4615       [ovs-dummy],
4616       [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
4617       [-generate],
4618       [1,2,100])
4619     ovs-appctl time/warp 1000
4620 done
4621
4622 # Check for the MAC learning entries.
4623 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4624   [0], [dnl
4625     3     0  50:54:00:00:00:00
4626     3     0  50:54:00:00:00:01
4627     3     0  50:54:00:00:00:02
4628     3     0  50:54:00:00:00:03
4629     3     0  50:54:00:00:00:04
4630     3     0  50:54:00:00:00:05
4631     3     0  50:54:00:00:00:06
4632     3     0  50:54:00:00:00:07
4633     3     0  50:54:00:00:00:08
4634     3     0  50:54:00:00:00:09
4635  port  VLAN  MAC                Age
4636 ])
4637
4638 # Trace another ARP packet on another MAC.
4639 OFPROTO_TRACE(
4640   [ovs-dummy],
4641   [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
4642   [-generate],
4643   [1,2,100])
4644
4645 # Check that the new one chased the oldest one out of the table.
4646 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
4647   [0], [dnl
4648     3     0  50:54:00:00:00:01    ?
4649     3     0  50:54:00:00:00:02    ?
4650     3     0  50:54:00:00:00:03    ?
4651     3     0  50:54:00:00:00:04    ?
4652     3     0  50:54:00:00:00:05    ?
4653     3     0  50:54:00:00:00:06    ?
4654     3     0  50:54:00:00:00:07    ?
4655     3     0  50:54:00:00:00:08    ?
4656     3     0  50:54:00:00:00:09    ?
4657     3     0  50:54:00:00:00:10    ?
4658  port  VLAN  MAC                Age
4659 ])
4660 OVS_VSWITCHD_STOP
4661 AT_CLEANUP
4662
4663 AT_SETUP([ofproto-dpif - MAC table overflow fairness])
4664 OVS_VSWITCHD_START(
4665   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
4666 ADD_OF_PORTS([br0], 1, 2, 3, 4, 5, 6)
4667
4668 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)'
4669
4670 AT_CHECK([ovs-appctl time/stop])
4671
4672 # Trace packets with 2 different source MACs arriving on each of the 5
4673 # ports, filling up the 10-entry learning table.
4674 for i in 0 1 2 3 4 5 6 7 8 9; do
4675     p=`expr $i / 2 + 1`
4676     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
4677     ovs-appctl time/warp 1000
4678 done
4679
4680 # Check for the MAC learning entries.
4681 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4682   [0], [dnl
4683     1     0  50:54:00:00:00:00
4684     1     0  50:54:00:00:00:01
4685     2     0  50:54:00:00:00:02
4686     2     0  50:54:00:00:00:03
4687     3     0  50:54:00:00:00:04
4688     3     0  50:54:00:00:00:05
4689     4     0  50:54:00:00:00:06
4690     4     0  50:54:00:00:00:07
4691     5     0  50:54:00:00:00:08
4692     5     0  50:54:00:00:00:09
4693  port  VLAN  MAC                Age
4694 ])
4695
4696 # Now trace 16 new MACs on another port.
4697 for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
4698     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
4699     ovs-appctl time/warp 1000
4700 done
4701
4702 # Check the results.
4703 #
4704 # Our eviction algorithm on overflow is that an arbitrary (but deterministic)
4705 # one of the ports with the most learned MACs loses the least recently used
4706 # one.  Thus, the new port will end up with 3 MACs, 3 of the old ports with 1
4707 # MAC each, and the other 2 of the old ports with 2 MACs each.
4708 #
4709 # (If someone changes lib/heap.c to do something different with equal-priority
4710 # nodes, then the output below could change, but it would still follow the
4711 # rules explained above.)
4712 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4713   [0], [dnl
4714     1     0  50:54:00:00:00:01
4715     2     0  50:54:00:00:00:03
4716     3     0  50:54:00:00:00:04
4717     3     0  50:54:00:00:00:05
4718     4     0  50:54:00:00:00:07
4719     5     0  50:54:00:00:00:08
4720     5     0  50:54:00:00:00:09
4721     6     0  50:54:00:00:0d:ff
4722     6     0  50:54:00:00:0e:ff
4723     6     0  50:54:00:00:0f:ff
4724  port  VLAN  MAC                Age
4725 ])
4726 OVS_VSWITCHD_STOP
4727 AT_CLEANUP
4728
4729 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR)
4730 #
4731 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
4732 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
4733   [AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
4734   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4735
4736   ON_EXIT([kill `cat test-sflow.pid`])
4737   AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
4738   AT_CAPTURE_FILE([sflow.log])
4739   SFLOW_PORT=`parse_listening_port < test-sflow.log`
4740   ovs-appctl time/stop
4741
4742   ADD_OF_PORTS([br0], 1, 2)
4743   ovs-vsctl \
4744      set Interface br0 options:ifindex=1002 -- \
4745      set Interface p1 options:ifindex=1004 -- \
4746      set Interface p2 options:ifindex=1003 -- \
4747      set Bridge br0 sflow=@sf -- \
4748      --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
4749        header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
4750
4751   dnl open with ARP packets to seed the bridge-learning.  The output
4752   dnl ifIndex numbers should be reported predictably after that.
4753   dnl Since we set sampling=1 we should see all of these packets
4754   dnl reported. Sorting the output by data-source and seqNo makes
4755   dnl it deterministic. Ensuring that we send at least two packets
4756   dnl into each port means we get to check the seq nos are
4757   dnl incrementing correctly.
4758   dnl because packets from different ports can be handled by separate
4759   dnl threads, put some sleeps
4760
4761   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)'
4762   sleep 1
4763   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)'
4764   sleep 1
4765   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)'
4766   sleep 1
4767   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)'
4768   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)'
4769
4770   dnl sleep long enough to get more than one counter sample
4771   dnl from each datasource so we can check sequence numbers
4772   ovs-appctl time/warp 3000 100
4773   OVS_VSWITCHD_STOP
4774   ovs-appctl -t test-sflow exit
4775
4776   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
4777         /g']], [0], [dnl
4778 HEADER
4779         dgramSeqNo=1
4780         ds=127.0.0.1>2:1000
4781         fsSeqNo=1
4782         in_vlan=0
4783         in_priority=0
4784         out_vlan=0
4785         out_priority=0
4786         meanSkip=1
4787         samplePool=1
4788         dropEvents=0
4789         in_ifindex=1004
4790         in_format=0
4791         out_ifindex=2
4792         out_format=2
4793         hdr_prot=1
4794         pkt_len=64
4795         stripped=4
4796         hdr_len=60
4797         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-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
4798 HEADER
4799         dgramSeqNo=1
4800         ds=127.0.0.1>2:1000
4801         fsSeqNo=2
4802         in_vlan=0
4803         in_priority=0
4804         out_vlan=0
4805         out_priority=0
4806         meanSkip=1
4807         samplePool=2
4808         dropEvents=0
4809         in_ifindex=1003
4810         in_format=0
4811         out_ifindex=2
4812         out_format=2
4813         hdr_prot=1
4814         pkt_len=64
4815         stripped=4
4816         hdr_len=60
4817         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-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
4818 HEADER
4819         dgramSeqNo=1
4820         ds=127.0.0.1>2:1000
4821         fsSeqNo=3
4822         in_vlan=0
4823         in_priority=0
4824         out_vlan=0
4825         out_priority=0
4826         meanSkip=1
4827         samplePool=3
4828         dropEvents=0
4829         in_ifindex=1004
4830         in_format=0
4831         out_ifindex=1003
4832         out_format=0
4833         hdr_prot=1
4834         pkt_len=64
4835         stripped=4
4836         hdr_len=60
4837         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-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
4838 HEADER
4839         dgramSeqNo=1
4840         ds=127.0.0.1>2:1000
4841         fsSeqNo=4
4842         in_vlan=0
4843         in_priority=0
4844         out_vlan=0
4845         out_priority=0
4846         meanSkip=1
4847         samplePool=4
4848         dropEvents=0
4849         in_ifindex=1003
4850         in_format=0
4851         out_ifindex=1004
4852         out_format=0
4853         hdr_prot=1
4854         pkt_len=64
4855         stripped=4
4856         hdr_len=60
4857         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-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
4858 HEADER
4859         dgramSeqNo=1
4860         ds=127.0.0.1>2:1000
4861         fsSeqNo=5
4862         in_vlan=0
4863         in_priority=0
4864         out_vlan=0
4865         out_priority=0
4866         meanSkip=1
4867         samplePool=5
4868         dropEvents=0
4869         in_ifindex=1003
4870         in_format=0
4871         out_ifindex=1004
4872         out_format=0
4873         hdr_prot=1
4874         pkt_len=64
4875         stripped=4
4876         hdr_len=60
4877         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-00-00-00-00-00-00
4878 ])
4879
4880   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR|PORTNAME|OPENFLOWPORT' | head -18 | sed 's/ /\
4881         /g']], [0], [dnl
4882 IFCOUNTERS
4883         dgramSeqNo=2
4884         ds=127.0.0.1>0:1002
4885         csSeqNo=1
4886         ifindex=1002
4887         type=6
4888         ifspeed=100000000
4889         direction=0
4890         status=0
4891         in_octets=0
4892         in_unicasts=0
4893         in_multicasts=0
4894         in_broadcasts=4294967295
4895         in_discards=0
4896         in_errors=0
4897         in_unknownprotos=4294967295
4898         out_octets=120
4899         out_unicasts=2
4900         out_multicasts=4294967295
4901         out_broadcasts=4294967295
4902         out_discards=0
4903         out_errors=0
4904         promiscuous=0
4905 IFCOUNTERS
4906         dgramSeqNo=2
4907         ds=127.0.0.1>0:1003
4908         csSeqNo=1
4909         ifindex=1003
4910         type=6
4911         ifspeed=100000000
4912         direction=0
4913         status=0
4914         in_octets=138
4915         in_unicasts=3
4916         in_multicasts=0
4917         in_broadcasts=4294967295
4918         in_discards=0
4919         in_errors=0
4920         in_unknownprotos=4294967295
4921         out_octets=120
4922         out_unicasts=2
4923         out_multicasts=4294967295
4924         out_broadcasts=4294967295
4925         out_discards=0
4926         out_errors=0
4927         promiscuous=0
4928 IFCOUNTERS
4929         dgramSeqNo=2
4930         ds=127.0.0.1>0:1004
4931         csSeqNo=1
4932         ifindex=1004
4933         type=6
4934         ifspeed=100000000
4935         direction=0
4936         status=0
4937         in_octets=84
4938         in_unicasts=2
4939         in_multicasts=0
4940         in_broadcasts=4294967295
4941         in_discards=0
4942         in_errors=0
4943         in_unknownprotos=4294967295
4944         out_octets=180
4945         out_unicasts=3
4946         out_multicasts=4294967295
4947         out_broadcasts=4294967295
4948         out_discards=0
4949         out_errors=0
4950         promiscuous=0
4951 IFCOUNTERS
4952         dgramSeqNo=3
4953         ds=127.0.0.1>0:1002
4954         csSeqNo=2
4955         ifindex=1002
4956         type=6
4957         ifspeed=100000000
4958         direction=0
4959         status=0
4960         in_octets=0
4961         in_unicasts=0
4962         in_multicasts=0
4963         in_broadcasts=4294967295
4964         in_discards=0
4965         in_errors=0
4966         in_unknownprotos=4294967295
4967         out_octets=120
4968         out_unicasts=2
4969         out_multicasts=4294967295
4970         out_broadcasts=4294967295
4971         out_discards=0
4972         out_errors=0
4973         promiscuous=0
4974 IFCOUNTERS
4975         dgramSeqNo=3
4976         ds=127.0.0.1>0:1003
4977         csSeqNo=2
4978         ifindex=1003
4979         type=6
4980         ifspeed=100000000
4981         direction=0
4982         status=0
4983         in_octets=138
4984         in_unicasts=3
4985         in_multicasts=0
4986         in_broadcasts=4294967295
4987         in_discards=0
4988         in_errors=0
4989         in_unknownprotos=4294967295
4990         out_octets=120
4991         out_unicasts=2
4992         out_multicasts=4294967295
4993         out_broadcasts=4294967295
4994         out_discards=0
4995         out_errors=0
4996         promiscuous=0
4997 IFCOUNTERS
4998         dgramSeqNo=3
4999         ds=127.0.0.1>0:1004
5000         csSeqNo=2
5001         ifindex=1004
5002         type=6
5003         ifspeed=100000000
5004         direction=0
5005         status=0
5006         in_octets=84
5007         in_unicasts=2
5008         in_multicasts=0
5009         in_broadcasts=4294967295
5010         in_discards=0
5011         in_errors=0
5012         in_unknownprotos=4294967295
5013         out_octets=180
5014         out_unicasts=3
5015         out_multicasts=4294967295
5016         out_broadcasts=4294967295
5017         out_discards=0
5018         out_errors=0
5019         promiscuous=0
5020 OPENFLOWPORT
5021         datapath_id=18364758544493064720
5022         port_no=1
5023 OPENFLOWPORT
5024         datapath_id=18364758544493064720
5025         port_no=1
5026 OPENFLOWPORT
5027         datapath_id=18364758544493064720
5028         port_no=2
5029 OPENFLOWPORT
5030         datapath_id=18364758544493064720
5031         port_no=2
5032 OPENFLOWPORT
5033         datapath_id=18364758544493064720
5034         port_no=65534
5035 OPENFLOWPORT
5036         datapath_id=18364758544493064720
5037         port_no=65534
5038 PORTNAME
5039         portName=br0
5040 PORTNAME
5041         portName=br0
5042 PORTNAME
5043         portName=p1
5044 PORTNAME
5045         portName=p1
5046 PORTNAME
5047         portName=p2
5048 PORTNAME
5049         portName=p2
5050 ])])
5051
5052 AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv4 collector])
5053 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1])
5054 AT_CLEANUP
5055
5056 AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv6 collector])
5057 AT_SKIP_IF([test $HAVE_IPV6 = no])
5058 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]])
5059 AT_CLEANUP
5060
5061 dnl Test sFlow LAG structures
5062 AT_SETUP([ofproto-dpif - sFlow packet sampling - LACP structures])
5063 AT_SKIP_IF([test "$IS_WIN32" = "yes"])
5064 OVS_VSWITCHD_START([dnl
5065                     add-bond br0 bond p1 p2 --                          \
5066                     set Port bond lacp=active bond-mode=active-backup   \
5067                     other_config:lacp-time="fast"                       \
5068                     other_config:lacp-system-id=11:22:33:44:55:66       \
5069                     other_config:lacp-system-priority=54321 --          \
5070                     set Interface p1 type=dummy                         \
5071                     other_config:lacp-port-id=11                        \
5072                     other_config:lacp-port-priority=111                 \
5073                     other_config:lacp-aggregation-key=3333 --           \
5074                     set Interface p2 type=dummy                         \
5075                     other_config:lacp-port-id=22                        \
5076                     other_config:lacp-port-priority=222                 \
5077                     other_config:lacp-aggregation-key=3333 ])
5078
5079 ON_EXIT([kill `cat test-sflow.pid`])
5080 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5081 AT_CAPTURE_FILE([sflow.log])
5082 SFLOW_PORT=`parse_listening_port < test-sflow.log`
5083
5084 ovs-appctl time/stop
5085
5086 ovs-vsctl \
5087       set Interface p1 options:ifindex=1003 --                  \
5088       set Bridge br0 sflow=@sf --                               \
5089       --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\"   \
5090       header=128 sampling=1 polling=1
5091
5092 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5093 AT_CHECK([ovs-appctl time/warp 2000 100], [0], [ignore])
5094 AT_CHECK([ovs-appctl revalidator/purge], [0])
5095 OVS_VSWITCHD_STOP
5096 ovs-appctl -t test-sflow exit
5097 AT_CHECK([[sort sflow.log | $EGREP 'LACPCOUNTERS|ERROR' | head -n 1 | sed 's/ /\
5098         /g']], [0], [dnl
5099 LACPCOUNTERS
5100         sysID=11:22:33:44:55:66
5101         partnerID=00:00:00:00:00:00
5102         aggID=3333
5103         actorAdmin=0x7
5104         actorOper=0xbf
5105         partnerAdmin=0x0
5106         partnerOper=0x2
5107         LACPUDsRx=0
5108         markerPDUsRx=4294967295
5109         markerRespPDUsRx=4294967295
5110         unknownRx=4294967295
5111         illegalRx=0
5112         LACPUDsTx=1
5113         markerPDUsTx=4294967295
5114         markerRespPDUsTx=4294967295
5115 ])
5116
5117 AT_CLEANUP
5118
5119 AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel set])
5120 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5121 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5122
5123 dnl set up sFlow logging
5124 dnl ON_EXIT([kill `cat test-sflow.pid`])
5125 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5126 AT_CAPTURE_FILE([sflow.log])
5127 SFLOW_PORT=`parse_listening_port < test-sflow.log`
5128 ovs-appctl time/stop
5129
5130 OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
5131 AT_CHECK([ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre \
5132                     options:remote_ip=1.1.1.1 options:key=456 ofport_request=3])
5133 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy ofport_request=4])
5134
5135 AT_CHECK([ovs-ofctl add-flow br0 action=3])
5136
5137 dnl enable sflow
5138 ovs-vsctl \
5139    set Bridge br0 sflow=@sf -- \
5140    --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5141      header=128 sampling=1 polling=0
5142
5143 dnl introduce a packet that will be flooded to the tunnel
5144 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)'])
5145
5146 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5147 for i in `seq 1 30`; do
5148     ovs-appctl time/warp 100
5149 done
5150
5151 ovs-appctl -t test-sflow exit
5152
5153 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5154         /g']], [0], [dnl
5155 HEADER
5156         dgramSeqNo=1
5157         ds=127.0.0.1>2:1000
5158         fsSeqNo=1
5159         tunnel4_out_length=0
5160         tunnel4_out_protocol=47
5161         tunnel4_out_src=0.0.0.0
5162         tunnel4_out_dst=1.1.1.1
5163         tunnel4_out_src_port=0
5164         tunnel4_out_dst_port=0
5165         tunnel4_out_tcp_flags=0
5166         tunnel4_out_tos=1
5167         tunnel_out_vni=456
5168         in_vlan=0
5169         in_priority=0
5170         out_vlan=0
5171         out_priority=0
5172         meanSkip=1
5173         samplePool=1
5174         dropEvents=0
5175         in_ifindex=0
5176         in_format=0
5177         out_ifindex=1
5178         out_format=2
5179         hdr_prot=1
5180         pkt_len=64
5181         stripped=4
5182         hdr_len=60
5183         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-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
5184 ])
5185
5186 OVS_VSWITCHD_STOP
5187 AT_CLEANUP
5188
5189 AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel push])
5190 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5191
5192 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 options:ifindex=1010])
5193
5194 dnl set up sFlow logging
5195 dnl ON_EXIT([kill `cat test-sflow.pid`])
5196 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5197 AT_CAPTURE_FILE([sflow.log])
5198 SFLOW_PORT=`parse_listening_port < test-sflow.log`
5199 ovs-appctl time/stop
5200
5201 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5202 AT_CHECK([ovs-vsctl add-br int-br -- set bridge int-br datapath_type=dummy], [0])
5203 AT_CHECK([ovs-vsctl -- add-port int-br t1 -- set Interface t1 type=gre \
5204                        options:remote_ip=1.1.2.92 options:key=456 ofport_request=4\
5205                     -- add-port int-br vm1 -- set Interface vm1 type=dummy \
5206                        options:ifindex=2011 ofport_request=5
5207                        ], [0])
5208
5209 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5210 dummy@ovs-dummy: hit:0 missed:0
5211         br0:
5212                 br0 65534/100: (dummy)
5213                 p0 1/1: (dummy: ifindex=1010)
5214         int-br:
5215                 int-br 65534/2: (dummy)
5216                 t1 4/4: (gre: key=456, remote_ip=1.1.2.92)
5217                 vm1 5/3: (dummy: ifindex=2011)
5218 ])
5219
5220 dnl set up route to 1.1.2.92 via br0 and action=normal
5221 AT_CHECK([ovs-appctl ovs/route/add 1.1.2.92/24 br0], [0], [OK
5222 ])
5223 AT_CHECK([ovs-appctl ovs/route/add 192.168.0.0/16 br0], [0], [OK
5224 ])
5225 AT_CHECK([ovs-appctl netdev-dummy/ip4addr br0 1.1.2.88/24], [0], [OK
5226 ])
5227 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
5228
5229 dnl Prime ARP Cache for 1.1.2.92
5230 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=1,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)'])
5231
5232 dnl configure sflow on int-br only
5233 ovs-vsctl \
5234    set Bridge int-br sflow=@sf -- \
5235    --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5236      header=128 sampling=1 polling=0
5237
5238 dnl add rule for int-br to force packet onto tunnel. There is no ifindex
5239 dnl for this port so the sFlow output will just report that it went to
5240 dnl 1 output (out_format=2, out_ifindex=1)
5241 AT_CHECK([ovs-ofctl add-flow int-br "actions=4"])
5242
5243 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)'])
5244
5245 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5246 for i in `seq 1 30`; do
5247     ovs-appctl time/warp 100
5248 done
5249
5250 ovs-appctl -t test-sflow exit
5251
5252 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5253         /g']], [0], [dnl
5254 HEADER
5255         dgramSeqNo=1
5256         ds=127.0.0.1>2:1000
5257         fsSeqNo=1
5258         tunnel4_out_length=0
5259         tunnel4_out_protocol=47
5260         tunnel4_out_src=1.1.2.88
5261         tunnel4_out_dst=1.1.2.92
5262         tunnel4_out_src_port=0
5263         tunnel4_out_dst_port=0
5264         tunnel4_out_tcp_flags=0
5265         tunnel4_out_tos=0
5266         tunnel_out_vni=456
5267         in_vlan=0
5268         in_priority=0
5269         out_vlan=0
5270         out_priority=0
5271         meanSkip=1
5272         samplePool=1
5273         dropEvents=0
5274         in_ifindex=2011
5275         in_format=0
5276         out_ifindex=1
5277         out_format=2
5278         hdr_prot=1
5279         pkt_len=64
5280         stripped=4
5281         hdr_len=60
5282         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-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
5283 ])
5284
5285 OVS_VSWITCHD_STOP
5286 AT_CLEANUP
5287
5288 AT_SETUP([ofproto-dpif - sFlow packet sampling - MPLS])
5289 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5290 OVS_VSWITCHD_START
5291 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5292 ADD_OF_PORTS([br0], [1], [2])
5293 AT_DATA([flows.txt], [dnl
5294 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
5295 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
5296 ])
5297 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5298
5299 dnl set up sFlow logging
5300 dnl ON_EXIT([kill `cat test-sflow.pid`])
5301 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5302 AT_CAPTURE_FILE([sflow.log])
5303 SFLOW_PORT=`parse_listening_port < test-sflow.log`
5304 ovs-appctl time/stop
5305
5306 dnl configure sflow
5307 ovs-vsctl \
5308    set Bridge br0 sflow=@sf -- \
5309    --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5310      header=128 sampling=1 polling=0
5311
5312 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)'])
5313 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)'])
5314
5315 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5316 for i in `seq 1 30`; do
5317     ovs-appctl time/warp 100
5318 done
5319
5320 ovs-appctl -t test-sflow exit
5321
5322 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5323         /g']], [0], [dnl
5324 HEADER
5325         dgramSeqNo=1
5326         ds=127.0.0.1>2:1000
5327         fsSeqNo=1
5328         mpls_label_0=789
5329         mpls_tc_0=4
5330         mpls_ttl_0=32
5331         mpls_bos_0=0
5332         mpls_label_1=11
5333         mpls_tc_1=3
5334         mpls_ttl_1=64
5335         mpls_bos_1=1
5336         in_vlan=0
5337         in_priority=0
5338         out_vlan=0
5339         out_priority=0
5340         meanSkip=1
5341         samplePool=1
5342         dropEvents=0
5343         in_ifindex=0
5344         in_format=0
5345         out_ifindex=1
5346         out_format=2
5347         hdr_prot=1
5348         pkt_len=64
5349         stripped=4
5350         hdr_len=60
5351         hdr=50-54-00-00-00-0A-50-54-00-00-00-09-88-47-00-00-B7-40-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
5352 HEADER
5353         dgramSeqNo=1
5354         ds=127.0.0.1>2:1000
5355         fsSeqNo=2
5356         mpls_label_0=789
5357         mpls_tc_0=4
5358         mpls_ttl_0=32
5359         mpls_bos_0=1
5360         in_vlan=0
5361         in_priority=0
5362         out_vlan=0
5363         out_priority=0
5364         meanSkip=1
5365         samplePool=2
5366         dropEvents=0
5367         in_ifindex=0
5368         in_format=0
5369         out_ifindex=1
5370         out_format=2
5371         hdr_prot=1
5372         pkt_len=64
5373         stripped=4
5374         hdr_len=60
5375         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-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
5376 ])
5377
5378 OVS_VSWITCHD_STOP
5379 AT_CLEANUP
5380
5381
5382 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR)
5383 #
5384 # Test that basic NetFlow reports flow statistics correctly:
5385 # The initial packet of a flow are correctly accounted.
5386 # Later packets within a flow are correctly accounted.
5387 # Flow actions changing (in this case, due to MAC learning)
5388 # cause a record to be sent.
5389 m4_define([CHECK_NETFLOW_EXPIRATION],
5390   [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5391   ADD_OF_PORTS([br0], 1, 2)
5392
5393   ovs-appctl time/stop
5394   ON_EXIT([kill `cat test-netflow.pid`])
5395   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
5396   AT_CAPTURE_FILE([netflow.log])
5397   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
5398
5399   ovs-vsctl \
5400      set Bridge br0 netflow=@nf -- \
5401      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
5402        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
5403
5404   for delay in 1000 30000; do
5405       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)'
5406       sleep 1  # ensure the order in which these two packets are processed
5407       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)'
5408
5409       ovs-appctl time/warp $delay
5410   done
5411
5412   ovs-appctl time/warp 6000
5413   ovs-appctl revalidator/wait
5414   OVS_VSWITCHD_STOP
5415   ovs-appctl -t test-netflow exit
5416
5417   AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
5418
5419   AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
5420
5421   combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
5422   separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
5423   AT_CHECK([test $separate = 2 || test $combined = 1], [0])])
5424
5425 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv4 collector])
5426 CHECK_NETFLOW_EXPIRATION([127.0.0.1])
5427 AT_CLEANUP
5428
5429 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv6 collector])
5430 AT_SKIP_IF([test $HAVE_IPV6 = no])
5431 CHECK_NETFLOW_EXPIRATION([[[::1]]])
5432 AT_CLEANUP
5433
5434 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR)
5435 #
5436 # Test that basic NetFlow reports active expirations correctly.
5437 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
5438   [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5439   ADD_OF_PORTS([br0], 1, 2)
5440
5441   ON_EXIT([kill `cat test-netflow.pid`])
5442   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
5443   AT_CAPTURE_FILE([netflow.log])
5444   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
5445
5446   ovs-vsctl \
5447      set Bridge br0 netflow=@nf -- \
5448      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
5449        engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
5450
5451   AT_CHECK([ovs-appctl time/stop])
5452   n=1
5453   while test $n -le 60; do
5454       n=`expr $n + 1`
5455
5456       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)'
5457       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)'
5458
5459       ovs-appctl time/warp 1000
5460   done
5461
5462   ovs-appctl time/warp 10000
5463
5464   ovs-appctl revalidator/wait
5465   OVS_VSWITCHD_STOP
5466   ovs-appctl -t test-netflow exit
5467
5468   # Count the number of reported packets:
5469   # - From source to destination before MAC learning kicks in (just one).
5470   # - From source to destination after that.
5471   # - From destination to source.
5472   n_learn=0
5473   n_in=0
5474   n_out=0
5475   n_other=0
5476   n_recs=0
5477   none=0
5478   while read line; do
5479       pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
5480       case $pkts in
5481            [[0-9]]*) ;;
5482        *) continue ;;
5483       esac
5484
5485       case $line in
5486           "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
5487               counter=n_learn
5488           ;;
5489       "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
5490           counter=n_in
5491           ;;
5492       "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
5493           counter=n_out
5494           ;;
5495       *)
5496           counter=n_other
5497           ;;
5498       esac
5499       eval $counter=\`expr \$$counter + \$pkts\`
5500       n_recs=`expr $n_recs + 1`
5501   done < netflow.log
5502
5503   # There should be exactly 1 MAC learning packet,
5504   # exactly 59 other packets in that direction,
5505   # and exactly 60 packets in the other direction.
5506   AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
5507 ])])
5508
5509 AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv4 collector])
5510 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1])
5511 AT_CLEANUP
5512
5513 AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv6 collector])
5514 AT_SKIP_IF([test $HAVE_IPV6 = no])
5515 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]])
5516 AT_CLEANUP
5517
5518 AT_SETUP([ofproto-dpif - flow stats])
5519 OVS_VSWITCHD_START
5520 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
5521 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
5522
5523 ovs-appctl time/stop
5524
5525 for i in `seq 1 10`; do
5526     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)'
5527 done
5528
5529 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
5530 AT_CHECK([ovs-appctl revalidator/purge], [0])
5531 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
5532 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
5533  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
5534  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
5535 ])
5536 OVS_VSWITCHD_STOP
5537 AT_CLEANUP
5538
5539 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
5540 OVS_VSWITCHD_START
5541 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
5542 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
5543
5544 ovs-appctl time/stop
5545
5546 for i in `seq 1 10`; do
5547     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)'
5548 done
5549
5550 ovs-appctl time/warp 100
5551 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
5552 ovs-appctl time/warp 1000
5553
5554 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
5555 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
5556  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
5557  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
5558 ])
5559 OVS_VSWITCHD_STOP
5560 AT_CLEANUP
5561
5562 AT_SETUP([ofproto-dpif - idle_age and hard_age increase over time])
5563 OVS_VSWITCHD_START
5564
5565 # get_ages DURATION HARD IDLE
5566 #
5567 # Fetch the flow duration, hard age, and idle age into the variables
5568 # whose names are given as arguments.  Rounds DURATION down to the
5569 # nearest integer.  If hard_age doesn't appear in the output, sets
5570 # HARD to "none".  If idle_age doesn't appear in the output, sets IDLE
5571 # to 0.
5572 get_ages () {
5573     AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
5574
5575     duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
5576     AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
5577     AS_VAR_COPY([$1], [duration])
5578
5579     hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
5580     if test X"$hard" = X; then
5581         hard=none
5582     else
5583         AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
5584     fi
5585     AS_VAR_COPY([$2], [hard])
5586
5587     idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
5588     if test X"$idle" = X; then
5589         idle=0
5590     else
5591         AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
5592     fi
5593     AS_VAR_COPY([$3], [idle])
5594 }
5595
5596 # Add a flow and get its initial hard and idle age.
5597 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
5598 get_ages duration1 hard1 idle1
5599
5600 ovs-appctl time/stop
5601 # Warp time forward by 10 seconds, then modify the flow's actions.
5602 ovs-appctl time/warp 10000
5603 get_ages duration2 hard2 idle2
5604 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
5605
5606 # Warp time forward by 10 seconds.
5607 ovs-appctl time/warp 10000
5608 get_ages duration3 hard3 idle3
5609
5610 # Warp time forward 10 more seconds, then pass some packets through the flow,
5611 # then warp forward a few more times because idle times are only updated
5612 # occasionally.
5613 ovs-appctl time/warp 10000
5614 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)'
5615 ovs-appctl time/warp 3000 1000
5616 sleep 1
5617 get_ages duration4 hard4 idle4
5618
5619 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
5620 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
5621 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
5622
5623 # Duration should increase steadily over time.
5624 AT_CHECK([test $duration1 -lt $duration2])
5625 AT_CHECK([test $duration2 -lt $duration3])
5626 AT_CHECK([test $duration3 -lt $duration4])
5627
5628 # Hard age should be "none" initially because it's the same as flow_duration,
5629 # then it should increase.
5630 AT_CHECK([test $hard1 = none])
5631 AT_CHECK([test $hard2 = none])
5632 AT_CHECK([test $hard3 != none])
5633 AT_CHECK([test $hard4 != none])
5634 AT_CHECK([test $hard3 -lt $hard4])
5635
5636 # Idle age should increase from 1 to 2 to 3, then decrease.
5637 AT_CHECK([test $idle1 -lt $idle2])
5638 AT_CHECK([test $idle2 -lt $idle3])
5639 AT_CHECK([test $idle3 -gt $idle4])
5640
5641 # Check some invariant relationships.
5642 AT_CHECK([test $duration1 = $idle1])
5643 AT_CHECK([test $duration2 = $idle2])
5644 AT_CHECK([test $duration3 = $idle3])
5645 AT_CHECK([test $idle3 -gt $hard3])
5646 AT_CHECK([test $idle4 -lt $hard4])
5647 AT_CHECK([test $hard4 -lt $duration4])
5648
5649 OVS_VSWITCHD_STOP
5650 AT_CLEANUP
5651
5652 AT_SETUP([ofproto-dpif - fin_timeout])
5653 OVS_VSWITCHD_START
5654 ovs-appctl time/stop
5655 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
5656 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5657 [NXST_FLOW reply:
5658  idle_timeout=60, actions=fin_timeout(idle_timeout=5)
5659 ])
5660
5661 # Check that a TCP SYN packet does not change the timeout.  (Because
5662 # flow stats updates are mainly what implements the fin_timeout
5663 # feature, we warp forward a couple of times to ensure that flow stats
5664 # run before re-checking the flow table.)
5665 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
5666 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
5667 warped
5668 ])
5669 AT_CHECK([ovs-appctl revalidator/purge], [0])
5670 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5671 [NXST_FLOW reply:
5672  n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
5673 ])
5674 # Check that a TCP FIN packet does change the timeout.
5675 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
5676 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
5677 warped
5678 ])
5679 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5680 [NXST_FLOW reply:
5681  n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
5682 ])
5683 OVS_VSWITCHD_STOP
5684 AT_CLEANUP
5685
5686 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
5687 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
5688 ADD_OF_PORTS([br0], [1], [2])
5689 ADD_OF_PORTS([br1], [3])
5690
5691 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
5692 dummy@br0
5693 dummy@br1
5694 ])
5695 OVS_VSWITCHD_STOP
5696 AT_CLEANUP
5697
5698 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
5699 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
5700 ADD_OF_PORTS([br0], [1], [2])
5701 ADD_OF_PORTS([br1], [3])
5702
5703 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5704 dummy@ovs-dummy: hit:0 missed:0
5705         br0:
5706                 br0 65534/100: (dummy)
5707                 p1 1/1: (dummy)
5708                 p2 2/2: (dummy)
5709         br1:
5710                 br1 65534/101: (dummy)
5711                 p3 3/3: (dummy)
5712 ])
5713 OVS_VSWITCHD_STOP
5714 AT_CLEANUP
5715
5716 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
5717 # bump max-idle to avoid the flows being reclaimed behind us
5718 OVS_VSWITCHD_START([add-br br1 -- \
5719                     set bridge br1 datapath-type=dummy fail-mode=secure -- \
5720                     set Open_vSwitch . other_config:max-idle=10000])
5721 ADD_OF_PORTS([br0], [1], [2])
5722 ADD_OF_PORTS([br1], [3])
5723
5724 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)'])
5725 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)'])
5726 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)'])
5727 ovs-appctl revalidator/wait
5728 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5729 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5730 recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5731 ])
5732
5733 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5734 recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5735 ])
5736
5737 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5738 skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p1),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
5739 skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p2),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
5740 ])
5741
5742 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5743 skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p3),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
5744 ])
5745
5746 OVS_VSWITCHD_STOP
5747 AT_CLEANUP
5748
5749 AT_SETUP([ofproto-dpif - ovs-appctl dpif/get-flow])
5750
5751 OVS_VSWITCHD_START([add-br br1 -- \
5752                     set bridge br1 datapath-type=dummy fail-mode=secure -- \
5753                     set Open_vSwitch . other_config:max-idle=10000])
5754 ADD_OF_PORTS([br0], [1], [2])
5755
5756 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)'])
5757 ovs-appctl revalidator/wait
5758 AT_CHECK([ovs-appctl dpif/dump-flows -m br0], [0], [stdout])
5759
5760 UFID=`sed -n 's/\(ufid:[[-0-9a-fA-F]]*\).*/\1/p' stdout`
5761 AT_CHECK([ovs-appctl dpctl/get-flow $UFID], [0], [dnl
5762 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5763 ])
5764
5765 OVS_VSWITCHD_STOP
5766 AT_CLEANUP
5767
5768 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
5769 OVS_VSWITCHD_START([dnl
5770    add-port br0 p1 -- set Interface p1 type=dummy
5771 ])
5772 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5773 ON_EXIT([kill `cat ovs-ofctl.pid`])
5774
5775 AT_CAPTURE_FILE([ofctl_monitor.log])
5776 AT_DATA([flows.txt], [dnl
5777 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
5778 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
5779 ])
5780 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5781
5782 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
5783 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
5784 dnl
5785 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
5786 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)
5787 dnl         (label 20, exp 0, [S], ttl 32)
5788 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
5789 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
5790
5791 for dl_src in 00 01; do
5792     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"])
5793 done
5794 sleep 1  # wait for the datapath flow installed
5795 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5796 recirc_id=0,mpls,in_port=1,dl_src=60:66:66:66:66:00,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=0,mpls_lse1=82208, actions:userspace(pid=0,slow_path(controller))
5797 recirc_id=0,mpls,in_port=1,dl_src=60:66:66:66:66:01,mpls_bos=0,mpls_lse1=82208, actions:userspace(pid=0,slow_path(controller))
5798 ])
5799
5800 OVS_VSWITCHD_STOP
5801 AT_CLEANUP
5802
5803
5804 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
5805 OVS_VSWITCHD_START([dnl
5806    add-port br0 p1 -- set Interface p1 type=dummy
5807 ])
5808 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5809 ON_EXIT([kill `cat ovs-ofctl.pid`])
5810
5811 AT_CAPTURE_FILE([ofctl_monitor.log])
5812 AT_DATA([flows.txt], [dnl
5813 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
5814 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
5815 ])
5816 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5817
5818 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
5819 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
5820 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
5821 dnl
5822 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
5823 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)
5824 dnl         (label 20, exp 0, ttl 32)
5825 dnl         (label 20, exp 0, ttl 32)
5826 dnl         (label 20, exp 0, [S], ttl 32)
5827 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
5828 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
5829
5830 for dl_src in 00 01; do
5831     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"])
5832 done
5833 sleep 1  # wait for the datapath flow installed
5834 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5835 recirc_id=0,mpls,in_port=1,dl_src=60:66:66:66:66:00,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=0,mpls_lse1=82208, actions:userspace(pid=0,slow_path(controller))
5836 recirc_id=0,mpls,in_port=1,dl_src=60:66:66:66:66:01,mpls_bos=0,mpls_lse1=82208, actions:userspace(pid=0,slow_path(controller))
5837 ])
5838
5839 OVS_VSWITCHD_STOP
5840 AT_CLEANUP
5841
5842 AT_SETUP([ofproto-dpif - patch ports])
5843 OVS_VSWITCHD_START([add-br br1 \
5844 -- set bridge br1 datapath-type=dummy fail-mode=secure \
5845 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
5846 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
5847
5848 ADD_OF_PORTS([br0], [2])
5849 ADD_OF_PORTS([br1], [3])
5850
5851 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
5852 ], [])
5853 AT_CHECK([ovs-appctl time/stop])
5854 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5855
5856 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
5857 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
5858
5859 for i in $(seq 1 10); do
5860     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)'
5861     if [[ $i -eq 1 ]]; then
5862         sleep 1
5863     fi
5864 done
5865
5866 for i in $(seq 1 5); do
5867     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)'
5868     if [[ $i -eq 1 ]]; then
5869         sleep 1
5870     fi
5871 done
5872
5873 AT_CHECK([ovs-appctl time/warp 500], [0],
5874 [warped
5875 ])
5876 sleep 1  # wait for log writer
5877
5878 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5879 dummy@ovs-dummy: hit:13 missed:2
5880         br0:
5881                 br0 65534/100: (dummy)
5882                 p2 2/2: (dummy)
5883                 pbr0 1/none: (patch: peer=pbr1)
5884         br1:
5885                 br1 65534/101: (dummy)
5886                 p3 3/3: (dummy)
5887                 pbr1 1/none: (patch: peer=pbr0)
5888 ])
5889
5890 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5891 recirc_id=0,ip,in_port=100,nw_frag=no, actions:101,3,2
5892 recirc_id=0,ip,in_port=101,nw_frag=no, actions:100,2,3
5893 ])
5894
5895 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
5896 skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), packets:9, bytes:540, used:0.0s, actions:101,3,2
5897 ])
5898 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
5899 skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), packets:4, bytes:240, used:0.0s, actions:100,2,3
5900 ])
5901
5902 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
5903 OFPST_PORT reply (xid=0x4): 1 ports
5904   port  1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
5905            tx pkts=10, bytes=600, drop=0, errs=0, coll=0
5906 ])
5907
5908 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
5909 OFPST_PORT reply (xid=0x4): 1 ports
5910   port  1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
5911            tx pkts=5, bytes=300, drop=0, errs=0, coll=0
5912 ])
5913
5914 OVS_VSWITCHD_STOP
5915 AT_CLEANUP
5916
5917 AT_SETUP([ofproto-dpif - patch ports - stack])
5918 OVS_VSWITCHD_START([add-br br1 \
5919 -- set bridge br1 datapath-type=dummy fail-mode=secure \
5920 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
5921 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
5922
5923 ADD_OF_PORTS([br0], [2])
5924 ADD_OF_PORTS([br1], [3])
5925
5926 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
5927 ], [])
5928 AT_CHECK([ovs-appctl time/stop])
5929 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5930
5931 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"])
5932 # Try to pop from empty stack, and push and leave data to stack.
5933 AT_CHECK([ovs-ofctl add-flow br1 "ip actions=pop:OXM_OF_IPV4_DST[[0..31]],push:NXM_NX_REG1[[0..31]],LOCAL"])
5934
5935 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)'
5936
5937 AT_CHECK([ovs-appctl time/warp 500], [0],
5938 [warped
5939 ])
5940
5941 OVS_WAIT_UNTIL([test `grep flow_add ovs-vswitchd.log | wc -l` -ge 1])
5942
5943 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5944 dummy@ovs-dummy: hit:0 missed:1
5945         br0:
5946                 br0 65534/100: (dummy)
5947                 p2 2/2: (dummy)
5948                 pbr0 1/none: (patch: peer=pbr1)
5949         br1:
5950                 br1 65534/101: (dummy)
5951                 p3 3/3: (dummy)
5952                 pbr1 1/none: (patch: peer=pbr0)
5953 ])
5954
5955 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5956 recirc_id=0,ip,in_port=100,nw_src=192.168.0.1,nw_frag=no, actions:101,set(ipv4(src=255.255.255.254)),2
5957 ])
5958
5959 AT_CHECK([cat ovs-vswitchd.log | grep -e '|nx_match|WARN|' | sed "s/^.*|WARN|//"], [0], [dnl
5960 Failed to pop from an empty stack. On flow
5961 ])
5962
5963 OVS_VSWITCHD_STOP(["/Failed to pop from an empty stack/d"])
5964 AT_CLEANUP
5965
5966 AT_SETUP([ofproto-dpif - port duration])
5967 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
5968 ADD_OF_PORTS([br0], 1, 2)
5969
5970 ovs-appctl time/stop
5971 ovs-appctl time/warp 10000
5972
5973 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
5974 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
5975 [dnl
5976            duration=?s
5977            duration=?s
5978            duration=?s
5979 ])
5980 OVS_VSWITCHD_STOP
5981 AT_CLEANUP
5982
5983 dnl ----------------------------------------------------------------------
5984 AT_BANNER([ofproto-dpif -- megaflows])
5985
5986 AT_SETUP([ofproto-dpif megaflow - port classification])
5987 OVS_VSWITCHD_START
5988 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5989 ADD_OF_PORTS([br0], [1], [2])
5990 AT_DATA([flows.txt], [dnl
5991 table=0 in_port=1 actions=output(2)
5992 ])
5993 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5994 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)'])
5995 sleep 1
5996 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)'])
5997 sleep 1
5998 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5999 recirc_id=0,ip,in_port=1,nw_frag=no, actions: <del>
6000 ])
6001 OVS_VSWITCHD_STOP
6002 AT_CLEANUP
6003
6004 AT_SETUP([ofproto-dpif megaflow - L2 classification])
6005 OVS_VSWITCHD_START
6006 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6007 ADD_OF_PORTS([br0], [1], [2])
6008 AT_DATA([flows.txt], [dnl
6009 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
6010 ])
6011 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6012 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)'])
6013 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)'])
6014 sleep 1
6015 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6016 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6017 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:0b/ff:ff:00:00:00:02,nw_frag=no, actions: <del>
6018 ])
6019 OVS_VSWITCHD_STOP
6020 AT_CLEANUP
6021
6022 AT_SETUP([ofproto-dpif megaflow - L3 classification])
6023 OVS_VSWITCHD_START
6024 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6025 ADD_OF_PORTS([br0], [1], [2])
6026 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], [])
6027 AT_DATA([flows.txt], [dnl
6028 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
6029 ])
6030 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6031 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)'])
6032 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)'])
6033 sleep 1
6034 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6035 recirc_id=0,icmp,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: <del>
6036 recirc_id=0,ip,in_port=1,nw_src=10.0.0.2/0.0.0.2,nw_frag=no, actions: <del>
6037 ])
6038 OVS_VSWITCHD_STOP
6039 AT_CLEANUP
6040
6041 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
6042 OVS_VSWITCHD_START
6043 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6044 ADD_OF_PORTS([br0], [1], [2])
6045 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], [])
6046 AT_DATA([flows.txt], [dnl
6047 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
6048 ])
6049 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6050 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)'])
6051 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)'])
6052 sleep 1
6053 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6054 recirc_id=0,ipv6,in_port=1,ipv6_src=2001:db8:3c4d:1:2:3:4:5,nw_frag=no, actions: <del>
6055 recirc_id=0,ipv6,in_port=1,ipv6_src=2001:db8:3c4d:5:4:3:2:1/0:0:0:4::,nw_frag=no, actions: <del>
6056 ])
6057 OVS_VSWITCHD_STOP
6058 AT_CLEANUP
6059
6060 AT_SETUP([ofproto-dpif megaflow - L4 classification])
6061 OVS_VSWITCHD_START
6062 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6063 ADD_OF_PORTS([br0], [1], [2])
6064 AT_DATA([flows.txt], [dnl
6065 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
6066 ])
6067 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6068 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)'])
6069 sleep 1
6070 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)'])
6071 sleep 1
6072 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6073 recirc_id=0,icmp,in_port=1,nw_frag=no,icmp_type=0x8/0xff, actions: <del>
6074 ])
6075 OVS_VSWITCHD_STOP
6076 AT_CLEANUP
6077
6078 AT_SETUP([ofproto-dpif megaflow - normal])
6079 OVS_VSWITCHD_START
6080 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6081 ADD_OF_PORTS([br0], [1], [2])
6082 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6083 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)'])
6084 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)'])
6085 sleep 1
6086 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6087 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
6088 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
6089 ])
6090 OVS_VSWITCHD_STOP
6091 AT_CLEANUP
6092
6093 AT_SETUP([ofproto-dpif megaflow - mpls])
6094 OVS_VSWITCHD_START
6095 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6096 ADD_OF_PORTS([br0], [1], [2])
6097 AT_DATA([flows.txt], [dnl
6098 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
6099 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
6100 ])
6101 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6102 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)'])
6103 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)'])
6104 sleep 1
6105 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6106 recirc_id=0,mpls,in_port=1,dl_src=50:54:00:00:00:09,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1, actions: <del>
6107 recirc_id=0,mpls,in_port=1,dl_src=50:54:00:00:00:0b,mpls_bos=1, actions: <del>
6108 ])
6109 OVS_VSWITCHD_STOP
6110 AT_CLEANUP
6111
6112 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR)
6113 m4_define([CHECK_MEGAFLOW_NETFLOW],
6114   [OVS_VSWITCHD_START
6115   AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6116   ADD_OF_PORTS([br0], [1], [2])
6117
6118   dnl NetFlow configuration disables wildcarding relevant fields
6119   ON_EXIT([kill `cat test-netflow.pid`])
6120   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
6121   AT_CAPTURE_FILE([netflow.log])
6122   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
6123   ovs-vsctl \
6124      set Bridge br0 netflow=@nf -- \
6125      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
6126        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
6127
6128   AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6129   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)'])
6130   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)'])
6131   sleep 1
6132   AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6133 recirc_id=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_frag=no,icmp_type=0x8/0xff,icmp_code=0x0/0xff, actions: <del>
6134 recirc_id=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_frag=no,icmp_type=0x8/0xff,icmp_code=0x0/0xff, actions: <del>
6135 ])
6136   OVS_VSWITCHD_STOP])
6137
6138 AT_SETUP([ofproto-dpif megaflow - netflow - IPv4 collector])
6139 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
6140 AT_CLEANUP
6141
6142 AT_SETUP([ofproto-dpif megaflow - netflow - IPv6 collector])
6143 AT_SKIP_IF([test $HAVE_IPV6 = no])
6144 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
6145 AT_CLEANUP
6146
6147 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
6148 OVS_VSWITCHD_START(
6149   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
6150    add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
6151    set interface p2 type=dummy ofport_request=2 -- \
6152    set interface p3 type=dummy ofport_request=3])
6153 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6154 ])
6155 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6156
6157 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6158 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)'])
6159 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)'])
6160 sleep 1
6161 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6162 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
6163 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
6164 ])
6165 OVS_VSWITCHD_STOP
6166 AT_CLEANUP
6167
6168 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
6169 OVS_VSWITCHD_START(
6170   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
6171    add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
6172    set interface p2 type=dummy ofport_request=2 -- \
6173    set interface p3 type=dummy ofport_request=3])
6174 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6175 ])
6176 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6177
6178 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6179 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)'])
6180 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)'])
6181 sleep 1
6182 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6183 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
6184 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
6185 ])
6186 OVS_VSWITCHD_STOP
6187 AT_CLEANUP
6188
6189 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
6190 # Create bond0 on br0 with interfaces p0 and p1
6191 #    and bond1 on br1 with interfaces p2 and p3
6192 # with p0 patched to p2 and p1 patched to p3.
6193 OVS_VSWITCHD_START(
6194   [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
6195                             other-config:lacp-time=fast \
6196                             other-config:bond-rebalance-interval=0 -- \
6197    set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
6198    set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
6199    add-br br1 -- \
6200    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
6201    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
6202                   fail-mode=secure -- \
6203    add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
6204                             other-config:lacp-time=fast \
6205                             other-config:bond-rebalance-interval=0 -- \
6206    set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
6207    set interface p3 type=patch options:peer=p1 ofport_request=4 --])
6208
6209 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6210 ])
6211 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6212 ADD_OF_PORTS([br0], [7])
6213 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6214 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
6215 ovs-appctl time/stop
6216 ovs-appctl time/warp 5000
6217 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)'])
6218 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)'])
6219 sleep 1
6220 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6221 recirc_id=0,ip,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
6222 recirc_id=0,ip,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
6223 ])
6224 OVS_VSWITCHD_STOP
6225 AT_CLEANUP
6226
6227 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
6228 OVS_VSWITCHD_START
6229 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6230 ADD_OF_PORTS([br0], [1], [2])
6231 AT_DATA([flows.txt], [dnl
6232 table=0 in_port=1,ip actions=resubmit(90)
6233 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
6234 ])
6235 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6236 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)'])
6237 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)'])
6238 sleep 1
6239 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6240 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6241 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:0b/ff:ff:00:00:00:02,nw_frag=no, actions: <del>
6242 ])
6243 OVS_VSWITCHD_STOP
6244 AT_CLEANUP
6245
6246 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
6247 OVS_VSWITCHD_START
6248 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6249 ADD_OF_PORTS([br0], [1], [2])
6250 AT_DATA([flows.txt], [dnl
6251 table=0 in_port=1,ip actions=resubmit(,1)
6252 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
6253 ])
6254 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6255 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)'])
6256 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=
6257 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
6258 sleep 1
6259 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6260 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6261 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
6262 ])
6263 OVS_VSWITCHD_STOP
6264 AT_CLEANUP
6265
6266 AT_SETUP([ofproto-dpif megaflow - goto_table action])
6267 OVS_VSWITCHD_START
6268 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6269 ADD_OF_PORTS([br0], [1], [2])
6270 AT_DATA([flows.txt], [dnl
6271 table=0 in_port=1,ip actions=goto_table(1)
6272 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
6273 ])
6274 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
6275 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)'])
6276 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)'])
6277 sleep 1
6278 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6279 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6280 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
6281 ])
6282 OVS_VSWITCHD_STOP
6283 AT_CLEANUP
6284
6285 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
6286 OVS_VSWITCHD_START
6287 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6288 ADD_OF_PORTS([br0], [1], [2], [3])
6289 ovs-vsctl \
6290         set Bridge br0 mirrors=@m --\
6291         --id=@p3 get Port p3 --\
6292         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
6293
6294 AT_DATA([flows.txt], [dnl
6295 in_port=1 actions=output:2
6296 ])
6297 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6298 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)'])
6299 sleep 1
6300 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)'])
6301 sleep 1
6302 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6303 recirc_id=0,ip,in_port=1,nw_frag=no, actions: <del>
6304 ])
6305 OVS_VSWITCHD_STOP
6306 AT_CLEANUP
6307
6308 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
6309 OVS_VSWITCHD_START
6310 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6311 ADD_OF_PORTS([br0], [1], [2], [3])
6312 ovs-vsctl \
6313         set Bridge br0 mirrors=@m --\
6314         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
6315         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
6316
6317 AT_DATA([flows.txt], [dnl
6318 in_port=1 actions=output:2
6319 ])
6320 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6321 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))'])
6322 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)'])
6323 sleep 1
6324 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6325 recirc_id=0,ip,in_port=1,dl_vlan=11,nw_frag=no, actions: <del>
6326 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, actions: <del>
6327 ])
6328 OVS_VSWITCHD_STOP
6329 AT_CLEANUP
6330
6331 AT_SETUP([ofproto-dpif megaflow - move action])
6332 OVS_VSWITCHD_START
6333 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6334 ADD_OF_PORTS([br0], [1], [2])
6335 AT_DATA([flows.txt], [dnl
6336 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
6337 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
6338 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
6339 ])
6340 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6341 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)'])
6342 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)'])
6343 sleep 1
6344 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6345 recirc_id=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, actions: <del>
6346 recirc_id=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: <del>
6347 ])
6348 OVS_VSWITCHD_STOP
6349 AT_CLEANUP
6350
6351 AT_SETUP([ofproto-dpif megaflow - push action])
6352 OVS_VSWITCHD_START
6353 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6354 ADD_OF_PORTS([br0], [1], [2])
6355 AT_DATA([flows.txt], [dnl
6356 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
6357 ])
6358 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6359 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)'])
6360 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)'])
6361 sleep 1
6362 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6363 recirc_id=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, actions: <del>
6364 recirc_id=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: <del>
6365 ])
6366 OVS_VSWITCHD_STOP
6367 AT_CLEANUP
6368
6369 AT_SETUP([ofproto-dpif megaflow - learning])
6370 OVS_VSWITCHD_START
6371 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6372 ADD_OF_PORTS([br0], [1], [2])
6373 AT_DATA([flows.txt], [dnl
6374 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
6375 ])
6376 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6377 ovs-appctl time/stop
6378 # We send each packet twice because the first packet in each flow causes the
6379 # flow table to change and thus revalidations, which (depending on timing)
6380 # can keep a megaflow from being installed.  The revalidations are done by
6381 # the second iteration, allowing the flows to be installed.
6382 for i in 1 2; do
6383     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)'])
6384     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)'])
6385     ovs-appctl time/warp 100
6386 done
6387 sleep 1
6388 dnl The original flow is missing due to a revalidation.
6389 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6390 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6391 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
6392 ])
6393 OVS_VSWITCHD_STOP
6394 AT_CLEANUP
6395
6396 AT_SETUP([ofproto-dpif megaflow - tunnels])
6397 OVS_VSWITCHD_START(
6398   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
6399 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6400 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
6401      options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
6402 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
6403           ofport_request=3])
6404 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
6405      options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
6406      ofport_request=4 options:key=flow])
6407 AT_DATA([flows.txt], [dnl
6408 in_port=1,actions=output(2)
6409 in_port=3,actions=output(4)
6410 ])
6411 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6412 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
6413 dnl will cause the packet to be dropped.
6414 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)'])
6415 sleep 1
6416 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)'])
6417 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)'])
6418 sleep 1
6419 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)'])
6420 sleep 1
6421 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6422 recirc_id=0,ip,in_port=1,nw_ecn=1,nw_frag=no, actions: <del>
6423 recirc_id=0,ip,in_port=3,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no, actions: <del>
6424 recirc_id=0,ip,in_port=3,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no, actions: <del>
6425 ])
6426 OVS_VSWITCHD_STOP
6427 AT_CLEANUP
6428
6429 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
6430 OVS_VSWITCHD_START
6431 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6432 ADD_OF_PORTS([br0], [1], [2])
6433 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], [])
6434 AT_DATA([flows.txt], [dnl
6435 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
6436 ])
6437 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6438 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)'])
6439 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)'])
6440 sleep 1
6441 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6442 recirc_id=0,icmp,in_port=1,nw_src=10.0.0.4,nw_ttl=64,nw_frag=no, actions: <del>
6443 recirc_id=0,ip,in_port=1,nw_src=10.0.0.2/0.0.0.2,nw_frag=no, actions: <del>
6444 ])
6445 OVS_VSWITCHD_STOP
6446 AT_CLEANUP
6447
6448 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
6449 OVS_VSWITCHD_START
6450 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6451 ADD_OF_PORTS([br0], [1], [2])
6452 AT_DATA([flows.txt], [dnl
6453 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
6454 ])
6455 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6456 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)'])
6457 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)'])
6458 sleep 1
6459 dnl The first packet is essentially a no-op, as the new destination MAC is the
6460 dnl same as the original.  The second entry actually updates the destination
6461 dnl MAC.
6462 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
6463 recirc_id=0,ip,in_port=1,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions:2
6464 recirc_id=0,ip,in_port=1,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions:set(eth(dst=50:54:00:00:00:0a)),2
6465 ])
6466 OVS_VSWITCHD_STOP
6467 AT_CLEANUP
6468
6469 AT_SETUP([ofproto-dpif megaflow - disabled])
6470 OVS_VSWITCHD_START
6471 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6472 ADD_OF_PORTS([br0], [1], [2])
6473 AT_DATA([flows.txt], [dnl
6474 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
6475 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
6476 ])
6477 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
6478 ], [])
6479 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
6480 ], [])
6481 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
6482 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6483 for i in 1 2 3 4; do
6484     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)'])
6485     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)'])
6486     if [[ $i -eq 1 ]]; then
6487         sleep 1
6488     fi
6489 done
6490 sleep 1
6491 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
6492 pkt_mark=0,recirc_id=0,dp_hash=0,skb_priority=0,icmp,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0, actions:2
6493 pkt_mark=0,recirc_id=0,dp_hash=0,skb_priority=0,icmp,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0, actions:drop
6494 ])
6495 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
6496 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:2
6497 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
6498 ])
6499 OVS_VSWITCHD_STOP
6500 AT_CLEANUP
6501
6502 AT_SETUP([ofproto-dpif - datapath port number change])
6503 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
6504 ADD_OF_PORTS([br0], 1)
6505
6506 # Trace a flow that should output to p1.
6507 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
6508   [0], [stdout])
6509 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
6510 ])
6511
6512 # Change p1's port number to 5.
6513 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
6514
6515 # Trace a flow that should output to p1 in its new location.
6516 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
6517   [0], [stdout])
6518 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
6519 ])
6520 OVS_VSWITCHD_STOP
6521 AT_CLEANUP
6522
6523 # Tests the bundling with various bfd and cfm configurations.
6524 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
6525 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
6526                     add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
6527                     add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
6528                     set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
6529                     set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
6530                     set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
6531                     set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
6532                     set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
6533                     set Interface p0 cfm_mpid=1 -- \
6534                     set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
6535
6536 ovs-appctl time/stop
6537 # advance the clock to stablize everything.
6538 ovs-appctl time/warp 5000 100
6539 # cfm/show should show 'recv' fault.
6540 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6541         fault: recv
6542 ])
6543 # bfd/show should show 'up'.
6544 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6545         Local Session State: up
6546         Remote Session State: up
6547         Local Session State: up
6548         Remote Session State: up
6549 ])
6550 # bond/show should show 'may-enable: true' for all slaves.
6551 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6552         may_enable: true
6553         may_enable: true
6554         may_enable: true
6555         may_enable: true
6556 ])
6557
6558 # now disable the bfd on p1.
6559 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
6560 # advance the clock to stablize everything.
6561 ovs-appctl time/warp 5000 100
6562 # cfm/show should show 'recv' fault.
6563 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6564         fault: recv
6565 ])
6566 # bfd/show should show 'down'.
6567 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6568         Local Session State: down
6569         Remote Session State: down
6570 ])
6571 # bond/show should show 'may-enable: false' for p0.
6572 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6573         may_enable: false
6574         may_enable: true
6575 ])
6576
6577 # now enable the bfd on p1 and disable bfd on p0.
6578 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
6579 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
6580 # advance the clock to stablize everything.
6581 ovs-appctl time/warp 5000 100
6582 # cfm/show should show 'recv' fault.
6583 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6584         fault: recv
6585 ])
6586 # bfd/show should show 'down'.
6587 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6588         Local Session State: down
6589         Remote Session State: down
6590 ])
6591 # bond/show should show 'may-enable: false' for p0 and p1.
6592 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6593         may_enable: false
6594         may_enable: true
6595         may_enable: false
6596         may_enable: true
6597 ])
6598
6599 OVS_VSWITCHD_STOP
6600 AT_CLEANUP
6601
6602 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
6603 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
6604
6605 # enable bfd on p0.
6606 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
6607 # check log.
6608 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
6609 # disable bfd on p0.
6610 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
6611 # check log.
6612 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
6613 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
6614
6615 # enable cfm on p0.
6616 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
6617 # check log.
6618 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
6619 # disable cfm on p0.
6620 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
6621 # check log.
6622 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
6623 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
6624
6625 # enable both bfd and cfm on p0.
6626 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
6627 # check log.
6628 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
6629 # disable bfd on p0.
6630 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
6631 # check log, there should not be the log of thread terminated.
6632 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
6633 ])
6634 # reenable bfd on p0.
6635 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
6636 # check log, should still be on log of thread created.
6637 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
6638 monitor thread created
6639 ])
6640 # disable bfd and cfm together.
6641 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
6642 # check log.
6643 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
6644
6645 OVS_VSWITCHD_STOP
6646 AT_CLEANUP
6647
6648 # this test helps avoid the deadlock between the main thread and monitor thread.
6649 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
6650 OVS_VSWITCHD_START
6651
6652 for i in `seq 1 199`
6653 do
6654     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])
6655 done
6656
6657 OVS_VSWITCHD_STOP
6658 AT_CLEANUP
6659 \f
6660 AT_BANNER([ofproto-dpif - flow translation resource limits])
6661
6662 AT_SETUP([ofproto-dpif - infinite resubmit])
6663 OVS_VSWITCHD_START
6664 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
6665 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
6666   [0], [stdout])
6667 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
6668 ])
6669 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
6670   [0], [1
6671 ])
6672 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
6673 AT_CLEANUP
6674
6675 AT_SETUP([ofproto-dpif - exponential resubmit chain])
6676 OVS_VSWITCHD_START
6677 ADD_OF_PORTS([br0], 1)
6678 (for i in `seq 1 64`; do
6679      j=`expr $i + 1`
6680      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6681  done
6682  echo "in_port=65, actions=local") > flows
6683  AT_CHECK([ovs-ofctl add-flows br0 flows])
6684 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
6685 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
6686 ])
6687 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
6688 AT_CLEANUP
6689
6690 AT_SETUP([ofproto-dpif - too many output actions])
6691 OVS_VSWITCHD_START
6692 ADD_OF_PORTS([br0], 1)
6693 (for i in `seq 1 12`; do
6694      j=`expr $i + 1`
6695      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6696  done
6697  echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
6698 AT_CHECK([ovs-ofctl add-flows br0 flows])
6699 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
6700 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
6701   [0], [1
6702 ])
6703 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
6704 ])
6705 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
6706 AT_CLEANUP
6707
6708 AT_SETUP([ofproto-dpif - stack too deep])
6709 OVS_VSWITCHD_START
6710 ADD_OF_PORTS([br0], 1)
6711 (for i in `seq 1 12`; do
6712      j=`expr $i + 1`
6713      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6714  done
6715  push="push:NXM_NX_REG0[[]]"
6716  echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
6717  AT_CHECK([ovs-ofctl add-flows br0 flows])
6718 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
6719 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
6720 ])
6721 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
6722 AT_CLEANUP
6723
6724
6725 AT_SETUP([ofproto-dpif packet-out controller])
6726 OVS_VSWITCHD_START
6727 ADD_OF_PORTS([br0], 1, 2)
6728
6729 AT_CHECK([ovs-ofctl add-flow br0 'dl_dst=50:54:00:00:00:0a actions=controller'])
6730
6731 AT_CAPTURE_FILE([ofctl_monitor.log])
6732 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6733
6734 for i in 1 2 3; do
6735         AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER controller '50540000000a5054000000091234'])
6736 done
6737
6738 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6739 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6740 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6741 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6742 dnl
6743 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6744 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6745 dnl
6746 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6747 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6748 ])
6749
6750 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
6751  dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6752 NXST_FLOW reply:
6753 ])
6754
6755 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6756   table 0:
6757     active=1, lookup=0, matched=0
6758
6759   table 1:
6760     active=0, lookup=0, matched=0
6761 "
6762  for i in `seq 2 253`; do
6763      printf '  table %d: ditto\n' $i
6764  done) > expout
6765 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6766
6767 OVS_VSWITCHD_STOP
6768 AT_CLEANUP
6769
6770 AT_SETUP([ofproto-dpif packet-out controller (patch port)])
6771 OVS_VSWITCHD_START(
6772   [-- \
6773    add-port br0 p1 -- \
6774    set interface p1 type=patch options:peer=p2 -- \
6775    add-br br1 -- \
6776    set bridge br1 datapath-type=dummy -- \
6777    set bridge br1 fail-mode=secure -- \
6778    set bridge br1 protocols='[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13]' -- \
6779    add-port br1 p2 -- \
6780    set interface p2 type=patch options:peer=p1 --])
6781
6782 AT_CAPTURE_FILE([ofctl_monitor.log])
6783 AT_CHECK([ovs-ofctl monitor br1 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6784
6785 for i in 1 2 3; do
6786         AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER output:1 '50540000000a5054000000091234'])
6787 done
6788
6789 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6790 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6791 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
6792 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6793 dnl
6794 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
6795 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6796 dnl
6797 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
6798 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6799 ])
6800
6801 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6802   table 0:
6803     active=0, lookup=0, matched=0
6804 "
6805  for i in `seq 1 253`; do
6806      printf '  table %d: ditto\n' $i
6807  done) > expout
6808 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6809
6810 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6811   table 0:
6812     active=0, lookup=3, matched=0
6813
6814   table 1:
6815     active=0, lookup=0, matched=0
6816 "
6817  for i in `seq 2 253`; do
6818      printf '  table %d: ditto\n' $i
6819  done) > expout
6820 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br1 ], [0], [expout])
6821
6822 OVS_VSWITCHD_STOP
6823 AT_CLEANUP
6824
6825
6826 AT_SETUP([ofproto-dpif packet-out goto_table])
6827 OVS_VSWITCHD_START
6828 ADD_OF_PORTS([br0], 1, 2)
6829
6830 AT_DATA([flows.txt], [dnl
6831 table=0 dl_dst=50:54:00:00:00:0a actions=goto_table(1)
6832 table=1 dl_dst=50:54:00:00:00:0a actions=controller
6833 ])
6834 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
6835
6836 AT_CAPTURE_FILE([ofctl_monitor.log])
6837 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6838
6839 for i in 1 2 3; do
6840     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)'
6841 done
6842
6843 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6844 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6845 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6846 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6847 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6848 dnl
6849 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6850 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6851 dnl
6852 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6853 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6854 ])
6855
6856 AT_CHECK([ovs-appctl revalidator/purge], [0])
6857 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
6858  n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=goto_table:1
6859  table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6860 OFPST_FLOW reply (OF1.3):
6861 ])
6862
6863 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6864   table 0:
6865     active=1, lookup=3, matched=3
6866
6867   table 1: ditto
6868   table 2:
6869     active=0, lookup=0, matched=0
6870 "
6871  for i in `seq 3 253`; do
6872      printf '  table %d: ditto\n' $i
6873  done) > expout
6874 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6875
6876 OVS_VSWITCHD_STOP
6877 AT_CLEANUP
6878
6879
6880 AT_SETUP([ofproto-dpif packet-out table-miss (continue)])
6881 OVS_VSWITCHD_START
6882 ADD_OF_PORTS([br0], 1, 2)
6883
6884 AT_CHECK([ovs-ofctl -O OpenFlow11 add-flow br0 'table=1 dl_dst=50:54:00:00:00:0a actions=controller'])
6885 AT_CHECK([ovs-ofctl -O OpenFlow11 mod-table br0 all continue])
6886
6887 AT_CAPTURE_FILE([ofctl_monitor.log])
6888 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6889
6890 for i in 1 2 3; do
6891     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)'
6892 done
6893
6894 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6895 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6896 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6897 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6898 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6899 dnl
6900 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6901 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6902 dnl
6903 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6904 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6905 ])
6906
6907 AT_CHECK([ovs-appctl revalidator/purge], [0])
6908 AT_CHECK([ovs-ofctl -O OpenFlow11 dump-flows br0 | ofctl_strip | sort], [0], [dnl
6909  table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6910 OFPST_FLOW reply (OF1.1):
6911 ])
6912
6913 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6914   table 0:
6915     active=0, lookup=3, matched=0
6916
6917   table 1:
6918     active=1, lookup=3, matched=3
6919
6920   table 2:
6921     active=0, lookup=0, matched=0
6922 "
6923  for i in `seq 3 253`; do
6924      printf '  table %d: ditto\n' $i
6925  done) > expout
6926 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6927
6928 OVS_VSWITCHD_STOP
6929 AT_CLEANUP
6930
6931 AT_SETUP([ofproto-dpif - ICMPv6])
6932 OVS_VSWITCHD_START
6933 ADD_OF_PORTS([br0], 1)
6934
6935 AT_CAPTURE_FILE([ofctl_monitor.log])
6936
6937 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6938
6939 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
6940
6941 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6942
6943 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6944 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
6945 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
6946 ])
6947
6948 OVS_VSWITCHD_STOP
6949 AT_CLEANUP
6950
6951 AT_SETUP([ofproto-dpif - Neighbor Discovery set-field with checksum update])
6952 OVS_VSWITCHD_START
6953 ADD_OF_PORTS([br0], 1)
6954 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])
6955
6956 AT_CAPTURE_FILE([ofctl_monitor.log])
6957
6958 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6959
6960 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
6961
6962 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6963
6964 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6965 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via action) data_len=86 (unbuffered)
6966 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
6967 ])
6968
6969 OVS_VSWITCHD_STOP
6970 AT_CLEANUP
6971
6972 # Tests the exact match of CFI bit in installed datapath flows matching VLAN.
6973 AT_SETUP([ofproto-dpif - vlan matching])
6974 OVS_VSWITCHD_START(
6975   [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
6976 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6977
6978 AT_CHECK([ovs-ofctl del-flows br0])
6979 AT_CHECK([ovs-ofctl add-flow br0 "vlan_tci=0x000a/0x0fff,action=output:local"])
6980
6981 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))'])
6982
6983 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port=[[1]]' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6984 recirc_id=0,ip,in_port=1,dl_vlan=10,nw_frag=no, actions: <del>
6985 ])
6986 OVS_VSWITCHD_STOP
6987 AT_CLEANUP
6988
6989 # Tests in place modification of installed datapath flows.
6990 AT_SETUP([ofproto-dpif - in place modification])
6991 OVS_VSWITCHD_START(
6992   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
6993 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6994
6995 AT_CHECK([ovs-ofctl del-flows br0])
6996 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=mod_vlan_vid:3,output:local])
6997
6998 ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
6999
7000 ovs-appctl time/stop
7001
7002 for i in 1 2 3; do
7003     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)'
7004 done
7005
7006 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7007 recirc_id(0),in_port(1),eth_type(0x1234), packets:2, bytes:120, used:0.0s, actions:push_vlan(vid=3,pcp=0),100
7008 ])
7009
7010 AT_CHECK([ovs-ofctl add-flow br0 priority=60000,in_port=1,actions=mod_vlan_vid:4,output:local])
7011
7012 ovs-appctl time/warp 500
7013 ovs-appctl time/warp 500
7014
7015 for i in 1 2 3; do
7016     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)'
7017 done
7018
7019 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7020 recirc_id(0),in_port(1),eth_type(0x1234), packets:5, bytes:300, used:0.0s, actions:push_vlan(vid=4,pcp=0),100
7021 ])
7022
7023 AT_CHECK([cat ovs-vswitchd.log | grep 'modify' | STRIP_UFID ], [0], [dnl
7024 dpif|DBG|dummy@ovs-dummy: put[[modify]] skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x1234), actions:push_vlan(vid=4,pcp=0),100
7025 ])
7026 OVS_VSWITCHD_STOP
7027 AT_CLEANUP