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