c78b6aa7a5e6cd9f6ee40b89c8fdcd69aa9defdf
[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 - table-miss flow with async config (OpenFlow 1.3)])
2656 OVS_VSWITCHD_START([dnl
2657    add-port br0 p1 -- set Interface p1 type=dummy
2658 ])
2659 ON_EXIT([kill `cat ovs-ofctl.pid`])
2660
2661 AT_CAPTURE_FILE([ofctl_monitor.log])
2662 # A table-miss flow has priority 0 and no match
2663 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2664
2665 dnl Singleton controller action.
2666 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2667
2668 # Become slave (OF 1.3), which should disable everything except port status.
2669 ovs-appctl -t ovs-ofctl ofctl/send 041800180000000200000003000000000000000000000001
2670
2671 # Use OF 1.3 OFPT_SET_ASYNC to enable OFPR_NO_MATCH for slave only.
2672 ovs-appctl -t ovs-ofctl ofctl/send 041c002000000002000000000000000100000000000000000000000000000000
2673
2674 for i in 1 2 3 ; do
2675     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)'
2676 done
2677 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2678 ovs-appctl -t ovs-ofctl exit
2679
2680 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2681
2682 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2683 send: OFPT_ROLE_REQUEST (OF1.3) (xid=0x2): role=slave generation_id=1
2684 OFPT_ROLE_REPLY (OF1.3) (xid=0x2): role=slave generation_id=1
2685 dnl
2686 send: OFPT_SET_ASYNC (OF1.3) (xid=0x2):
2687  master:
2688        PACKET_IN: (off)
2689      PORT_STATUS: (off)
2690     FLOW_REMOVED: (off)
2691
2692  slave:
2693        PACKET_IN: no_match
2694      PORT_STATUS: (off)
2695     FLOW_REMOVED: (off)
2696 dnl
2697 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2698 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
2699 dnl
2700 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2701 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
2702 dnl
2703 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2704 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
2705 ])
2706
2707 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2708
2709 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2710  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2711 OFPST_FLOW reply (OF1.3):
2712 ])
2713
2714 OVS_VSWITCHD_STOP
2715 AT_CLEANUP
2716
2717
2718 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.4)])
2719 OVS_VSWITCHD_START([dnl
2720    add-port br0 p1 -- set Interface p1 type=dummy
2721 ])
2722 ON_EXIT([kill `cat ovs-ofctl.pid`])
2723
2724 AT_CAPTURE_FILE([ofctl_monitor.log])
2725 # A table-miss flow has priority 0 and no match
2726 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2727
2728 dnl Singleton controller action.
2729 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2730
2731 for i in 1 2 3 ; do
2732     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)'
2733 done
2734 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2735 ovs-appctl -t ovs-ofctl exit
2736
2737 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2738
2739 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2740 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2741 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
2742 dnl
2743 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2744 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
2745 dnl
2746 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2747 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
2748 ])
2749
2750 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2751
2752 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2753  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2754 OFPST_FLOW reply (OF1.4):
2755 ])
2756
2757 OVS_VSWITCHD_STOP
2758 AT_CLEANUP
2759
2760
2761 AT_SETUP([ofproto-dpif - ARP modification slow-path])
2762 OVS_VSWITCHD_START
2763 ADD_OF_PORTS([br0], [1], [2])
2764
2765 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
2766 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'
2767
2768 # Input some packets that should follow the arp modification slow-path.
2769 for i in 1 2 3; do
2770     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)'
2771 done
2772 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2773
2774 # Check the packets that were output.
2775 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
2776 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
2777 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
2778 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
2779 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
2780 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
2781 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
2782 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
2783 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
2784 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
2785 ])
2786
2787 OVS_VSWITCHD_STOP
2788 AT_CLEANUP
2789
2790 AT_SETUP([ofproto-dpif - VLAN handling])
2791 OVS_VSWITCHD_START(
2792   [set Bridge br0 fail-mode=standalone -- \
2793    add-port br0 p1                                  trunks=10,12 -- \
2794    add-port br0 p2                           tag=10              -- \
2795    add-port br0 p3                           tag=12              \
2796                    other-config:priority-tags=true               -- \
2797    add-port br0 p4                           tag=12              -- \
2798    add-port br0 p5 vlan_mode=native-tagged   tag=10              -- \
2799    add-port br0 p6 vlan_mode=native-tagged   tag=10 trunks=10,12 -- \
2800    add-port br0 p7 vlan_mode=native-untagged tag=12              -- \
2801    add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
2802                    other-config:priority-tags=true               -- \
2803    set Interface p1 type=dummy -- \
2804    set Interface p2 type=dummy -- \
2805    set Interface p3 type=dummy -- \
2806    set Interface p4 type=dummy -- \
2807    set Interface p5 type=dummy -- \
2808    set Interface p6 type=dummy -- \
2809    set Interface p7 type=dummy -- \
2810    set Interface p8 type=dummy --])
2811
2812 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
2813 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
2814 dnl actions.
2815 for tuple in \
2816         "100 none 0 drop" \
2817         "100 0    0 drop" \
2818         "100 0    1 drop" \
2819         "100 10   0 1,5,6,7,8,pop_vlan,2" \
2820         "100 10   1 1,5,6,7,8,pop_vlan,2" \
2821         "100 11   0 5,7" \
2822         "100 11   1 5,7" \
2823         "100 12   0 1,5,6,pop_vlan,3,4,7,8" \
2824         "100 12   1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
2825         "1  none 0 drop" \
2826         "1  0    0 drop" \
2827         "1  0    1 drop" \
2828         "1  10   0 5,6,7,8,100,pop_vlan,2" \
2829         "1  10   1 5,6,7,8,100,pop_vlan,2" \
2830         "1  11   0 drop" \
2831         "1  11   1 drop" \
2832         "1  12   0 5,6,100,pop_vlan,3,4,7,8" \
2833         "1  12   1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
2834         "2  none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
2835         "2  0    0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
2836         "2  0    1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
2837         "2  10   0 drop" \
2838         "2  10   1 drop" \
2839         "2  11   0 drop" \
2840         "2  11   1 drop" \
2841         "2  12   0 drop" \
2842         "2  12   1 drop" \
2843         "3  none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
2844         "3  0    0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
2845         "3  0    1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
2846         "3  10   0 drop" \
2847         "3  10   1 drop" \
2848         "3  11   0 drop" \
2849         "3  11   1 drop" \
2850         "3  12   0 drop" \
2851         "3  12   1 drop" \
2852         "4  none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
2853         "4  0    0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
2854         "4  0    1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
2855         "4  10   0 drop" \
2856         "4  10   1 drop" \
2857         "4  11   0 drop" \
2858         "4  11   1 drop" \
2859         "4  12   0 drop" \
2860         "4  12   1 drop" \
2861         "5  none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
2862         "5  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
2863         "5  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
2864         "5  10   0 1,6,7,8,100,pop_vlan,2" \
2865         "5  10   1 1,6,7,8,100,pop_vlan,2" \
2866         "5  11   0 7,100" \
2867         "5  11   1 7,100" \
2868         "5  12   0 1,6,100,pop_vlan,3,4,7,8" \
2869         "5  12   1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
2870         "6  none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
2871         "6  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
2872         "6  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
2873         "6  10   0 1,5,7,8,100,pop_vlan,2" \
2874         "6  10   1 1,5,7,8,100,pop_vlan,2" \
2875         "6  11   0 drop" \
2876         "6  11   1 drop" \
2877         "6  12   0 1,5,100,pop_vlan,3,4,7,8" \
2878         "6  12   1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
2879         "7  none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
2880         "7  0    0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
2881         "7  0    1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
2882         "7  10   0 1,5,6,8,100,pop_vlan,2" \
2883         "7  10   1 1,5,6,8,100,pop_vlan,2" \
2884         "7  11   0 5,100" \
2885         "7  11   1 5,100" \
2886         "7  12   0 1,5,6,100,pop_vlan,3,4,8" \
2887         "7  12   1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
2888         "8  none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
2889         "8  0    0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
2890         "8  0    1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
2891         "8  10   0 1,5,6,7,100,pop_vlan,2" \
2892         "8  10   1 1,5,6,7,100,pop_vlan,2" \
2893         "8  11   0 drop" \
2894         "8  11   1 drop" \
2895         "8  12   0 1,5,6,100,pop_vlan,3,4,7" \
2896         "8  12   1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
2897 do
2898   set $tuple
2899   in_port=$1
2900   vlan=$2
2901   pcp=$3
2902   expected=$4
2903
2904   if test $vlan = none; then
2905     flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
2906   else
2907     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))"
2908   fi
2909
2910   echo "----------------------------------------------------------------------"
2911   echo "in_port=$in_port vlan=$vlan pcp=$pcp"
2912
2913   AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2914   actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2915
2916   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2917   mv stdout expout
2918   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2919 done
2920
2921 OVS_VSWITCHD_STOP
2922 AT_CLEANUP
2923
2924 AT_SETUP([ofproto-dpif - MPLS handling])
2925 OVS_VSWITCHD_START([dnl
2926    add-port br0 p1 -- set Interface p1 type=dummy
2927 ])
2928 ON_EXIT([kill `cat ovs-ofctl.pid`])
2929
2930 AT_CAPTURE_FILE([ofctl_monitor.log])
2931 AT_DATA([flows.txt], [dnl
2932 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
2933 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
2934 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
2935 ])
2936 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
2937
2938 dnl In this test, we push an MPLS tag to an ethernet packet.
2939 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2940
2941 for i in 1 2 3; do
2942     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)'
2943 done
2944 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2945 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2946
2947 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2948 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2949 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
2950 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
2951 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
2952 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
2953 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
2954 dnl
2955 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2956 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
2957 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
2958 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
2959 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
2960 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
2961 dnl
2962 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2963 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
2964 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
2965 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
2966 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
2967 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
2968 ])
2969
2970 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
2971 dnl copied exactly, except for the BOS bit.
2972 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2973
2974 for i in 1 2 3; do
2975     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)'
2976 done
2977 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2978 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2979
2980 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2981 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2982 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
2983 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
2984 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
2985 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
2986 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
2987 dnl
2988 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2989 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
2990 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
2991 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
2992 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
2993 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
2994 dnl
2995 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2996 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
2997 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
2998 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
2999 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3000 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3001 ])
3002
3003 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3004 dnl copied exactly, except for the BOS bit. The ethertype should be updated
3005 dnl to the MPLS ethertype of the MPLS push action which differs to that
3006 dnl of the input packet.
3007 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3008
3009 for i in 1 2 3; do
3010     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)'
3011 done
3012 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3013 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
3014
3015 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3016 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3017 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
3018 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3019 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3020 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3021 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3022 dnl
3023 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3024 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
3025 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3026 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3027 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3028 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3029 dnl
3030 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3031 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
3032 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3033 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3034 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3035 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3036 ])
3037
3038 OVS_VSWITCHD_STOP
3039 AT_CLEANUP
3040
3041 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
3042 OVS_VSWITCHD_START([dnl
3043    add-port br0 p1 -- set Interface p1 type=dummy
3044 ])
3045 ON_EXIT([kill `cat ovs-ofctl.pid`])
3046
3047 AT_CAPTURE_FILE([ofctl_monitor.log])
3048 AT_DATA([flows.txt], [dnl
3049 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
3050 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
3051 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
3052 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
3053 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
3054 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
3055 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
3056 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
3057 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
3058 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
3059 ])
3060 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3061
3062 dnl Modified MPLS controller action.
3063 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3064 dnl both of these in the final flow
3065 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3066
3067 for i in 1 2 3; do
3068     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)'
3069 done
3070 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3071 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3072
3073 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3074 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3075 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
3076 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3077 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3078 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3079 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3080 00000040  00 00 00 00
3081 dnl
3082 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3083 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
3084 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3085 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3086 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3087 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3088 00000040  00 00 00 00
3089 dnl
3090 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3091 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
3092 00000000  50 54 00 00 00 07 40 44-44 44 54 50 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 00000040  00 00 00 00
3097 ])
3098
3099 dnl Modified MPLS controller action.
3100 dnl In this test, the input packet in vlan-tagged, which should be stripped
3101 dnl before we push the MPLS and VLAN tags.
3102 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3103
3104 for i in 1 2 3; do
3105     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))'
3106 done
3107 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3108 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3109
3110 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3111 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3112 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
3113 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3114 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3115 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3116 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3117 dnl
3118 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3119 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
3120 00000000  50 54 00 00 00 07 40 44-44 44 54 51 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 dnl
3125 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3126 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
3127 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3128 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3129 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3130 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3131 ])
3132
3133 dnl Modified MPLS controller action.
3134 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3135 dnl both of these in the final flow
3136 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3137
3138 for i in 1 2 3; do
3139     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)'
3140 done
3141 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3142 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3143
3144 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3145 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3146 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
3147 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3148 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3149 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3150 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3151 00000040  00 00 00 00
3152 dnl
3153 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3154 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
3155 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3156 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3157 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3158 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3159 00000040  00 00 00 00
3160 dnl
3161 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3162 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
3163 00000000  52 54 00 00 00 07 40 44-44 44 54 52 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 00000040  00 00 00 00
3168 ])
3169
3170 dnl Modified MPLS controller action.
3171 dnl In this test, the input packet in vlan-tagged, which should be stripped
3172 dnl before we push the MPLS and VLAN tags.
3173 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3174
3175 for i in 1 2 3; do
3176     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))'
3177 done
3178 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3179 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3180
3181 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3182 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3183 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
3184 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3185 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3186 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3187 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3188 dnl
3189 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3190 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
3191 00000000  50 54 00 00 00 07 40 44-44 44 54 53 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 dnl
3196 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3197 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
3198 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3199 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3200 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3201 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3202 ])
3203
3204 dnl Modified MPLS controller action.
3205 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3206 dnl actions are reordered, so we see both of these in the final flow.
3207 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3208
3209 for i in 1 2 3; do
3210     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)'
3211 done
3212 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3213 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3214
3215 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3216 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3217 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
3218 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3219 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3220 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3221 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3222 00000040  00 00 00 00
3223 dnl
3224 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3225 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
3226 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3227 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3228 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3229 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3230 00000040  00 00 00 00
3231 dnl
3232 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3233 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
3234 00000000  50 54 00 00 00 07 40 44-44 44 54 54 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 00000040  00 00 00 00
3239 ])
3240
3241 dnl Modified MPLS controller action.
3242 dnl In this test, the input packet in vlan-tagged, which should be stripped
3243 dnl before we push the MPLS and VLAN tags.
3244 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3245
3246 for i in 1 2 3; do
3247     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))'
3248 done
3249 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3250 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3251
3252 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3253 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3254 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
3255 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3256 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3257 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3258 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3259 dnl
3260 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3261 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
3262 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3263 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3264 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3265 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3266 dnl
3267 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3268 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
3269 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3270 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3271 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3272 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3273 ])
3274
3275 dnl Modified MPLS controller action.
3276 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3277 dnl actions are reordered, so we see both of these in the final flow.
3278 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3279
3280 for i in 1 2 3; do
3281     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)'
3282 done
3283 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3284 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3285
3286 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3287 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3288 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
3289 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3290 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3291 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3292 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3293 00000040  00 00 00 00
3294 dnl
3295 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3296 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
3297 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3298 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3299 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3300 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3301 00000040  00 00 00 00
3302 dnl
3303 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3304 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
3305 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3306 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3307 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3308 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3309 00000040  00 00 00 00
3310 ])
3311
3312 dnl Modified MPLS controller action.
3313 dnl In this test, the input packet in vlan-tagged, which should be stripped
3314 dnl before we push the MPLS and VLAN tags.
3315 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
3316
3317 for i in 1 2 3; do
3318     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))'
3319 done
3320 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3321 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3322
3323 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3324 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3325 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
3326 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3327 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3328 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3329 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3330 dnl
3331 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3332 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
3333 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3334 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3335 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3336 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3337 dnl
3338 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3339 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
3340 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3341 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3342 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3343 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3344 ])
3345
3346 dnl Modified MPLS controller action.
3347 dnl In this test, the input packet in vlan-tagged, which should be stripped
3348 dnl before we push the MPLS and VLAN tags.
3349 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3350
3351 for i in 1 2 3; do
3352     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))'
3353 done
3354 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3355 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3356
3357 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3358 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3359 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
3360 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3361 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3362 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3363 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3364 dnl
3365 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3366 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
3367 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3368 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3369 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3370 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3371 dnl
3372 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3373 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
3374 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3375 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3376 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3377 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3378 ])
3379
3380 dnl Modified MPLS controller action.
3381 dnl In this test, the input packet in vlan-tagged, which should be modified
3382 dnl before we push MPLS and VLAN tags.
3383 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3384
3385 for i in 1 2 3; do
3386     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))'
3387 done
3388 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3389 ovs-appctl -t ovs-ofctl exit
3390
3391 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3392 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3393 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
3394 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3395 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3396 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3397 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3398 dnl
3399 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3400 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
3401 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3402 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3403 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3404 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3405 dnl
3406 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3407 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
3408 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3409 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3410 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3411 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3412 ])
3413
3414 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3415 AT_CHECK([ovs-appctl revalidator/wait], [0], [ignore])
3416 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3417  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
3418  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
3419  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
3420  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
3421  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
3422  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
3423  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
3424  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
3425  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
3426  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
3427 OFPST_FLOW reply (OF1.2):
3428 ])
3429
3430 OVS_VSWITCHD_STOP
3431 AT_CLEANUP
3432
3433 AT_SETUP([ofproto-dpif - fragment handling - trace])
3434 OVS_VSWITCHD_START
3435 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3436 AT_DATA([flows.txt], [dnl
3437 priority=75 tcp ip_frag=no    tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:1
3438 priority=75 tcp ip_frag=first tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:2
3439 priority=50 tcp ip_frag=no              actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:4
3440 priority=50 tcp ip_frag=first           actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:5
3441 priority=50 tcp ip_frag=later           actions=output:6
3442 ])
3443 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
3444
3445 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"
3446 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
3447 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
3448 later_flow="$base_flow,frag=later)"
3449
3450     # mode    no  first  later
3451 for tuple in \
3452     'normal    1     5      6' \
3453     'drop      1  drop   drop' \
3454     'nx-match  1     2      6'
3455 do
3456   set $tuple
3457   mode=$1
3458   no=$2
3459   first=$3
3460   later=$4
3461
3462   AT_CHECK([ovs-ofctl set-frags br0 $mode])
3463   for type in no first later; do
3464     eval flow=\$${type}_flow exp_output=\$$type
3465     printf "\n%s\n" "----$mode $type-----"
3466     AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3467     : > expout
3468     if test $mode = drop && test $type != no; then
3469         echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
3470         echo "Datapath actions: $exp_output" >> expout
3471     elif test $type = later; then
3472         echo "Datapath actions: $exp_output" >> expout
3473     else
3474         echo "Datapath actions: set(tcp(src=80,dst=80)),$exp_output" >> expout
3475     fi
3476     AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
3477   done
3478 done
3479 OVS_VSWITCHD_STOP
3480 AT_CLEANUP
3481
3482 AT_SETUP([ofproto-dpif - fragment handling - upcall])
3483 OVS_VSWITCHD_START
3484 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3485 AT_DATA([flows.txt], [dnl
3486 priority=75 tcp ip_frag=no    tp_dst=80 actions=set_field:81->tcp_dst,output:1
3487 priority=75 tcp ip_frag=first tp_dst=80 actions=set_field:81->tcp_dst,output:2
3488 priority=50 tcp ip_frag=no              actions=set_field:81->tcp_dst,output:4
3489 priority=50 tcp ip_frag=first           actions=set_field:81->tcp_dst,output:5
3490 priority=50 tcp ip_frag=later           actions=output:6
3491 ])
3492 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
3493
3494 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"
3495 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
3496 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
3497 later_flow="$base_flow,frag=later)"
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 type in no first later; do
3505   eval flow=\$${type}_flow
3506   printf "\n%s\n" "----$mode $type-----"
3507
3508   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3509 done
3510
3511 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
3512 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
3513 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
3514 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
3515 ])
3516
3517 mode=drop
3518
3519 ovs-appctl revalidator/wait
3520 AT_CHECK([ovs-appctl revalidator/purge], [0])
3521 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3522 for type in no first later; do
3523   eval flow=\$${type}_flow
3524   printf "\n%s\n" "----$mode $type-----"
3525
3526   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3527 done
3528
3529 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
3530 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
3531 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(frag=first), packets:0, bytes:0, used:never, actions:drop
3532 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(frag=later), packets:0, bytes:0, used:never, actions:drop
3533 ])
3534
3535 mode=nx-match
3536
3537 ovs-appctl revalidator/wait
3538 AT_CHECK([ovs-appctl revalidator/purge], [0])
3539 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3540 for type in no first later; do
3541   eval flow=\$${type}_flow
3542   printf "\n%s\n" "----$mode $type-----"
3543
3544   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3545 done
3546
3547 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
3548 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
3549 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
3550 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
3551 ])
3552
3553 OVS_VSWITCHD_STOP
3554 AT_CLEANUP
3555
3556 AT_SETUP([ofproto-dpif - fragment handling - actions])
3557 OVS_VSWITCHD_START
3558 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3559
3560 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])
3561 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3562 source field tcp_dst lacks correct prerequisites
3563 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3564 ])
3565
3566 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])
3567 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3568 destination field tcp_src lacks correct prerequisites
3569 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3570 ])
3571
3572 AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=set_field:8888->udp_src,output:1"], [1], [], [stderr])
3573 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3574 set_field udp_src lacks correct prerequisities
3575 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3576 ])
3577
3578 AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=load:8888->NXM_OF_UDP_DST[[]],output:1"], [1], [], [stderr])
3579 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3580 set_field udp_dst lacks correct prerequisities
3581 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3582 ])
3583
3584 AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_src,output:1"], [1], [], [stderr])
3585 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3586 set_field sctp_src lacks correct prerequisities
3587 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3588 ])
3589
3590 AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_dst,output:1"], [1], [], [stderr])
3591 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3592 set_field sctp_dst lacks correct prerequisities
3593 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3594 ])
3595
3596 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])
3597 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3598 source field tcp_dst lacks correct prerequisites
3599 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3600 ])
3601
3602 AT_DATA([flows.txt], [dnl
3603 priority=75 tcp actions=load:42->OXM_OF_TCP_SRC[[0..7]],output:1
3604 ])
3605 AT_CHECK([ovs-ofctl -O OpenFlow12 replace-flows br0 flows.txt])
3606
3607 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
3608
3609 mode=normal
3610
3611 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3612 for frag in 4000 6000 6008 4010; do
3613   printf "\n%s\n" "----$mode $frag-----"
3614
3615   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"])
3616 done
3617
3618 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
3619 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
3620 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
3621 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:74, used:0.001s, actions:1
3622 ])
3623
3624 ovs-appctl revalidator/wait
3625 AT_CHECK([ovs-appctl revalidator/purge], [0])
3626 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3627 for frag in 4000 6000 6008 4010; do
3628   printf "\n%s\n" "----$mode $frag truncated transport header -----"
3629
3630   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0018 2e24 $frag 40 06 465d ac11370d ac11370b 828b 0016"])
3631 done
3632
3633 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
3634 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
3635 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
3636 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:60, used:0.001s, actions:1
3637 ])
3638
3639 ovs-appctl revalidator/wait
3640 AT_CHECK([ovs-appctl revalidator/purge], [0])
3641 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3642 for frag in 4000 6000 6001 4002; do
3643   printf "\n%s\n" "----$mode $frag missing transport header-----"
3644
3645   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0014 2e24 $frag 40 06 465d ac11370d ac11370b"])
3646 done
3647
3648 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
3649 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
3650 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
3651 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:60, used:0.001s, actions:1
3652 ])
3653
3654 OVS_VSWITCHD_STOP
3655 AT_CLEANUP
3656
3657 AT_SETUP([ofproto-dpif - exit])
3658 OVS_VSWITCHD_START
3659 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
3660 AT_DATA([flows.txt], [dnl
3661 in_port=1 actions=output:10,exit,output:11
3662 in_port=2 actions=output:12,resubmit:1,output:12
3663 in_port=3 actions=output:13,resubmit:2,output:14
3664 ])
3665 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3666 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])
3667 AT_CHECK([tail -1 stdout], [0],
3668   [Datapath actions: 10
3669 ])
3670 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])
3671 AT_CHECK([tail -1 stdout], [0],
3672   [Datapath actions: 12,10
3673 ])
3674 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])
3675 AT_CHECK([tail -1 stdout], [0],
3676   [Datapath actions: 13,12,10
3677 ])
3678 OVS_VSWITCHD_STOP
3679 AT_CLEANUP
3680
3681
3682 AT_SETUP([ofproto-dpif - mirroring, select_all])
3683 OVS_VSWITCHD_START
3684 ADD_OF_PORTS([br0], 1, 2, 3)
3685 ovs-vsctl \
3686         set Bridge br0 mirrors=@m --\
3687         --id=@p3 get Port p3 --\
3688         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3689
3690 AT_DATA([flows.txt], [dnl
3691 in_port=1 actions=output:2
3692 in_port=2 actions=output:1
3693 ])
3694 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3695
3696 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)"
3697 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3698 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3699   [Datapath actions: 2,3
3700 ])
3701
3702 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)"
3703 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3704 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3705   [Datapath actions: 1,3
3706 ])
3707
3708 OVS_VSWITCHD_STOP
3709 AT_CLEANUP
3710
3711
3712 AT_SETUP([ofproto-dpif - mirroring, select_src])
3713 OVS_VSWITCHD_START
3714 ADD_OF_PORTS([br0], 1, 2, 3)
3715 ovs-vsctl \
3716         set Bridge br0 mirrors=@m --\
3717         --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
3718         --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
3719
3720 AT_DATA([flows.txt], [dnl
3721 in_port=1 actions=output:2
3722 in_port=2 actions=output:1
3723 ])
3724 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3725
3726 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)"
3727 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3728 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3729   [Datapath actions: 2,3
3730 ])
3731
3732 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)"
3733 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3734 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3735   [Datapath actions: 1
3736 ])
3737 OVS_VSWITCHD_STOP
3738 AT_CLEANUP
3739
3740 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
3741 OVS_VSWITCHD_START
3742 ADD_OF_PORTS([br0], 1, 2)
3743 ovs-vsctl \
3744         set Bridge br0 mirrors=@m --\
3745         --id=@p2 get Port p2 --\
3746         --id=@m create Mirror name=mymirror select_all=true output_port=@p2
3747
3748 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
3749
3750 # "in_port" defaults to OFPP_NONE if it's not specified.
3751 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"
3752 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
3753 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3754   [Datapath actions: 1,2
3755 ])
3756
3757 OVS_VSWITCHD_STOP
3758 AT_CLEANUP
3759
3760
3761 AT_SETUP([ofproto-dpif - mirroring, select_dst])
3762 OVS_VSWITCHD_START
3763 ADD_OF_PORTS([br0], 1, 2, 3)
3764 ovs-vsctl \
3765         set Bridge br0 mirrors=@m --\
3766         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
3767         --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
3768
3769 AT_DATA([flows.txt], [dnl
3770 in_port=1 actions=output:2
3771 in_port=2 actions=output:1
3772 ])
3773 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3774
3775 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)"
3776 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3777 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3778   [Datapath actions: 2,3
3779 ])
3780
3781 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)"
3782 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3783 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3784   [Datapath actions: 1
3785 ])
3786
3787 OVS_VSWITCHD_STOP
3788 AT_CLEANUP
3789
3790
3791 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
3792 OVS_VSWITCHD_START
3793 ADD_OF_PORTS([br0], 1, 2, 3)
3794 ovs-vsctl \
3795         set Bridge br0 mirrors=@m --\
3796         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
3797         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
3798
3799 AT_DATA([flows.txt], [dnl
3800 in_port=1, actions=output:2
3801 ])
3802 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3803
3804 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)"
3805 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3806 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3807   [Datapath actions: 2
3808 ])
3809
3810 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))"
3811 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3812 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3813   [Datapath actions: 2
3814 ])
3815
3816 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))"
3817 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3818 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3819   [Datapath actions: 2,3
3820 ])
3821
3822 OVS_VSWITCHD_STOP
3823 AT_CLEANUP
3824
3825
3826 AT_SETUP([ofproto-dpif - mirroring, output_port])
3827 OVS_VSWITCHD_START
3828 ADD_OF_PORTS([br0], 1, 2, 3)
3829 ovs-vsctl \
3830         set Bridge br0 mirrors=@m --\
3831         --id=@p3 get Port p3 --\
3832         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3833
3834 AT_DATA([flows.txt], [dnl
3835 in_port=1 actions=mod_vlan_vid:17,output:2
3836 in_port=2 actions=output:1
3837 ])
3838 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3839
3840 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)"
3841 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3842 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3843   [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
3844 ])
3845
3846 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)"
3847 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3848 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3849   [Datapath actions: 1,3
3850 ])
3851
3852 OVS_VSWITCHD_STOP
3853 AT_CLEANUP
3854
3855 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
3856 OVS_VSWITCHD_START
3857 ADD_OF_PORTS([br0], 1, 2)
3858 ovs-vsctl \
3859         set Bridge br0 mirrors=@m --\
3860         --id=@m create Mirror name=mymirror select_all=true output_vlan=12
3861
3862 AT_DATA([flows.txt], [dnl
3863 in_port=1 actions=output:2
3864 in_port=2 actions=mod_vlan_vid:17,output:1
3865 ])
3866 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3867
3868 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)"
3869 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3870 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
3871
3872 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
3873 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
3874 mv stdout expout
3875 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
3876
3877 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)"
3878 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3879 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
3880
3881 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
3882 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
3883 mv stdout expout
3884 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
3885
3886 OVS_VSWITCHD_STOP
3887 AT_CLEANUP
3888
3889 # Two testcases below are for the ofproto/trace command
3890 # The first one tests all correct syntax:
3891 # ofproto/trace [dp_name] odp_flow [-generate|packet]
3892 # ofproto/trace br_name br_flow [-generate|packet]
3893 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
3894 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
3895 ADD_OF_PORTS([br0], 1, 2, 3)
3896
3897 AT_DATA([flows.txt], [dnl
3898 in_port=1 actions=output:2
3899 in_port=2 actions=output:1
3900 ])
3901 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3902
3903 odp_flow="in_port(1)"
3904 br_flow="in_port=1"
3905 # Test command: ofproto/trace odp_flow with in_port as a name.
3906 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
3907 AT_CHECK([tail -1 stdout], [0], [dnl
3908 Datapath actions: 2
3909 ])
3910
3911 odp_flow="in_port(1)"
3912 # Test command: ofproto/trace odp_flow
3913 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
3914 AT_CHECK([tail -1 stdout], [0], [dnl
3915 Datapath actions: 2
3916 ])
3917
3918 # Test command: ofproto/trace dp_name odp_flow
3919 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
3920 AT_CHECK([tail -1 stdout], [0], [dnl
3921 Datapath actions: 2
3922 ])
3923 # Test commmand: ofproto/trace br_name br_flow
3924 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
3925 AT_CHECK([tail -1 stdout], [0], [dnl
3926 Datapath actions: 2
3927 ])
3928
3929 # Delete the inserted flows
3930 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
3931 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
3932
3933 # This section below tests the [-generate] option
3934 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
3935 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"
3936
3937 # Test command: ofproto/trace odp_flow
3938 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
3939 # Check for no MAC learning entry
3940 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3941  port  VLAN  MAC                Age
3942 ])
3943
3944 # Test command: ofproto/trace br_name br_flow
3945 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
3946 # Check for no MAC learning entry
3947 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3948  port  VLAN  MAC                Age
3949 ])
3950
3951 # Test command: ofproto/trace odp_flow -generate
3952 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
3953 # Check for the MAC learning entry
3954 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3955  port  VLAN  MAC                Age
3956     3     0  50:54:00:00:00:05    ?
3957 ])
3958
3959 # Test command: ofproto/trace dp_name odp_flow -generate
3960 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
3961   "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
3962   -generate], [0], [stdout])
3963 # Check for both MAC learning entries
3964 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3965  port  VLAN  MAC                Age
3966     3     0  50:54:00:00:00:05    ?
3967     1     0  50:54:00:00:00:06    ?
3968 ])
3969
3970 # Test command: ofproto/trace br_name br_flow -generate
3971 AT_CHECK([ovs-appctl ofproto/trace br0 \
3972   "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
3973   -generate], [0], [stdout])
3974 # Check for both MAC learning entries.
3975 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3976  port  VLAN  MAC                Age
3977     3     0  50:54:00:00:00:05    ?
3978     1     0  50:54:00:00:00:06    ?
3979     2     0  50:54:00:00:00:07    ?
3980 ])
3981
3982 # This section beflow tests the [packet] option
3983 # The ovs-tcpundump of packets between port1 and port2
3984 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
3985 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
3986
3987 # Construct the MAC learning table
3988 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
3989   "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
3990   -generate], [0], [stdout])
3991
3992 # Construct the MAC learning table
3993 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
3994   "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
3995   -generate], [0], [stdout])
3996
3997 # Test command: ofproto/trace odp_flow packet
3998 AT_CHECK([ovs-appctl ofproto/trace \
3999   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
4000 AT_CHECK([tail -1 stdout], [0], [dnl
4001 Datapath actions: 2
4002 ])
4003 AT_CHECK([head -n 2 stdout], [0], [dnl
4004 Bridge: br0
4005 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
4006 ])
4007
4008 # Test command: ofproto/trace dp_name odp_flow packet
4009 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4010   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
4011 AT_CHECK([tail -1 stdout], [0], [dnl
4012 Datapath actions: 2
4013 ])
4014 AT_CHECK([head -n 2 stdout], [0], [dnl
4015 Bridge: br0
4016 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
4017 ])
4018
4019 # Test command: ofproto/trace br_name br_flow packet
4020 AT_CHECK([ovs-appctl ofproto/trace br0 \
4021   "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
4022 AT_CHECK([tail -1 stdout], [0], [dnl
4023 Datapath actions: 1
4024 ])
4025 AT_CHECK([head -n 2 stdout], [0], [dnl
4026 Bridge: br0
4027 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
4028 ])
4029
4030 OVS_VSWITCHD_STOP
4031 AT_CLEANUP
4032
4033 # The second test tests the corner cases
4034 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
4035 OVS_VSWITCHD_START
4036 ADD_OF_PORTS([br0], 1, 2)
4037
4038 # Define flows
4039 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
4040 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
4041 # Define options
4042 generate="-generate"
4043 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
4044
4045 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
4046 m4_foreach(
4047 [option],
4048 [[],
4049 ["$generate"],
4050 ["$pkt"]],
4051 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
4052   [2], [], [stderr])
4053 AT_CHECK([tail -2 stderr], [0], [dnl
4054 Cannot find the datapath
4055 ovs-appctl: ovs-vswitchd: server returned an error
4056 ])])
4057
4058 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
4059 m4_foreach(
4060 [option],
4061 [[],
4062 ["$generate"],
4063 ["$pkt"]],
4064 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
4065   [2], [], [stderr])
4066 AT_CHECK([tail -2 stderr], [0], [dnl
4067 Cannot find the datapath
4068 ovs-appctl: ovs-vswitchd: server returned an error
4069 ])])
4070
4071 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
4072 m4_foreach(
4073 [option],
4074 [[],
4075 ["$generate"],
4076 ["$pkt"]],
4077 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
4078   [2], [], [stderr])
4079 AT_CHECK([tail -2 stderr], [0], [dnl
4080 Cannot find the datapath
4081 ovs-appctl: ovs-vswitchd: server returned an error
4082 ])])
4083
4084 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
4085 m4_foreach(
4086 [option],
4087 [[],
4088 ["$generate"],
4089 ["$pkt"]],
4090 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
4091   [2], [], [stderr])
4092 AT_CHECK([tail -2 stderr], [0], [dnl
4093 Cannot find the datapath
4094 ovs-appctl: ovs-vswitchd: server returned an error
4095 ])])
4096
4097 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
4098 m4_foreach(
4099 [option],
4100 [[],
4101 ["$generate"],
4102 ["$pkt"]],
4103 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
4104   [2], [], [stderr])
4105 AT_CHECK([tail -2 stderr], [0], [dnl
4106 Unknown bridge name
4107 ovs-appctl: ovs-vswitchd: server returned an error
4108 ])])
4109
4110 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
4111 m4_foreach(
4112 [option],
4113 [[],
4114 ["$generate"],
4115 ["$pkt"]],
4116 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
4117   [2], [], [stderr])
4118 AT_CHECK([tail -2 stderr], [0], [dnl
4119 Must specify bridge name
4120 ovs-appctl: ovs-vswitchd: server returned an error
4121 ])])
4122
4123 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
4124 AT_CHECK([ovs-appctl ofproto/trace \
4125   ovs-dummy "$odp_flow" garbage_option],
4126   [2], [stdout],[stderr])
4127 AT_CHECK([tail -2 stderr], [0], [dnl
4128 Trailing garbage in packet data
4129 ovs-appctl: ovs-vswitchd: server returned an error
4130 ])
4131
4132 # Test incorrect command: ofproto/trace with 4 arguments
4133 AT_CHECK([ovs-appctl ofproto/trace \
4134   arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
4135 AT_CHECK([tail -2 stderr], [0], [dnl
4136 "ofproto/trace" command takes at most 3 arguments
4137 ovs-appctl: ovs-vswitchd: server returned an error
4138 ])
4139
4140 # Test incorrect command: ofproto/trace with 0 argument
4141 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
4142 AT_CHECK([tail -2 stderr], [0], [dnl
4143 "ofproto/trace" command requires at least 1 arguments
4144 ovs-appctl: ovs-vswitchd: server returned an error
4145 ])
4146
4147 OVS_VSWITCHD_STOP
4148 AT_CLEANUP
4149
4150 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
4151 OVS_VSWITCHD_START
4152 ADD_OF_PORTS([br0], 1, 2, 3)
4153
4154 AT_DATA([flows.txt], [dnl
4155 in_port=1 actions=output:2
4156 in_port=2 actions=output:1
4157 ])
4158 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4159
4160 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
4161 AT_CHECK([tail -1 stdout], [0], [dnl
4162 Datapath actions: push_vlan(vid=123,pcp=0),2
4163 ])
4164
4165 OVS_VSWITCHD_STOP
4166 AT_CLEANUP
4167
4168
4169 m4_define([OFPROTO_TRACE],
4170   [flow="$2"
4171    AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
4172    actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4173    expected="$4"
4174    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
4175      [0], [stdout])
4176    mv stdout expout
4177    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
4178      [0], [expout])])
4179
4180 AT_SETUP([ofproto-dpif - MAC learning])
4181 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
4182 ADD_OF_PORTS([br0], 1, 2, 3)
4183
4184 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)'
4185
4186 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
4187 OFPROTO_TRACE(
4188   [ovs-dummy],
4189   [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
4190   [-generate],
4191   [1,2,100])
4192
4193 # Check for the MAC learning entry.
4194 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4195  port  VLAN  MAC                Age
4196     3     0  50:54:00:00:00:05    ?
4197 ])
4198
4199 # Trace a packet arrival destined for the learned MAC.
4200 # (This will also learn a MAC.)
4201 OFPROTO_TRACE(
4202   [ovs-dummy],
4203   [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
4204   [-generate],
4205   [3])
4206
4207 # Check for both MAC learning entries.
4208 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4209  port  VLAN  MAC                Age
4210     3     0  50:54:00:00:00:05    ?
4211     1     0  50:54:00:00:00:06    ?
4212 ])
4213
4214 # Trace a packet arrival that updates the first learned MAC entry.
4215 OFPROTO_TRACE(
4216   [ovs-dummy],
4217   [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
4218   [-generate],
4219   [1,3,100])
4220
4221 # Check that the MAC learning entry was updated.
4222 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4223  port  VLAN  MAC                Age
4224     1     0  50:54:00:00:00:06    ?
4225     2     0  50:54:00:00:00:05    ?
4226 ])
4227
4228 # Add another bridge.
4229 AT_CHECK(
4230   [ovs-vsctl \
4231      -- add-br br1 \
4232      -- set bridge br1 datapath-type=dummy])
4233 ADD_OF_PORTS([br1], 4, 5)
4234
4235 # Trace some packet arrivals in br1 to create MAC learning entries there too.
4236 OFPROTO_TRACE(
4237   [ovs-dummy],
4238   [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
4239   [-generate],
4240   [5,101])
4241 OFPROTO_TRACE(
4242   [ovs-dummy],
4243   [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
4244   [-generate],
4245   [4,101])
4246
4247 # Check that the MAC learning entries were added.
4248 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4249  port  VLAN  MAC                Age
4250     4     0  50:54:00:00:00:06    ?
4251     5     0  50:54:00:00:00:07    ?
4252 ])
4253
4254 # Delete port p1 and see that its MAC learning entry disappeared, and
4255 # that the MAC learning entry for the same MAC was also deleted from br1.
4256 AT_CHECK([ovs-vsctl del-port p1])
4257 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4258  port  VLAN  MAC                Age
4259     2     0  50:54:00:00:00:05    ?
4260 ])
4261 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4262  port  VLAN  MAC                Age
4263     5     0  50:54:00:00:00:07    ?
4264 ])
4265
4266 OVS_VSWITCHD_STOP
4267 AT_CLEANUP
4268
4269 AT_SETUP([ofproto-dpif - MAC table overflow])
4270 OVS_VSWITCHD_START(
4271   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
4272 ADD_OF_PORTS([br0], 1, 2, 3)
4273
4274 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)'
4275
4276 AT_CHECK([ovs-appctl time/stop])
4277
4278 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
4279 for i in 0 1 2 3 4 5 6 7 8 9; do
4280     OFPROTO_TRACE(
4281       [ovs-dummy],
4282       [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
4283       [-generate],
4284       [1,2,100])
4285     ovs-appctl time/warp 1000
4286 done
4287
4288 # Check for the MAC learning entries.
4289 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4290   [0], [dnl
4291     3     0  50:54:00:00:00:00
4292     3     0  50:54:00:00:00:01
4293     3     0  50:54:00:00:00:02
4294     3     0  50:54:00:00:00:03
4295     3     0  50:54:00:00:00:04
4296     3     0  50:54:00:00:00:05
4297     3     0  50:54:00:00:00:06
4298     3     0  50:54:00:00:00:07
4299     3     0  50:54:00:00:00:08
4300     3     0  50:54:00:00:00:09
4301  port  VLAN  MAC                Age
4302 ])
4303
4304 # Trace another ARP packet on another MAC.
4305 OFPROTO_TRACE(
4306   [ovs-dummy],
4307   [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
4308   [-generate],
4309   [1,2,100])
4310
4311 # Check that the new one chased the oldest one out of the table.
4312 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
4313   [0], [dnl
4314     3     0  50:54:00:00:00:01    ?
4315     3     0  50:54:00:00:00:02    ?
4316     3     0  50:54:00:00:00:03    ?
4317     3     0  50:54:00:00:00:04    ?
4318     3     0  50:54:00:00:00:05    ?
4319     3     0  50:54:00:00:00:06    ?
4320     3     0  50:54:00:00:00:07    ?
4321     3     0  50:54:00:00:00:08    ?
4322     3     0  50:54:00:00:00:09    ?
4323     3     0  50:54:00:00:00:10    ?
4324  port  VLAN  MAC                Age
4325 ])
4326 OVS_VSWITCHD_STOP
4327 AT_CLEANUP
4328
4329 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
4330 #
4331 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
4332 #
4333 # IP_VERSION_TYPE is used in AT_SETUP
4334 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
4335   [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
4336   AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
4337   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4338
4339   ON_EXIT([kill `cat test-sflow.pid`])
4340   AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
4341   AT_CAPTURE_FILE([sflow.log])
4342   SFLOW_PORT=`parse_listening_port < test-sflow.log`
4343   ovs-appctl time/stop
4344
4345   ADD_OF_PORTS([br0], 1, 2)
4346   ovs-vsctl \
4347      set Interface br0 options:ifindex=1002 -- \
4348      set Interface p1 options:ifindex=1004 -- \
4349      set Interface p2 options:ifindex=1003 -- \
4350      set Bridge br0 sflow=@sf -- \
4351      --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
4352        header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
4353
4354   dnl open with ARP packets to seed the bridge-learning.  The output
4355   dnl ifIndex numbers should be reported predictably after that.
4356   dnl Since we set sampling=1 we should see all of these packets
4357   dnl reported. Sorting the output by data-source and seqNo makes
4358   dnl it deterministic. Ensuring that we send at least two packets
4359   dnl into each port means we get to check the seq nos are
4360   dnl incrementing correctly.
4361   dnl because packets from different ports can be handled by separate
4362   dnl threads, put some sleeps
4363
4364   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)'
4365   sleep 1
4366   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)'
4367   sleep 1
4368   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)'
4369   sleep 1
4370   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)'
4371   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)'
4372
4373   dnl sleep long enough to get more than one counter sample
4374   dnl from each datasource so we can check sequence numbers
4375   ovs-appctl time/warp 3000 100
4376   OVS_VSWITCHD_STOP
4377   ovs-appctl -t test-sflow exit
4378
4379   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
4380         /g']], [0], [dnl
4381 HEADER
4382         dgramSeqNo=1
4383         ds=127.0.0.1>2:1000
4384         fsSeqNo=1
4385         in_vlan=0
4386         in_priority=0
4387         out_vlan=0
4388         out_priority=0
4389         meanSkip=1
4390         samplePool=1
4391         dropEvents=0
4392         in_ifindex=1004
4393         in_format=0
4394         out_ifindex=2
4395         out_format=2
4396         hdr_prot=1
4397         pkt_len=64
4398         stripped=4
4399         hdr_len=60
4400         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
4401 HEADER
4402         dgramSeqNo=1
4403         ds=127.0.0.1>2:1000
4404         fsSeqNo=2
4405         in_vlan=0
4406         in_priority=0
4407         out_vlan=0
4408         out_priority=0
4409         meanSkip=1
4410         samplePool=2
4411         dropEvents=0
4412         in_ifindex=1003
4413         in_format=0
4414         out_ifindex=2
4415         out_format=2
4416         hdr_prot=1
4417         pkt_len=64
4418         stripped=4
4419         hdr_len=60
4420         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
4421 HEADER
4422         dgramSeqNo=1
4423         ds=127.0.0.1>2:1000
4424         fsSeqNo=3
4425         in_vlan=0
4426         in_priority=0
4427         out_vlan=0
4428         out_priority=0
4429         meanSkip=1
4430         samplePool=3
4431         dropEvents=0
4432         in_ifindex=1004
4433         in_format=0
4434         out_ifindex=1003
4435         out_format=0
4436         hdr_prot=1
4437         pkt_len=64
4438         stripped=4
4439         hdr_len=60
4440         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
4441 HEADER
4442         dgramSeqNo=1
4443         ds=127.0.0.1>2:1000
4444         fsSeqNo=4
4445         in_vlan=0
4446         in_priority=0
4447         out_vlan=0
4448         out_priority=0
4449         meanSkip=1
4450         samplePool=4
4451         dropEvents=0
4452         in_ifindex=1003
4453         in_format=0
4454         out_ifindex=1004
4455         out_format=0
4456         hdr_prot=1
4457         pkt_len=64
4458         stripped=4
4459         hdr_len=60
4460         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
4461 HEADER
4462         dgramSeqNo=1
4463         ds=127.0.0.1>2:1000
4464         fsSeqNo=5
4465         in_vlan=0
4466         in_priority=0
4467         out_vlan=0
4468         out_priority=0
4469         meanSkip=1
4470         samplePool=5
4471         dropEvents=0
4472         in_ifindex=1003
4473         in_format=0
4474         out_ifindex=1004
4475         out_format=0
4476         hdr_prot=1
4477         pkt_len=64
4478         stripped=4
4479         hdr_len=60
4480         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
4481 ])
4482
4483   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR|PORTNAME|OPENFLOWPORT' | head -18 | sed 's/ /\
4484         /g']], [0], [dnl
4485 IFCOUNTERS
4486         dgramSeqNo=2
4487         ds=127.0.0.1>0:1002
4488         csSeqNo=1
4489         ifindex=1002
4490         type=6
4491         ifspeed=100000000
4492         direction=0
4493         status=0
4494         in_octets=0
4495         in_unicasts=0
4496         in_multicasts=0
4497         in_broadcasts=4294967295
4498         in_discards=0
4499         in_errors=0
4500         in_unknownprotos=4294967295
4501         out_octets=120
4502         out_unicasts=2
4503         out_multicasts=4294967295
4504         out_broadcasts=4294967295
4505         out_discards=0
4506         out_errors=0
4507         promiscuous=0
4508 IFCOUNTERS
4509         dgramSeqNo=2
4510         ds=127.0.0.1>0:1003
4511         csSeqNo=1
4512         ifindex=1003
4513         type=6
4514         ifspeed=100000000
4515         direction=0
4516         status=0
4517         in_octets=138
4518         in_unicasts=3
4519         in_multicasts=0
4520         in_broadcasts=4294967295
4521         in_discards=0
4522         in_errors=0
4523         in_unknownprotos=4294967295
4524         out_octets=120
4525         out_unicasts=2
4526         out_multicasts=4294967295
4527         out_broadcasts=4294967295
4528         out_discards=0
4529         out_errors=0
4530         promiscuous=0
4531 IFCOUNTERS
4532         dgramSeqNo=2
4533         ds=127.0.0.1>0:1004
4534         csSeqNo=1
4535         ifindex=1004
4536         type=6
4537         ifspeed=100000000
4538         direction=0
4539         status=0
4540         in_octets=84
4541         in_unicasts=2
4542         in_multicasts=0
4543         in_broadcasts=4294967295
4544         in_discards=0
4545         in_errors=0
4546         in_unknownprotos=4294967295
4547         out_octets=180
4548         out_unicasts=3
4549         out_multicasts=4294967295
4550         out_broadcasts=4294967295
4551         out_discards=0
4552         out_errors=0
4553         promiscuous=0
4554 IFCOUNTERS
4555         dgramSeqNo=3
4556         ds=127.0.0.1>0:1002
4557         csSeqNo=2
4558         ifindex=1002
4559         type=6
4560         ifspeed=100000000
4561         direction=0
4562         status=0
4563         in_octets=0
4564         in_unicasts=0
4565         in_multicasts=0
4566         in_broadcasts=4294967295
4567         in_discards=0
4568         in_errors=0
4569         in_unknownprotos=4294967295
4570         out_octets=120
4571         out_unicasts=2
4572         out_multicasts=4294967295
4573         out_broadcasts=4294967295
4574         out_discards=0
4575         out_errors=0
4576         promiscuous=0
4577 IFCOUNTERS
4578         dgramSeqNo=3
4579         ds=127.0.0.1>0:1003
4580         csSeqNo=2
4581         ifindex=1003
4582         type=6
4583         ifspeed=100000000
4584         direction=0
4585         status=0
4586         in_octets=138
4587         in_unicasts=3
4588         in_multicasts=0
4589         in_broadcasts=4294967295
4590         in_discards=0
4591         in_errors=0
4592         in_unknownprotos=4294967295
4593         out_octets=120
4594         out_unicasts=2
4595         out_multicasts=4294967295
4596         out_broadcasts=4294967295
4597         out_discards=0
4598         out_errors=0
4599         promiscuous=0
4600 IFCOUNTERS
4601         dgramSeqNo=3
4602         ds=127.0.0.1>0:1004
4603         csSeqNo=2
4604         ifindex=1004
4605         type=6
4606         ifspeed=100000000
4607         direction=0
4608         status=0
4609         in_octets=84
4610         in_unicasts=2
4611         in_multicasts=0
4612         in_broadcasts=4294967295
4613         in_discards=0
4614         in_errors=0
4615         in_unknownprotos=4294967295
4616         out_octets=180
4617         out_unicasts=3
4618         out_multicasts=4294967295
4619         out_broadcasts=4294967295
4620         out_discards=0
4621         out_errors=0
4622         promiscuous=0
4623 OPENFLOWPORT
4624         datapath_id=18364758544493064720
4625         port_no=1
4626 OPENFLOWPORT
4627         datapath_id=18364758544493064720
4628         port_no=1
4629 OPENFLOWPORT
4630         datapath_id=18364758544493064720
4631         port_no=2
4632 OPENFLOWPORT
4633         datapath_id=18364758544493064720
4634         port_no=2
4635 OPENFLOWPORT
4636         datapath_id=18364758544493064720
4637         port_no=65534
4638 OPENFLOWPORT
4639         datapath_id=18364758544493064720
4640         port_no=65534
4641 PORTNAME
4642         portName=br0
4643 PORTNAME
4644         portName=br0
4645 PORTNAME
4646         portName=p1
4647 PORTNAME
4648         portName=p1
4649 PORTNAME
4650         portName=p2
4651 PORTNAME
4652         portName=p2
4653 ])
4654   AT_CLEANUP])
4655
4656 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
4657 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
4658
4659 dnl Test sFlow LAG structures
4660 AT_SETUP([ofproto-dpif - sFlow LACP structures])
4661 AT_SKIP_IF([test "$IS_WIN32" = "yes"])
4662 OVS_VSWITCHD_START([dnl
4663                     add-bond br0 bond p1 p2 --                          \
4664                     set Port bond lacp=active bond-mode=active-backup   \
4665                     other_config:lacp-time="fast"                       \
4666                     other_config:lacp-system-id=11:22:33:44:55:66       \
4667                     other_config:lacp-system-priority=54321 --          \
4668                     set Interface p1 type=dummy                         \
4669                     other_config:lacp-port-id=11                        \
4670                     other_config:lacp-port-priority=111                 \
4671                     other_config:lacp-aggregation-key=3333 --           \
4672                     set Interface p2 type=dummy                         \
4673                     other_config:lacp-port-id=22                        \
4674                     other_config:lacp-port-priority=222                 \
4675                     other_config:lacp-aggregation-key=3333 ])
4676
4677 ON_EXIT([kill `cat test-sflow.pid`])
4678 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
4679 AT_CAPTURE_FILE([sflow.log])
4680 SFLOW_PORT=`parse_listening_port < test-sflow.log`
4681
4682 ovs-appctl time/stop
4683
4684 ovs-vsctl \
4685       set Interface p1 options:ifindex=1003 --                  \
4686       set Bridge br0 sflow=@sf --                               \
4687       --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\"   \
4688       header=128 sampling=1 polling=1
4689
4690 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
4691 for i in `seq 1 30`; do
4692     ovs-appctl time/warp 100
4693 done
4694 OVS_VSWITCHD_STOP
4695 ovs-appctl -t test-sflow exit
4696 AT_CHECK([[sort sflow.log | $EGREP 'LACPCOUNTERS|ERROR' | head -n 1 | sed 's/ /\
4697         /g']], [0], [dnl
4698 LACPCOUNTERS
4699         sysID=11:22:33:44:55:66
4700         partnerID=00:00:00:00:00:00
4701         aggID=3333
4702         actorAdmin=0x7
4703         actorOper=0xbf
4704         partnerAdmin=0x0
4705         partnerOper=0x2
4706         LACPUDsRx=0
4707         markerPDUsRx=4294967295
4708         markerRespPDUsRx=4294967295
4709         unknownRx=4294967295
4710         illegalRx=0
4711         LACPUDsTx=1
4712         markerPDUsTx=4294967295
4713         markerRespPDUsTx=4294967295
4714 ])
4715
4716 AT_CLEANUP
4717
4718 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
4719 #
4720 # Test that basic NetFlow reports flow statistics correctly:
4721 # The initial packet of a flow are correctly accounted.
4722 # Later packets within a flow are correctly accounted.
4723 # Flow actions changing (in this case, due to MAC learning)
4724 # cause a record to be sent.
4725 #
4726 # IP_VERSION_TYPE is used in AT_SETUP
4727 m4_define([CHECK_NETFLOW_EXPIRATION],
4728   [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
4729   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4730   ADD_OF_PORTS([br0], 1, 2)
4731
4732   ovs-appctl time/stop
4733   ON_EXIT([kill `cat test-netflow.pid`])
4734   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4735   AT_CAPTURE_FILE([netflow.log])
4736   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4737
4738   ovs-vsctl \
4739      set Bridge br0 netflow=@nf -- \
4740      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4741        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4742
4743   for delay in 1000 30000; do
4744       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)'
4745       sleep 1  # ensure the order in which these two packets are processed
4746       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)'
4747
4748       ovs-appctl time/warp $delay
4749   done
4750
4751   ovs-appctl time/warp 6000
4752   ovs-appctl revalidator/wait
4753   OVS_VSWITCHD_STOP
4754   ovs-appctl -t test-netflow exit
4755
4756   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])
4757
4758   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])
4759
4760   combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
4761   separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
4762   AT_CHECK([test $separate = 2 || test $combined = 1], [0])
4763
4764   AT_CLEANUP])
4765
4766 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
4767 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
4768
4769 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
4770 #
4771 # Test that basic NetFlow reports active expirations correctly.
4772 #
4773 # IP_VERSION_TYPE is used in AT_SETUP
4774 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
4775   [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
4776
4777   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4778   ADD_OF_PORTS([br0], 1, 2)
4779
4780   ON_EXIT([kill `cat test-netflow.pid`])
4781   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4782   AT_CAPTURE_FILE([netflow.log])
4783   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4784
4785   ovs-vsctl \
4786      set Bridge br0 netflow=@nf -- \
4787      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4788        engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
4789
4790   AT_CHECK([ovs-appctl time/stop])
4791   n=1
4792   while test $n -le 60; do
4793       n=`expr $n + 1`
4794
4795       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)'
4796       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)'
4797
4798       ovs-appctl time/warp 1000
4799   done
4800
4801   ovs-appctl time/warp 10000
4802
4803   ovs-appctl revalidator/wait
4804   OVS_VSWITCHD_STOP
4805   ovs-appctl -t test-netflow exit
4806
4807   # Count the number of reported packets:
4808   # - From source to destination before MAC learning kicks in (just one).
4809   # - From source to destination after that.
4810   # - From destination to source.
4811   n_learn=0
4812   n_in=0
4813   n_out=0
4814   n_other=0
4815   n_recs=0
4816   none=0
4817   while read line; do
4818       pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
4819       case $pkts in
4820            [[0-9]]*) ;;
4821        *) continue ;;
4822       esac
4823
4824       case $line in
4825           "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
4826               counter=n_learn
4827           ;;
4828       "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
4829           counter=n_in
4830           ;;
4831       "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
4832           counter=n_out
4833           ;;
4834       *)
4835           counter=n_other
4836           ;;
4837       esac
4838       eval $counter=\`expr \$$counter + \$pkts\`
4839       n_recs=`expr $n_recs + 1`
4840   done < netflow.log
4841
4842   # There should be exactly 1 MAC learning packet,
4843   # exactly 59 other packets in that direction,
4844   # and exactly 60 packets in the other direction.
4845   AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
4846 ])
4847
4848   AT_CLEANUP])
4849
4850 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
4851 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
4852
4853 AT_SETUP([ofproto-dpif - flow stats])
4854 OVS_VSWITCHD_START
4855 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
4856 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
4857
4858 ovs-appctl time/stop
4859
4860 for i in `seq 1 10`; do
4861     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)'
4862 done
4863
4864 ovs-appctl time/warp 1000
4865 ovs-appctl revalidator/wait
4866
4867 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
4868 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
4869  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
4870  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
4871 ])
4872 OVS_VSWITCHD_STOP
4873 AT_CLEANUP
4874
4875 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
4876 OVS_VSWITCHD_START
4877 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
4878 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
4879
4880 ovs-appctl time/stop
4881
4882 for i in `seq 1 10`; do
4883     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)'
4884 done
4885
4886 ovs-appctl time/warp 100
4887 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
4888 ovs-appctl time/warp 1000
4889
4890 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
4891 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
4892  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
4893  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
4894 ])
4895 OVS_VSWITCHD_STOP
4896 AT_CLEANUP
4897
4898 AT_SETUP([idle_age and hard_age increase over time])
4899 OVS_VSWITCHD_START
4900
4901 # get_ages DURATION HARD IDLE
4902 #
4903 # Fetch the flow duration, hard age, and idle age into the variables
4904 # whose names are given as arguments.  Rounds DURATION down to the
4905 # nearest integer.  If hard_age doesn't appear in the output, sets
4906 # HARD to "none".  If idle_age doesn't appear in the output, sets IDLE
4907 # to 0.
4908 get_ages () {
4909     AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
4910
4911     duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
4912     AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
4913     AS_VAR_COPY([$1], [duration])
4914
4915     hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
4916     if test X"$hard" = X; then
4917         hard=none
4918     else
4919         AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
4920     fi
4921     AS_VAR_COPY([$2], [hard])
4922
4923     idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
4924     if test X"$idle" = X; then
4925         idle=0
4926     else
4927         AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
4928     fi
4929     AS_VAR_COPY([$3], [idle])
4930 }
4931
4932 # Add a flow and get its initial hard and idle age.
4933 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
4934 get_ages duration1 hard1 idle1
4935
4936 ovs-appctl time/stop
4937 # Warp time forward by 10 seconds, then modify the flow's actions.
4938 ovs-appctl time/warp 10000
4939 get_ages duration2 hard2 idle2
4940 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
4941
4942 # Warp time forward by 10 seconds.
4943 ovs-appctl time/warp 10000
4944 get_ages duration3 hard3 idle3
4945
4946 # Warp time forward 10 more seconds, then pass some packets through the flow,
4947 # then warp forward a few more times because idle times are only updated
4948 # occasionally.
4949 ovs-appctl time/warp 10000
4950 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)'
4951 ovs-appctl time/warp 3000 1000
4952 sleep 1
4953 get_ages duration4 hard4 idle4
4954
4955 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
4956 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
4957 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
4958
4959 # Duration should increase steadily over time.
4960 AT_CHECK([test $duration1 -lt $duration2])
4961 AT_CHECK([test $duration2 -lt $duration3])
4962 AT_CHECK([test $duration3 -lt $duration4])
4963
4964 # Hard age should be "none" initially because it's the same as flow_duration,
4965 # then it should increase.
4966 AT_CHECK([test $hard1 = none])
4967 AT_CHECK([test $hard2 = none])
4968 AT_CHECK([test $hard3 != none])
4969 AT_CHECK([test $hard4 != none])
4970 AT_CHECK([test $hard3 -lt $hard4])
4971
4972 # Idle age should increase from 1 to 2 to 3, then decrease.
4973 AT_CHECK([test $idle1 -lt $idle2])
4974 AT_CHECK([test $idle2 -lt $idle3])
4975 AT_CHECK([test $idle3 -gt $idle4])
4976
4977 # Check some invariant relationships.
4978 AT_CHECK([test $duration1 = $idle1])
4979 AT_CHECK([test $duration2 = $idle2])
4980 AT_CHECK([test $duration3 = $idle3])
4981 AT_CHECK([test $idle3 -gt $hard3])
4982 AT_CHECK([test $idle4 -lt $hard4])
4983 AT_CHECK([test $hard4 -lt $duration4])
4984
4985 OVS_VSWITCHD_STOP
4986 AT_CLEANUP
4987
4988 AT_SETUP([ofproto-dpif - fin_timeout])
4989 OVS_VSWITCHD_START
4990 ovs-appctl time/stop
4991 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
4992 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
4993 [NXST_FLOW reply:
4994  idle_timeout=60, actions=fin_timeout(idle_timeout=5)
4995 ])
4996
4997 # Check that a TCP SYN packet does not change the timeout.  (Because
4998 # flow stats updates are mainly what implements the fin_timeout
4999 # feature, we warp forward a couple of times to ensure that flow stats
5000 # run before re-checking the flow table.)
5001 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
5002 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
5003 warped
5004 ])
5005 ovs-appctl revalidator/wait
5006 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5007 [NXST_FLOW reply:
5008  n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
5009 ])
5010 # Check that a TCP FIN packet does change the timeout.
5011 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
5012 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
5013 warped
5014 ])
5015 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5016 [NXST_FLOW reply:
5017  n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
5018 ])
5019 OVS_VSWITCHD_STOP
5020 AT_CLEANUP
5021
5022 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
5023 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
5024 ADD_OF_PORTS([br0], [1], [2])
5025 ADD_OF_PORTS([br1], [3])
5026
5027 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
5028 dummy@br0
5029 dummy@br1
5030 ])
5031 OVS_VSWITCHD_STOP
5032 AT_CLEANUP
5033
5034 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
5035 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
5036 ADD_OF_PORTS([br0], [1], [2])
5037 ADD_OF_PORTS([br1], [3])
5038
5039 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5040 dummy@ovs-dummy: hit:0 missed:0
5041         br0:
5042                 br0 65534/100: (dummy)
5043                 p1 1/1: (dummy)
5044                 p2 2/2: (dummy)
5045         br1:
5046                 br1 65534/101: (dummy)
5047                 p3 3/3: (dummy)
5048 ])
5049 OVS_VSWITCHD_STOP
5050 AT_CLEANUP
5051
5052 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
5053 # bump max-idle to avoid the flows being reclaimed behind us
5054 OVS_VSWITCHD_START([add-br br1 -- \
5055                     set bridge br1 datapath-type=dummy fail-mode=secure -- \
5056                     set Open_vSwitch . other_config:max-idle=10000])
5057 ADD_OF_PORTS([br0], [1], [2])
5058 ADD_OF_PORTS([br1], [3])
5059
5060 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)'])
5061 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)'])
5062 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)'])
5063 ovs-appctl revalidator/wait
5064 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5065 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5066 recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5067 ])
5068
5069 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5070 recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5071 ])
5072
5073 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5074 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
5075 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
5076 ])
5077
5078 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5079 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
5080 ])
5081
5082 OVS_VSWITCHD_STOP
5083 AT_CLEANUP
5084
5085 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
5086 OVS_VSWITCHD_START([dnl
5087    add-port br0 p1 -- set Interface p1 type=dummy
5088 ])
5089 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5090 ON_EXIT([kill `cat ovs-ofctl.pid`])
5091
5092 AT_CAPTURE_FILE([ofctl_monitor.log])
5093 AT_DATA([flows.txt], [dnl
5094 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
5095 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
5096 ])
5097 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5098
5099 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
5100 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
5101 dnl
5102 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
5103 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)
5104 dnl         (label 20, exp 0, [S], ttl 32)
5105 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
5106 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
5107
5108 for dl_src in 00 01; do
5109     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"])
5110 done
5111 sleep 1  # wait for the datapath flow installed
5112 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5113 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))
5114 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))
5115 ])
5116
5117 OVS_VSWITCHD_STOP
5118 AT_CLEANUP
5119
5120
5121 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
5122 OVS_VSWITCHD_START([dnl
5123    add-port br0 p1 -- set Interface p1 type=dummy
5124 ])
5125 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5126 ON_EXIT([kill `cat ovs-ofctl.pid`])
5127
5128 AT_CAPTURE_FILE([ofctl_monitor.log])
5129 AT_DATA([flows.txt], [dnl
5130 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
5131 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
5132 ])
5133 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5134
5135 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
5136 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
5137 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
5138 dnl
5139 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
5140 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)
5141 dnl         (label 20, exp 0, ttl 32)
5142 dnl         (label 20, exp 0, ttl 32)
5143 dnl         (label 20, exp 0, [S], ttl 32)
5144 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
5145 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
5146
5147 for dl_src in 00 01; do
5148     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"])
5149 done
5150 sleep 1  # wait for the datapath flow installed
5151 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5152 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))
5153 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))
5154 ])
5155
5156 OVS_VSWITCHD_STOP
5157 AT_CLEANUP
5158
5159 AT_SETUP([ofproto-dpif - patch ports])
5160 OVS_VSWITCHD_START([add-br br1 \
5161 -- set bridge br1 datapath-type=dummy fail-mode=secure \
5162 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
5163 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
5164
5165 ADD_OF_PORTS([br0], [2])
5166 ADD_OF_PORTS([br1], [3])
5167
5168 AT_CHECK([ovs-appctl time/stop])
5169 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5170
5171 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
5172 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
5173
5174 for i in $(seq 1 10); do
5175     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)'
5176     if [[ $i -eq 1 ]]; then
5177         sleep 1
5178     fi
5179 done
5180
5181 for i in $(seq 1 5); do
5182     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)'
5183     if [[ $i -eq 1 ]]; then
5184         sleep 1
5185     fi
5186 done
5187
5188 AT_CHECK([ovs-appctl time/warp 500], [0],
5189 [warped
5190 ])
5191 sleep 1  # wait for log writer
5192
5193 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5194 dummy@ovs-dummy: hit:13 missed:2
5195         br0:
5196                 br0 65534/100: (dummy)
5197                 p2 2/2: (dummy)
5198                 pbr0 1/none: (patch: peer=pbr1)
5199         br1:
5200                 br1 65534/101: (dummy)
5201                 p3 3/3: (dummy)
5202                 pbr1 1/none: (patch: peer=pbr0)
5203 ])
5204
5205 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5206 recirc_id=0,ip,in_port=100,nw_frag=no, actions:101,3,2
5207 recirc_id=0,ip,in_port=101,nw_frag=no, actions:100,2,3
5208 ])
5209
5210 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
5211 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
5212 ])
5213 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
5214 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
5215 ])
5216
5217 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
5218 OFPST_PORT reply (xid=0x4): 1 ports
5219   port  1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
5220            tx pkts=10, bytes=600, drop=0, errs=0, coll=0
5221 ])
5222
5223 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
5224 OFPST_PORT reply (xid=0x4): 1 ports
5225   port  1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
5226            tx pkts=5, bytes=300, drop=0, errs=0, coll=0
5227 ])
5228
5229 OVS_VSWITCHD_STOP
5230 AT_CLEANUP
5231
5232 AT_SETUP([ofproto-dpif - port duration])
5233 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
5234 ADD_OF_PORTS([br0], 1, 2)
5235
5236 ovs-appctl time/stop
5237 ovs-appctl time/warp 10000
5238
5239 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
5240 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
5241 [dnl
5242            duration=?s
5243            duration=?s
5244            duration=?s
5245 ])
5246 OVS_VSWITCHD_STOP
5247 AT_CLEANUP
5248
5249 dnl ----------------------------------------------------------------------
5250 AT_BANNER([ofproto-dpif -- megaflows])
5251
5252 AT_SETUP([ofproto-dpif megaflow - port classification])
5253 OVS_VSWITCHD_START
5254 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5255 ADD_OF_PORTS([br0], [1], [2])
5256 AT_DATA([flows.txt], [dnl
5257 table=0 in_port=1 actions=output(2)
5258 ])
5259 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5260 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)'])
5261 sleep 1
5262 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)'])
5263 sleep 1
5264 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5265 recirc_id=0,ip,in_port=1,nw_frag=no, actions: <del>
5266 ])
5267 OVS_VSWITCHD_STOP
5268 AT_CLEANUP
5269
5270 AT_SETUP([ofproto-dpif megaflow - L2 classification])
5271 OVS_VSWITCHD_START
5272 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5273 ADD_OF_PORTS([br0], [1], [2])
5274 AT_DATA([flows.txt], [dnl
5275 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
5276 ])
5277 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5278 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)'])
5279 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)'])
5280 sleep 1
5281 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5282 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
5283 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>
5284 ])
5285 OVS_VSWITCHD_STOP
5286 AT_CLEANUP
5287
5288 AT_SETUP([ofproto-dpif megaflow - L3 classification])
5289 OVS_VSWITCHD_START
5290 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5291 ADD_OF_PORTS([br0], [1], [2])
5292 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], [])
5293 AT_DATA([flows.txt], [dnl
5294 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
5295 ])
5296 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5297 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)'])
5298 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)'])
5299 sleep 1
5300 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5301 recirc_id=0,icmp,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: <del>
5302 recirc_id=0,ip,in_port=1,nw_src=10.0.0.2/0.0.0.2,nw_frag=no, actions: <del>
5303 ])
5304 OVS_VSWITCHD_STOP
5305 AT_CLEANUP
5306
5307 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
5308 OVS_VSWITCHD_START
5309 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5310 ADD_OF_PORTS([br0], [1], [2])
5311 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], [])
5312 AT_DATA([flows.txt], [dnl
5313 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
5314 ])
5315 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5316 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)'])
5317 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)'])
5318 sleep 1
5319 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5320 recirc_id=0,ipv6,in_port=1,ipv6_src=2001:db8:3c4d:1:2:3:4:5,nw_frag=no, actions: <del>
5321 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>
5322 ])
5323 OVS_VSWITCHD_STOP
5324 AT_CLEANUP
5325
5326 AT_SETUP([ofproto-dpif megaflow - L4 classification])
5327 OVS_VSWITCHD_START
5328 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5329 ADD_OF_PORTS([br0], [1], [2])
5330 AT_DATA([flows.txt], [dnl
5331 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
5332 ])
5333 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5334 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)'])
5335 sleep 1
5336 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)'])
5337 sleep 1
5338 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5339 recirc_id=0,icmp,in_port=1,nw_frag=no,icmp_type=0x8/0xff, actions: <del>
5340 ])
5341 OVS_VSWITCHD_STOP
5342 AT_CLEANUP
5343
5344 AT_SETUP([ofproto-dpif megaflow - normal])
5345 OVS_VSWITCHD_START
5346 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5347 ADD_OF_PORTS([br0], [1], [2])
5348 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
5349 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)'])
5350 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)'])
5351 sleep 1
5352 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5353 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>
5354 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>
5355 ])
5356 OVS_VSWITCHD_STOP
5357 AT_CLEANUP
5358
5359 AT_SETUP([ofproto-dpif megaflow - mpls])
5360 OVS_VSWITCHD_START
5361 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5362 ADD_OF_PORTS([br0], [1], [2])
5363 AT_DATA([flows.txt], [dnl
5364 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
5365 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
5366 ])
5367 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5368 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)'])
5369 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)'])
5370 sleep 1
5371 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5372 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>
5373 recirc_id=0,mpls,in_port=1,dl_src=50:54:00:00:00:0b,mpls_bos=1, actions: <del>
5374 ])
5375 OVS_VSWITCHD_STOP
5376 AT_CLEANUP
5377
5378 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
5379 #
5380 # IP_VERSION_TYPE is used in AT_SETUP
5381 m4_define([CHECK_MEGAFLOW_NETFLOW],
5382   [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
5383   OVS_VSWITCHD_START
5384   AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5385   ADD_OF_PORTS([br0], [1], [2])
5386
5387   dnl NetFlow configuration disables wildcarding relevant fields
5388   ON_EXIT([kill `cat test-netflow.pid`])
5389   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
5390   AT_CAPTURE_FILE([netflow.log])
5391   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
5392   ovs-vsctl \
5393      set Bridge br0 netflow=@nf -- \
5394      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
5395        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
5396
5397   AT_CHECK([ovs-ofctl add-flow br0 action=normal])
5398   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)'])
5399   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)'])
5400   sleep 1
5401   AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5402 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>
5403 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>
5404 ])
5405   OVS_VSWITCHD_STOP
5406   AT_CLEANUP])
5407
5408 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
5409 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
5410
5411 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
5412 OVS_VSWITCHD_START(
5413   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
5414    add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
5415    set interface p2 type=dummy ofport_request=2 -- \
5416    set interface p3 type=dummy ofport_request=3])
5417 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
5418 ])
5419 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5420
5421 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
5422 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)'])
5423 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)'])
5424 sleep 1
5425 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5426 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>
5427 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>
5428 ])
5429 OVS_VSWITCHD_STOP
5430 AT_CLEANUP
5431
5432 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
5433 OVS_VSWITCHD_START(
5434   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
5435    add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
5436    set interface p2 type=dummy ofport_request=2 -- \
5437    set interface p3 type=dummy ofport_request=3])
5438 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
5439 ])
5440 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5441
5442 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
5443 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)'])
5444 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)'])
5445 sleep 1
5446 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5447 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>
5448 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>
5449 ])
5450 OVS_VSWITCHD_STOP
5451 AT_CLEANUP
5452
5453 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
5454 # Create bond0 on br0 with interfaces p0 and p1
5455 #    and bond1 on br1 with interfaces p2 and p3
5456 # with p0 patched to p2 and p1 patched to p3.
5457 OVS_VSWITCHD_START(
5458   [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
5459                             other-config:lacp-time=fast \
5460                             other-config:bond-rebalance-interval=0 -- \
5461    set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
5462    set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
5463    add-br br1 -- \
5464    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
5465    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
5466                   fail-mode=secure -- \
5467    add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
5468                             other-config:lacp-time=fast \
5469                             other-config:bond-rebalance-interval=0 -- \
5470    set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
5471    set interface p3 type=patch options:peer=p1 ofport_request=4 --])
5472
5473 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
5474 ])
5475 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5476 ADD_OF_PORTS([br0], [7])
5477 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
5478 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
5479 ovs-appctl time/stop
5480 ovs-appctl time/warp 5000
5481 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)'])
5482 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)'])
5483 sleep 1
5484 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5485 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>
5486 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>
5487 ])
5488 OVS_VSWITCHD_STOP
5489 AT_CLEANUP
5490
5491 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
5492 OVS_VSWITCHD_START
5493 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5494 ADD_OF_PORTS([br0], [1], [2])
5495 AT_DATA([flows.txt], [dnl
5496 table=0 in_port=1,ip actions=resubmit(90)
5497 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
5498 ])
5499 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5500 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)'])
5501 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)'])
5502 sleep 1
5503 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5504 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
5505 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>
5506 ])
5507 OVS_VSWITCHD_STOP
5508 AT_CLEANUP
5509
5510 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
5511 OVS_VSWITCHD_START
5512 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5513 ADD_OF_PORTS([br0], [1], [2])
5514 AT_DATA([flows.txt], [dnl
5515 table=0 in_port=1,ip actions=resubmit(,1)
5516 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
5517 ])
5518 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5519 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)'])
5520 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=
5521 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
5522 sleep 1
5523 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5524 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
5525 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
5526 ])
5527 OVS_VSWITCHD_STOP
5528 AT_CLEANUP
5529
5530 AT_SETUP([ofproto-dpif megaflow - goto_table action])
5531 OVS_VSWITCHD_START
5532 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5533 ADD_OF_PORTS([br0], [1], [2])
5534 AT_DATA([flows.txt], [dnl
5535 table=0 in_port=1,ip actions=goto_table(1)
5536 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
5537 ])
5538 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
5539 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)'])
5540 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)'])
5541 sleep 1
5542 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5543 recirc_id=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
5544 recirc_id=0,ip,in_port=1,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 - mirroring, select_all])
5550 OVS_VSWITCHD_START
5551 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5552 ADD_OF_PORTS([br0], [1], [2], [3])
5553 ovs-vsctl \
5554         set Bridge br0 mirrors=@m --\
5555         --id=@p3 get Port p3 --\
5556         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
5557
5558 AT_DATA([flows.txt], [dnl
5559 in_port=1 actions=output:2
5560 ])
5561 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5562 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)'])
5563 sleep 1
5564 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)'])
5565 sleep 1
5566 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5567 recirc_id=0,ip,in_port=1,nw_frag=no, actions: <del>
5568 ])
5569 OVS_VSWITCHD_STOP
5570 AT_CLEANUP
5571
5572 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
5573 OVS_VSWITCHD_START
5574 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5575 ADD_OF_PORTS([br0], [1], [2], [3])
5576 ovs-vsctl \
5577         set Bridge br0 mirrors=@m --\
5578         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
5579         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
5580
5581 AT_DATA([flows.txt], [dnl
5582 in_port=1 actions=output:2
5583 ])
5584 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5585 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))'])
5586 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)'])
5587 sleep 1
5588 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5589 recirc_id=0,ip,in_port=1,dl_vlan=11,nw_frag=no, actions: <del>
5590 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, actions: <del>
5591 ])
5592 OVS_VSWITCHD_STOP
5593 AT_CLEANUP
5594
5595 AT_SETUP([ofproto-dpif megaflow - move action])
5596 OVS_VSWITCHD_START
5597 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5598 ADD_OF_PORTS([br0], [1], [2])
5599 AT_DATA([flows.txt], [dnl
5600 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
5601 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
5602 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
5603 ])
5604 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5605 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)'])
5606 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)'])
5607 sleep 1
5608 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5609 recirc_id=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, actions: <del>
5610 recirc_id=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: <del>
5611 ])
5612 OVS_VSWITCHD_STOP
5613 AT_CLEANUP
5614
5615 AT_SETUP([ofproto-dpif megaflow - push action])
5616 OVS_VSWITCHD_START
5617 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5618 ADD_OF_PORTS([br0], [1], [2])
5619 AT_DATA([flows.txt], [dnl
5620 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
5621 ])
5622 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5623 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)'])
5624 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)'])
5625 sleep 1
5626 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5627 recirc_id=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, actions: <del>
5628 recirc_id=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, actions: <del>
5629 ])
5630 OVS_VSWITCHD_STOP
5631 AT_CLEANUP
5632
5633 AT_SETUP([ofproto-dpif megaflow - learning])
5634 OVS_VSWITCHD_START
5635 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5636 ADD_OF_PORTS([br0], [1], [2])
5637 AT_DATA([flows.txt], [dnl
5638 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
5639 ])
5640 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5641 ovs-appctl time/stop
5642 # We send each packet twice because the first packet in each flow causes the
5643 # flow table to change and thus revalidations, which (depending on timing)
5644 # can keep a megaflow from being installed.  The revalidations are done by
5645 # the second iteration, allowing the flows to be installed.
5646 for i in 1 2; do
5647     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)'])
5648     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)'])
5649     ovs-appctl time/warp 100
5650 done
5651 sleep 1
5652 dnl The original flow is missing due to a revalidation.
5653 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5654 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
5655 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
5656 ])
5657 OVS_VSWITCHD_STOP
5658 AT_CLEANUP
5659
5660 AT_SETUP([ofproto-dpif megaflow - tunnels])
5661 OVS_VSWITCHD_START(
5662   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
5663 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5664 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
5665      options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
5666 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
5667           ofport_request=3])
5668 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
5669      options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
5670      ofport_request=4 options:key=flow])
5671 AT_DATA([flows.txt], [dnl
5672 in_port=1,actions=output(2)
5673 in_port=3,actions=output(4)
5674 ])
5675 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5676 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
5677 dnl will cause the packet to be dropped.
5678 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)'])
5679 sleep 1
5680 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)'])
5681 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)'])
5682 sleep 1
5683 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)'])
5684 sleep 1
5685 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5686 recirc_id=0,ip,in_port=1,nw_ecn=1,nw_frag=no, actions: <del>
5687 recirc_id=0,ip,in_port=3,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no, actions: <del>
5688 recirc_id=0,ip,in_port=3,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no, actions: <del>
5689 ])
5690 OVS_VSWITCHD_STOP
5691 AT_CLEANUP
5692
5693 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
5694 OVS_VSWITCHD_START
5695 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5696 ADD_OF_PORTS([br0], [1], [2])
5697 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], [])
5698 AT_DATA([flows.txt], [dnl
5699 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
5700 ])
5701 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5702 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)'])
5703 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)'])
5704 sleep 1
5705 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
5706 recirc_id=0,icmp,in_port=1,nw_src=10.0.0.4,nw_ttl=64,nw_frag=no, actions: <del>
5707 recirc_id=0,ip,in_port=1,nw_src=10.0.0.2/0.0.0.2,nw_frag=no, actions: <del>
5708 ])
5709 OVS_VSWITCHD_STOP
5710 AT_CLEANUP
5711
5712 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
5713 OVS_VSWITCHD_START
5714 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5715 ADD_OF_PORTS([br0], [1], [2])
5716 AT_DATA([flows.txt], [dnl
5717 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
5718 ])
5719 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5720 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)'])
5721 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)'])
5722 sleep 1
5723 dnl The first packet is essentially a no-op, as the new destination MAC is the
5724 dnl same as the original.  The second entry actually updates the destination
5725 dnl MAC.
5726 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5727 recirc_id=0,ip,in_port=1,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions:2
5728 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
5729 ])
5730 OVS_VSWITCHD_STOP
5731 AT_CLEANUP
5732
5733 AT_SETUP([ofproto-dpif megaflow - disabled])
5734 OVS_VSWITCHD_START
5735 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5736 ADD_OF_PORTS([br0], [1], [2])
5737 AT_DATA([flows.txt], [dnl
5738 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
5739 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
5740 ])
5741 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
5742 ], [])
5743 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
5744 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5745 for i in 1 2 3 4; do
5746     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)'])
5747     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)'])
5748     if [[ $i -eq 1 ]]; then
5749         sleep 1
5750     fi
5751 done
5752 sleep 1
5753 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5754 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
5755 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
5756 ])
5757 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
5758 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
5759 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
5760 ])
5761 OVS_VSWITCHD_STOP
5762 AT_CLEANUP
5763
5764 AT_SETUP([ofproto-dpif - datapath port number change])
5765 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5766 ADD_OF_PORTS([br0], 1)
5767
5768 # Trace a flow that should output to p1.
5769 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
5770   [0], [stdout])
5771 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
5772 ])
5773
5774 # Change p1's port number to 5.
5775 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
5776
5777 # Trace a flow that should output to p1 in its new location.
5778 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
5779   [0], [stdout])
5780 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
5781 ])
5782 OVS_VSWITCHD_STOP
5783 AT_CLEANUP
5784
5785 # Tests the bundling with various bfd and cfm configurations.
5786 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
5787 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
5788                     add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
5789                     add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
5790                     set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
5791                     set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
5792                     set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
5793                     set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
5794                     set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
5795                     set Interface p0 cfm_mpid=1 -- \
5796                     set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
5797
5798 ovs-appctl time/stop
5799 # advance the clock to stablize everything.
5800 ovs-appctl time/warp 5000 100
5801 # cfm/show should show 'recv' fault.
5802 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
5803         fault: recv
5804 ])
5805 # bfd/show should show 'up'.
5806 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
5807         Local Session State: up
5808         Remote Session State: up
5809         Local Session State: up
5810         Remote Session State: up
5811 ])
5812 # bond/show should show 'may-enable: true' for all slaves.
5813 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
5814         may_enable: true
5815         may_enable: true
5816         may_enable: true
5817         may_enable: true
5818 ])
5819
5820 # now disable the bfd on p1.
5821 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
5822 # advance the clock to stablize everything.
5823 ovs-appctl time/warp 5000 100
5824 # cfm/show should show 'recv' fault.
5825 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
5826         fault: recv
5827 ])
5828 # bfd/show should show 'down'.
5829 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
5830         Local Session State: down
5831         Remote Session State: down
5832 ])
5833 # bond/show should show 'may-enable: false' for p0.
5834 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
5835         may_enable: false
5836         may_enable: true
5837 ])
5838
5839 # now enable the bfd on p1 and disable bfd on p0.
5840 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
5841 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
5842 # advance the clock to stablize everything.
5843 ovs-appctl time/warp 5000 100
5844 # cfm/show should show 'recv' fault.
5845 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
5846         fault: recv
5847 ])
5848 # bfd/show should show 'down'.
5849 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
5850         Local Session State: down
5851         Remote Session State: down
5852 ])
5853 # bond/show should show 'may-enable: false' for p0 and p1.
5854 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
5855         may_enable: false
5856         may_enable: true
5857         may_enable: false
5858         may_enable: true
5859 ])
5860
5861 OVS_VSWITCHD_STOP
5862 AT_CLEANUP
5863
5864 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
5865 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
5866
5867 # enable bfd on p0.
5868 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
5869 # check log.
5870 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
5871 # disable bfd on p0.
5872 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
5873 # check log.
5874 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
5875 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
5876
5877 # enable cfm on p0.
5878 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
5879 # check log.
5880 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
5881 # disable cfm on p0.
5882 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
5883 # check log.
5884 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
5885 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
5886
5887 # enable both bfd and cfm on p0.
5888 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
5889 # check log.
5890 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
5891 # disable bfd on p0.
5892 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
5893 # check log, there should not be the log of thread terminated.
5894 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
5895 ])
5896 # reenable bfd on p0.
5897 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
5898 # check log, should still be on log of thread created.
5899 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
5900 monitor thread created
5901 ])
5902 # disable bfd and cfm together.
5903 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
5904 # check log.
5905 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
5906
5907 OVS_VSWITCHD_STOP
5908 AT_CLEANUP
5909
5910 # this test helps avoid the deadlock between the main thread and monitor thread.
5911 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
5912 OVS_VSWITCHD_START
5913
5914 for i in `seq 1 199`
5915 do
5916     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])
5917 done
5918
5919 OVS_VSWITCHD_STOP
5920 AT_CLEANUP
5921 \f
5922 AT_BANNER([ofproto-dpif - flow translation resource limits])
5923
5924 AT_SETUP([ofproto-dpif - infinite resubmit])
5925 OVS_VSWITCHD_START
5926 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
5927 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
5928   [0], [stdout])
5929 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
5930 ])
5931 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
5932   [0], [1
5933 ])
5934 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
5935 AT_CLEANUP
5936
5937 AT_SETUP([ofproto-dpif - exponential resubmit chain])
5938 OVS_VSWITCHD_START
5939 ADD_OF_PORTS([br0], 1)
5940 (for i in `seq 1 64`; do
5941      j=`expr $i + 1`
5942      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
5943  done
5944  echo "in_port=65, actions=local") > flows
5945  AT_CHECK([ovs-ofctl add-flows br0 flows])
5946 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
5947 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
5948 ])
5949 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
5950 AT_CLEANUP
5951
5952 AT_SETUP([ofproto-dpif - too many output actions])
5953 OVS_VSWITCHD_START
5954 ADD_OF_PORTS([br0], 1)
5955 (for i in `seq 1 12`; do
5956      j=`expr $i + 1`
5957      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
5958  done
5959  echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
5960 AT_CHECK([ovs-ofctl add-flows br0 flows])
5961 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
5962 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
5963   [0], [1
5964 ])
5965 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
5966 ])
5967 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
5968 AT_CLEANUP
5969
5970 AT_SETUP([ofproto-dpif - stack too deep])
5971 OVS_VSWITCHD_START
5972 ADD_OF_PORTS([br0], 1)
5973 (for i in `seq 1 12`; do
5974      j=`expr $i + 1`
5975      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
5976  done
5977  push="push:NXM_NX_REG0[[]]"
5978  echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
5979  AT_CHECK([ovs-ofctl add-flows br0 flows])
5980 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
5981 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
5982 ])
5983 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
5984 AT_CLEANUP
5985
5986
5987 AT_SETUP([ofproto-dpif packet-out controller])
5988 OVS_VSWITCHD_START
5989 ADD_OF_PORTS([br0], 1, 2)
5990
5991 AT_CHECK([ovs-ofctl add-flow br0 'dl_dst=50:54:00:00:00:0a actions=controller'])
5992
5993 AT_CAPTURE_FILE([ofctl_monitor.log])
5994 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
5995
5996 for i in 1 2 3; do
5997         AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER controller '50540000000a5054000000091234'])
5998 done
5999
6000 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6001 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6002 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6003 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
6004 dnl
6005 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6006 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
6007 dnl
6008 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6009 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
6010 ])
6011
6012 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
6013  dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6014 NXST_FLOW reply:
6015 ])
6016
6017 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6018   table 0:
6019     active=1, lookup=0, matched=0"
6020  x=1
6021  while test $x -lt 254; do
6022    echo "
6023   table $x:
6024     active=0, lookup=0, matched=0"
6025    x=`expr $x + 1`
6026  done) > expout
6027 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6028
6029 OVS_VSWITCHD_STOP
6030 AT_CLEANUP
6031
6032 AT_SETUP([ofproto-dpif packet-out controller (patch port)])
6033 OVS_VSWITCHD_START(
6034   [-- \
6035    add-port br0 p1 -- \
6036    set interface p1 type=patch options:peer=p2 -- \
6037    add-br br1 -- \
6038    set bridge br1 datapath-type=dummy -- \
6039    set bridge br1 fail-mode=secure -- \
6040    set bridge br1 protocols='[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13]' -- \
6041    add-port br1 p2 -- \
6042    set interface p2 type=patch options:peer=p1 --])
6043
6044 AT_CAPTURE_FILE([ofctl_monitor.log])
6045 AT_CHECK([ovs-ofctl monitor br1 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6046
6047 for i in 1 2 3; do
6048         AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER output:1 '50540000000a5054000000091234'])
6049 done
6050
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): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (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): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (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): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (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 (printf "OFPST_TABLE reply (OF1.3) (xid=0x2):"
6064  x=0
6065  while test $x -lt 254; do
6066    echo "
6067   table $x:
6068     active=0, lookup=0, matched=0"
6069    x=`expr $x + 1`
6070  done) > expout
6071 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6072
6073 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6074   table 0:
6075     active=0, lookup=3, matched=0"
6076  x=1
6077  while test $x -lt 254; do
6078    echo "
6079   table $x:
6080     active=0, lookup=0, matched=0"
6081    x=`expr $x + 1`
6082  done) > expout
6083 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br1 ], [0], [expout])
6084
6085 OVS_VSWITCHD_STOP
6086 AT_CLEANUP
6087
6088
6089 AT_SETUP([ofproto-dpif packet-out goto_table])
6090 OVS_VSWITCHD_START
6091 ADD_OF_PORTS([br0], 1, 2)
6092
6093 AT_DATA([flows.txt], [dnl
6094 table=0 dl_dst=50:54:00:00:00:0a actions=goto_table(1)
6095 table=1 dl_dst=50:54:00:00:00:0a actions=controller
6096 ])
6097 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
6098
6099 AT_CAPTURE_FILE([ofctl_monitor.log])
6100 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6101
6102 for i in 1 2 3; do
6103     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)'
6104 done
6105
6106 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6107 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6108 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6109 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6110 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
6111 dnl
6112 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6113 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
6114 dnl
6115 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6116 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
6117 ])
6118
6119 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
6120 AT_CHECK([ovs-appctl revalidator/wait], [0], [ignore])
6121
6122 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
6123  n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=goto_table:1
6124  table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6125 OFPST_FLOW reply (OF1.3):
6126 ])
6127
6128 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6129   table 0:
6130     active=1, lookup=3, matched=3
6131
6132   table 1:
6133     active=1, lookup=3, matched=3"
6134  x=2
6135  while test $x -lt 254; do
6136    echo "
6137   table $x:
6138     active=0, lookup=0, matched=0"
6139    x=`expr $x + 1`
6140  done) > expout
6141 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6142
6143 OVS_VSWITCHD_STOP
6144 AT_CLEANUP
6145
6146
6147 AT_SETUP([ofproto-dpif packet-out table-miss (continue)])
6148 OVS_VSWITCHD_START
6149 ADD_OF_PORTS([br0], 1, 2)
6150
6151 AT_CHECK([ovs-ofctl -O OpenFlow11 add-flow br0 'table=1 dl_dst=50:54:00:00:00:0a actions=controller'])
6152 AT_CHECK([ovs-ofctl -O OpenFlow11 mod-table br0 all continue])
6153
6154 AT_CAPTURE_FILE([ofctl_monitor.log])
6155 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6156
6157 for i in 1 2 3; do
6158     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)'
6159 done
6160
6161 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6162 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6163 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6164 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6165 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
6166 dnl
6167 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6168 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
6169 dnl
6170 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6171 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
6172 ])
6173
6174 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
6175 AT_CHECK([ovs-appctl revalidator/wait], [0], [ignore])
6176
6177 AT_CHECK([ovs-ofctl -O OpenFlow11 dump-flows br0 | ofctl_strip | sort], [0], [dnl
6178  table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6179 OFPST_FLOW reply (OF1.1):
6180 ])
6181
6182 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6183   table 0:
6184     active=0, lookup=3, matched=0
6185
6186   table 1:
6187     active=1, lookup=3, matched=3"
6188  x=2
6189  while test $x -lt 254; do
6190    echo "
6191   table $x:
6192     active=0, lookup=0, matched=0"
6193    x=`expr $x + 1`
6194  done) > expout
6195 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6196
6197 OVS_VSWITCHD_STOP
6198 AT_CLEANUP
6199
6200 AT_SETUP([ofproto-dpif - ICMPv6])
6201 OVS_VSWITCHD_START
6202 ADD_OF_PORTS([br0], 1)
6203
6204 AT_CAPTURE_FILE([ofctl_monitor.log])
6205
6206 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6207
6208 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
6209
6210 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6211
6212 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6213 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
6214 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
6215 ])
6216
6217 OVS_VSWITCHD_STOP
6218 AT_CLEANUP