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