ofproto-dpif-xlate: Do not execute resubmit again after recirculation.
[cascardo/ovs.git] / tests / ofproto-dpif.at
1 AT_BANNER([ofproto-dpif])
2
3 AT_SETUP([ofproto-dpif - revalidator/wait])
4 OVS_VSWITCHD_START
5 AT_CHECK([ovs-appctl revalidator/wait])
6 OVS_VSWITCHD_STOP
7 AT_CLEANUP
8
9 AT_SETUP([ofproto-dpif - active-backup bonding])
10 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
11 #    and br1 with interfaces p3, p4 and p8.
12 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
13 OVS_VSWITCHD_START(
14   [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
15    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
16    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
17    add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
18    add-br br1 -- \
19    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
20    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
21                   fail-mode=secure -- \
22    add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
23    add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
24    add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
25 WAIT_FOR_DUMMY_PORTS([p3], [p4])
26 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
27
28 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
29 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
30 ovs-appctl netdev-dummy/set-admin-state up
31 ovs-appctl time/warp 100
32 ovs-appctl netdev-dummy/set-admin-state p2 down
33 ovs-appctl time/stop
34 ovs-appctl time/warp 100
35 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
36 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
37 ovs-appctl time/warp 100
38 ovs-appctl netdev-dummy/set-admin-state p2 up
39 ovs-appctl netdev-dummy/set-admin-state p1 down
40 ovs-appctl time/warp 100
41 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
42 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
43 ovs-appctl time/warp 200 100
44 sleep 1
45 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port=[[348]]' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
46 recirc_id=0,ip,in_port=3,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
47 recirc_id=0,ip,in_port=3,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
48 recirc_id=0,ip,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0d,nw_frag=no, actions: <del>
49 recirc_id=0,ip,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0e,nw_frag=no, actions: <del>
50 recirc_id=0,rarp,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=ff:ff:ff:ff:ff:ff, actions: <del>
51 recirc_id=0,rarp,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=ff:ff:ff:ff:ff:ff, actions: <del>
52 ])
53 OVS_VSWITCHD_STOP
54 AT_CLEANUP
55
56 AT_SETUP([ofproto-dpif - balance-slb bonding])
57 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
58 #    and br1 with interfaces p4, p5, p6 and p8.
59 #    p1 <-> p4, p2 <-> p5, p3 <-> p6
60 # Send some traffic, make sure the traffic are spread based on source mac.
61 OVS_VSWITCHD_START(
62   [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
63    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
64    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
65    set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
66    add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
67    add-br br1 -- \
68    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
69    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
70                   fail-mode=secure -- \
71    add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
72    add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
73    add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
74    add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
75 WAIT_FOR_DUMMY_PORTS([p4], [p5], [p6])
76 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
77 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
78 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
79 ])
80 ovs-appctl time/stop
81 ovs-appctl time/warp 100
82 (
83 for i in `seq 0 100 |xargs printf '%02x\n'`;
84     do
85     pkt="in_port(7),eth(src=50:54:00:00:00:$i,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)"
86     AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
87     done
88 )
89 ovs-appctl time/warp 100
90 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
91 # Make sure there is resonable distribution to all three ports.
92 # We don't want to make this check precise, in case hash function changes.
93 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
94 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
95 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
96 OVS_VSWITCHD_STOP
97 AT_CLEANUP
98
99 AT_SETUP([ofproto-dpif - balance-tcp bonding])
100 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
101 #    and br1 with interfaces bond1(p4, p5, p6) and p8.
102 #    bond0 <-> bond1
103 # Send some traffic, make sure the traffic are spread based on L4 headers.
104 OVS_VSWITCHD_START(
105   [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
106         other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
107    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
108    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
109    set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
110    add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
111    add-br br1 -- \
112    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
113    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
114                   fail-mode=secure -- \
115    add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
116         other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
117    set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
118    set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
119    set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
120    add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
121 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
122 ])
123 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
124 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
125 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
126 ], [])
127 OVS_WAIT_WHILE([ovs-appctl bond/show | grep "may_enable: false"])
128 ovs-appctl time/stop
129 ovs-appctl time/warp 100
130 ovs-appctl lacp/show > lacp.txt
131 ovs-appctl bond/show > bond.txt
132 (
133 for i in `seq 0 255` ;
134     do
135     pkt="in_port(7),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=$i),tcp_flags(ack)"
136     AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
137     done
138 )
139 ovs-appctl time/warp 300 100
140 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
141 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
142 # Make sure there is resonable distribution to all three ports.
143 # We don't want to make this check precise, in case hash function changes.
144 AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 24])
145 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24])
146 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24])
147
148 OVS_VSWITCHD_STOP()
149 AT_CLEANUP
150
151 # Makes sure recirculation does not change the way packet is handled.
152 AT_SETUP([ofproto-dpif - balance-tcp bonding, different recirc flow ])
153 OVS_VSWITCHD_START(
154   [add-bond br0 bond0 p1 p2 bond_mode=balance-tcp lacp=active \
155        other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
156    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
157    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
158    add-br br1 -- \
159    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
160    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
161        fail-mode=standalone -- \
162    add-bond br1 bond1 p3 p4 bond_mode=balance-tcp lacp=active \
163        other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
164    set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
165    set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
166    add-port br1 br1- -- set interface br1- type=patch options:peer=br1+ ofport_request=100 -- \
167    add-br br-int -- \
168    set bridge br-int other-config:hwaddr=aa:77:aa:77:00:00 -- \
169    set bridge br-int datapath-type=dummy other-config:datapath-id=1235 \
170        fail-mode=secure -- \
171    add-port br-int br1+ -- set interface br1+ type=patch options:peer=br1- ofport_request=101 -- \
172    add-port br-int p5 -- set interface p5 ofport_request=5 type=dummy
173 ])
174 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
175 ])
176
177 # Waits for all ifaces enabled.
178 OVS_WAIT_UNTIL([test `ovs-appctl bond/show | grep -- "may_enable: true" |  wc -l` -ge 4])
179
180 # The dl_vlan flow should not be ever matched,
181 # since recirculation should not change the flow handling.
182 AT_DATA([flows.txt], [dnl
183 table=0 priority=1 in_port=5 actions=mod_vlan_vid:1,output(101)
184 table=0 priority=2 in_port=5 dl_vlan=1 actions=drop
185 ])
186 AT_CHECK([ovs-ofctl add-flows br-int flows.txt])
187
188 # Sends a packet to trigger recirculation.
189 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],
213                     [16], [17], [18], [19], [20], [21])
214 AT_DATA([flows.txt], [dnl
215 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
216 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
217 table=0 in_port=3 priority=2000 icmp actions=output(20)
218 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
219 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
220 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
221 ])
222 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
223 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])
224 AT_CHECK([tail -1 stdout], [0],
225   [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
226 ])
227 OVS_VSWITCHD_STOP
228 AT_CLEANUP
229
230 AT_SETUP([ofproto-dpif - goto table])
231 OVS_VSWITCHD_START
232 ADD_OF_PORTS([br0], [1], [10], [11])
233 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
234 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
235 echo "table=64 actions=output(11)" >> flows.txt
236 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
237 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])
238 AT_CHECK([tail -1 stdout], [0],
239   [Datapath actions: 10,11
240 ])
241 OVS_VSWITCHD_STOP
242 AT_CLEANUP
243
244 AT_SETUP([ofproto-dpif - write actions])
245 OVS_VSWITCHD_START
246 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
247 AT_DATA([flows.txt], [dnl
248 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
249 table=1 ip actions=write_actions(output(13)),goto_table(2)
250 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
251 ])
252 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
253 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])
254 AT_CHECK([tail -2 stdout], [0],
255   [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
256 Datapath actions: 10,set(ipv4(src=192.168.3.91)),11,set(ipv4(src=192.168.3.90)),13
257 ])
258 OVS_VSWITCHD_STOP
259 AT_CLEANUP
260
261 AT_SETUP([ofproto-dpif - modify IPv6 Neighbor Solitication (ND)])
262 OVS_VSWITCHD_START
263 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
264 AT_DATA([flows.txt], [dnl
265 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)
266 table=1 icmp6 actions=write_actions(output(13)),goto_table(2)
267 table=2 in_port=1,icmp6,icmpv6_type=135 actions=set_field:fe80::4->nd_target,set_field:cc:cc:cc:cc:cc:cc->nd_sll,output(11)
268 ])
269 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
270 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])
271 AT_CHECK([tail -4 stdout], [0],
272   [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
273 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
274 This flow is handled by the userspace slow path because it:
275         - Uses action(s) not supported by datapath.
276 ])
277 OVS_VSWITCHD_STOP
278 AT_CLEANUP
279
280 AT_SETUP([ofproto-dpif - clear actions])
281 OVS_VSWITCHD_START
282 ADD_OF_PORTS([br0], [1], [10], [11], [12])
283 AT_DATA([flows.txt], [dnl
284 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
285 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
286 ])
287 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
288 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])
289 AT_CHECK([tail -2 stdout], [0],
290   [Megaflow: recirc_id=0,tcp,in_port=1,nw_frag=no,tp_src=8
291 Datapath actions: 10,set(tcp(src=91)),11
292 ])
293 OVS_VSWITCHD_STOP
294 AT_CLEANUP
295
296 AT_SETUP([ofproto-dpif - group chaining])
297 OVS_VSWITCHD_START
298 ADD_OF_PORTS([br0], [1], [10], [11])
299 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'])
300 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=123,type=all,bucket=output:10'])
301 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
302 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])
303 AT_CHECK([tail -1 stdout], [0],
304   [Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
305 ])
306 OVS_VSWITCHD_STOP
307 AT_CLEANUP
308
309 AT_SETUP([ofproto-dpif - all group in action list])
310 OVS_VSWITCHD_START
311 ADD_OF_PORTS([br0], [1], [10], [11])
312 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'])
313 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
314 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])
315 # Must match on the source address to be able to restore it's value for
316 # the second bucket
317 AT_CHECK([tail -2 stdout], [0],
318   [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
319 Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
320 ])
321 OVS_VSWITCHD_STOP
322 AT_CLEANUP
323
324 AT_SETUP([ofproto-dpif - indirect group in action list])
325 OVS_VSWITCHD_START
326 ADD_OF_PORTS([br0], [1], [10])
327 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
328 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
329 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])
330 AT_CHECK([tail -1 stdout], [0],
331   [Datapath actions: 10
332 ])
333 OVS_VSWITCHD_STOP
334 AT_CLEANUP
335
336 AT_SETUP([ofproto-dpif - group actions have no effect afterwards])
337 OVS_VSWITCHD_START
338 ADD_OF_PORTS([br0], [1], [10])
339 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'])
340 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234,output:10'])
341 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])
342 AT_CHECK([tail -1 stdout], [0],
343   [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
344 ])
345 OVS_VSWITCHD_STOP
346 AT_CLEANUP
347
348 AT_SETUP([ofproto-dpif - all group in action set])
349 OVS_VSWITCHD_START
350 ADD_OF_PORTS([br0], [1], [10], [11])
351 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'])
352 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
353 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])
354 # Must match on the source address to be able to restore it's value for
355 # the third bucket
356 AT_CHECK([tail -2 stdout], [0],
357   [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
358 Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
359 ])
360 OVS_VSWITCHD_STOP
361 AT_CLEANUP
362
363 AT_SETUP([ofproto-dpif - indirect group in action set])
364 OVS_VSWITCHD_START
365 ADD_OF_PORTS([br0], [1], [10])
366 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
367 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
368 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])
369 AT_CHECK([tail -1 stdout], [0],
370   [Datapath actions: 10
371 ])
372 OVS_VSWITCHD_STOP
373 AT_CLEANUP
374
375 AT_SETUP([ofproto-dpif - select group])
376 OVS_VSWITCHD_START
377 ADD_OF_PORTS([br0], [1], [10], [11])
378 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
379 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
380
381 # Try a bunch of different flows and make sure that they get distributed
382 # at least somewhat.
383 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
384     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])
385     tail -1 stdout >> results
386 done
387 sort results | uniq -c
388 AT_CHECK([sort results | uniq], [0],
389   [Datapath actions: 10
390 Datapath actions: 11
391 ])
392 OVS_VSWITCHD_STOP
393 AT_CLEANUP
394
395 AT_SETUP([ofproto-dpif - select group with watch port])
396 OVS_VSWITCHD_START
397 ADD_OF_PORTS([br0], [1], [10], [11])
398 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
399 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
400 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])
401 AT_CHECK([tail -1 stdout], [0],
402   [Datapath actions: 11
403 ])
404 OVS_VSWITCHD_STOP
405 AT_CLEANUP
406
407 AT_SETUP([ofproto-dpif - select group with weight])
408 OVS_VSWITCHD_START
409 ADD_OF_PORTS([br0], [1], [10], [11], [12])
410 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'])
411 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
412 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])
413 AT_CHECK([tail -1 stdout], [0],
414   [Datapath actions: 11
415 ])
416 OVS_VSWITCHD_STOP
417 AT_CLEANUP
418
419 AT_SETUP([ofproto-dpif - select group with hash selection method])
420 OVS_VSWITCHD_START
421 ADD_OF_PORTS([br0], [1], [10], [11])
422 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'])
423 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 'ip actions=write_actions(group:1234)'])
424
425 # Try a bunch of different flows and make sure that they get distributed
426 # at least somewhat.
427 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
428     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])
429     tail -1 stdout >> results
430 done
431 sort results | uniq -c
432 AT_CHECK([sort results | uniq], [0],
433   [Datapath actions: 10
434 Datapath actions: 11
435 ])
436
437 > results
438 # Try a bunch of different flows and make sure that they are not distributed
439 # as they only vary a field that is not hashed
440 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
441     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])
442     tail -1 stdout >> results
443 done
444 sort results | uniq -c
445 AT_CHECK([sort results | uniq], [0],
446   [Datapath actions: 10
447 ])
448
449 OVS_VSWITCHD_STOP
450 AT_CLEANUP
451
452 AT_SETUP([ofproto-dpif - fast failover group])
453 OVS_VSWITCHD_START
454 ADD_OF_PORTS([br0], [1], [10], [11])
455 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'])
456 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
457 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])
458 AT_CHECK([tail -1 stdout], [0],
459   [Datapath actions: drop
460 ])
461 OVS_VSWITCHD_STOP
462 AT_CLEANUP
463
464 AT_SETUP([ofproto-dpif - group stats single bucket])
465 OVS_VSWITCHD_START
466 ADD_OF_PORTS([br0], [1], [10], [11])
467 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,weight=2000,bucket=output:11,weight=0'])
468 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
469 (
470 for i in `seq 0 2`;
471     do
472     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)"
473     AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
474     done
475 )
476 AT_CHECK([ovs-appctl revalidator/purge], [0])
477 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
478 AT_CHECK([STRIP_XIDS stdout | sort], [0], [dnl
479  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
480 OFPST_GROUP reply (OF1.2):
481 ])
482 OVS_VSWITCHD_STOP
483 AT_CLEANUP
484
485 AT_SETUP([ofproto-dpif - group stats all buckets])
486 OVS_VSWITCHD_START
487 ADD_OF_PORTS([br0], [1], [10], [11])
488 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:11'])
489 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
490 (
491 for i in `seq 0 2`;
492     do
493     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)"
494     AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
495     done
496 )
497 AT_CHECK([ovs-appctl revalidator/purge], [0])
498 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
499 AT_CHECK([STRIP_XIDS stdout | sort], [0], [dnl
500  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
501 OFPST_GROUP reply (OF1.2):
502 ])
503 OVS_VSWITCHD_STOP
504 AT_CLEANUP
505
506 AT_SETUP([ofproto-dpif - registers])
507 OVS_VSWITCHD_START
508 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
509 AT_DATA([flows.txt], [dnl
510 in_port=90                 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
511 in_port=91                 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
512 in_port=92                 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
513 in_port=93                 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
514
515 in_port=2                  actions=load:0x000db000->NXM_NX_REG0[[]]
516 in_port=3                  actions=load:0xdea->NXM_NX_REG0[[20..31]]
517 in_port=4                  actions=load:0xeef->NXM_NX_REG0[[0..11]]
518 in_port=5                  actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
519 in_port=6                  actions=load:0x22222222->NXM_NX_REG2[[]]
520 in_port=7                  actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
521 in_port=8                  actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
522 in_port=9,reg0=0xdeadbeef  actions=output:20
523 in_port=10,reg1=0xdeadbeef actions=output:21
524 in_port=11,reg2=0xeef22dea actions=output:22
525
526 dnl Sanilty check all registers
527 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
528 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
529 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
530 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
531
532 ])
533 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
534 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])
535 AT_CHECK([tail -1 stdout], [0],
536   [Datapath actions: 20,21,22,33
537 ])
538 OVS_VSWITCHD_STOP
539 AT_CLEANUP
540
541 dnl Tests that the standardized xregs are mapped onto the legacy OVS registers
542 dnl in the manner documented in ovs-ofctl(8).
543 AT_SETUP([ofproto-dpif - extended registers])
544 OVS_VSWITCHD_START
545 ADD_OF_PORTS([br0], [1], [2], [3])
546 AT_DATA([flows.txt], [dnl
547 table=0     actions=load:0xfedcba9876543210->OXM_OF_PKT_REG1[[]],resubmit(,1)
548 table=1,reg2=0xfedcba98,reg3=0x76543210   actions=2
549
550 # These low-priority rules shouldn't match.  They're here only to make really
551 # sure that the test fails if either of the above rules fails to match.
552 table=0,priority=0                        actions=3
553 table=1,priority=0                        actions=3
554 ])
555 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
556 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])
557 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
558 ])
559 OVS_VSWITCHD_STOP
560 AT_CLEANUP
561
562 AT_SETUP([ofproto-dpif - load and move order])
563 OVS_VSWITCHD_START
564 ADD_OF_PORTS([br0], [1], [10], [11])
565 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'])
566 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)'])
567 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])
568 AT_CHECK([tail -2 stdout], [0],
569   [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
570 Datapath actions: set(ipv4(src=255.255.255.255)),10,set(ipv4(src=192.168.0.1)),11
571 ])
572 OVS_VSWITCHD_STOP
573 AT_CLEANUP
574
575 dnl Tests that 1.5 copy-field can copy into the standardized xregs.
576 AT_SETUP([ofproto-dpif - copy-field into extended registers])
577 OVS_VSWITCHD_START
578 ADD_OF_PORTS([br0], [1], [2], [3])
579 AT_DATA([flows.txt], [dnl
580 table=0     actions=move:OXM_OF_ETH_SRC[[0..47]]->OXM_OF_PKT_REG0[[0..47]],goto_table(1)
581 table=1,xreg0=0x0000505400000005   actions=2
582
583 # These low-priority rules shouldn't match.  They're here only to make really
584 # sure that the test fails if either of the above rules fails to match.
585 table=0,priority=0                        actions=3
586 table=1,priority=0                        actions=3
587 ])
588 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
589 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])
590 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
591 ])
592 OVS_VSWITCHD_STOP
593 AT_CLEANUP
594
595 dnl Tests that 1.5 set-field with mask in the metadata register.
596 AT_SETUP([ofproto-dpif - masked set-field into metadata])
597 OVS_VSWITCHD_START
598 ADD_OF_PORTS([br0], [1], [2], [3])
599 AT_DATA([flows.txt], [dnl
600 table=0     actions=set_field:0xfafafafa5a5a5a5a->metadata,goto_table(1)
601 table=1     actions=set_field:0x6b/0xff->metadata,goto_table(2)
602 table=2,metadata=0xfafafafa5a5a5a6b  actions=2
603
604 # These low-priority rules shouldn't match.  They're here only to make really
605 # sure that the test fails if either of the above rules fails to match.
606 table=0,priority=0                        actions=3
607 table=1,priority=0                        actions=3
608 table=2,priority=0                        actions=3
609 ])
610 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
611 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])
612 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
613 ])
614 OVS_VSWITCHD_STOP
615 AT_CLEANUP
616
617
618 AT_SETUP([ofproto-dpif - actset_output])
619 OVS_VSWITCHD_START
620 ADD_OF_PORTS(
621   [br0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13])
622 AT_DATA([flows.txt], [dnl
623 table=0,actset_output=unset     actions=write_actions(output(2)),goto_table(1)
624 table=1     actions=move:ONFOXM_ET_ACTSET_OUTPUT[[0..31]]->OXM_OF_PKT_REG0[[0..31]],goto_table(2)
625
626 # Verify that actset_output got set.
627 table=2,priority=20,actset_output=2  actions=4,goto_table(3)
628 table=2,priority=10                  actions=5,goto_table(3)
629
630 # Verify that xreg0 got copied properly from actset_output.
631 table=3,priority=20,xreg0=2  actions=6,goto_table(4)
632 table=3,priority=10          actions=7,goto_table(4)
633
634 # Verify that adding a group action unsets actset_output,
635 # even if output follows group.
636 table=4 actions=write_actions(group(5),output(10)),goto_table(5)
637 table=5,priority=20,actset_output=unset  actions=8,goto_table(6)
638 table=5,priority=10                      actions=9,goto_table(6)
639
640 # Verify that adding another output action doesn't change actset_output
641 # (since there's still a group).
642 table=6 actions=write_actions(output(3)),goto_table(7)
643 table=7,priority=20,actset_output=unset  actions=10,goto_table(8)
644 table=7,priority=10                      actions=11,goto_table(8)
645
646 # Verify that clearing the action set, then writing an output action,
647 # causes actset_output to be set again.
648 table=8,actions=clear_actions,write_actions(output(3),output(2)),goto_table(9)
649 table=9,priority=20,actset_output=2 actions=12
650 table=9,priority=10                 actions=13
651 ])
652 AT_CHECK([ovs-ofctl -O OpenFlow13 add-group br0 'group_id=5,type=all,bucket=output:1'])
653 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
654 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
655 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 4,6,8,10,12,2
656 ])
657 OVS_VSWITCHD_STOP
658 AT_CLEANUP
659 AT_SETUP([ofproto-dpif - push-pop])
660 OVS_VSWITCHD_START
661 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
662 AT_DATA([flows.txt], [dnl
663 in_port=90           actions=load:20->NXM_NX_REG0[[0..7]],load:21->NXM_NX_REG1[[0..7]],load:22->NXM_NX_REG2[[0..7]], load:33->NXM_NX_REG3[[0..7]], push:NXM_NX_REG0[[]], push:NXM_NX_REG1[[0..7]],push:NXM_NX_REG2[[0..15]], push:NXM_NX_REG3[[]], resubmit:2, resubmit:3, resubmit:4, resubmit:5
664 in_port=2            actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
665 in_port=3            actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
666 in_port=4            actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
667 in_port=5            actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
668
669 ])
670 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
671 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
672 AT_CHECK([tail -1 stdout], [0],
673   [Datapath actions: 33,22,21,20
674 ])
675 OVS_VSWITCHD_STOP
676 AT_CLEANUP
677
678 AT_SETUP([ofproto-dpif - output])
679 OVS_VSWITCHD_START
680 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
681 AT_DATA([flows.txt], [dnl
682 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
683 in_port=2 actions=output:9
684 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
685 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
686 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
687 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
688 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
689 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
690 ])
691 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
692 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
693 AT_CHECK([tail -1 stdout], [0],
694   [Datapath actions: 9,55,10,55,66,11,77,88,9,1
695 ])
696 OVS_VSWITCHD_STOP
697 AT_CLEANUP
698
699 AT_SETUP([ofproto-dpif - dec_ttl])
700 OVS_VSWITCHD_START
701 ADD_OF_PORTS([br0], [1], [2], [3], [4])
702 AT_DATA([flows.txt], [dnl
703 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
704 table=1 in_port=1 action=dec_ttl,output:3
705 ])
706 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
707 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
708 AT_CHECK([tail -4 stdout], [0],
709   [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=2,nw_frag=no
710 Datapath actions: set(ipv4(ttl=1)),2,4
711 This flow is handled by the userspace slow path because it:
712         - Sends "packet-in" messages to the OpenFlow controller.
713 ])
714 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=3,frag=no)'], [0], [stdout])
715 AT_CHECK([tail -2 stdout], [0],
716   [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=3,nw_frag=no
717 Datapath actions: set(ipv4(ttl=2)),2,set(ipv4(ttl=1)),3,4
718 ])
719 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
720 AT_CHECK([tail -2 stdout], [0],
721   [Megaflow: recirc_id=0,ipv6,in_port=1,nw_ttl=128,nw_frag=no
722 Datapath actions: set(ipv6(hlimit=127)),2,set(ipv6(hlimit=126)),3,4
723 ])
724
725 AT_CAPTURE_FILE([ofctl_monitor.log])
726 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
727 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
728 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
729 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
730 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
731 ip,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
732 ])
733 OVS_VSWITCHD_STOP
734 AT_CLEANUP
735
736 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
737 dnl buffer to be resized just before pushing the id of the dec_ttl action.
738 dnl Thus the implementation must account for this by using the
739 dnl reallocated buffer rather than the original buffer.
740 dnl
741 dnl A number of similar rules are added to try and exercise
742 dnl xrealloc sufficiently that it returns a different base pointer
743 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
744 OVS_VSWITCHD_START
745 ADD_OF_PORTS([br0], [1])
746 (for i in `seq 0 255`; do
747   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
748  done) > flows.txt
749 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
750 OVS_VSWITCHD_STOP
751 AT_CLEANUP
752
753 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
754 dnl buffer to be resized just before pushing the id of the dec_ttl action.
755 dnl Thus the implementation must account for this by using the
756 dnl reallocated buffer rather than the original buffer.
757 dnl
758 dnl A number of similar rules are added to try and exercise
759 dnl xrealloc sufficiently that it returns a different base pointer
760 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
761 OVS_VSWITCHD_START
762 ADD_OF_PORTS([br0], [1])
763 (for i in `seq 0 255`; do
764   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
765  done) > flows.txt
766 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
767 OVS_VSWITCHD_STOP
768 AT_CLEANUP
769
770 dnl A note action at offset 24 in ofpacts will cause the ofpacts
771 dnl buffer to be resized just before pushing the id of the dec_ttl action.
772 dnl Thus the implementation must account for this by using the
773 dnl reallocated buffer rather than the original buffer.
774 dnl
775 dnl A number of similar rules are added to try and exercise
776 dnl xrealloc sufficiently that it returns a different base pointer
777 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
778 OVS_VSWITCHD_START
779 ADD_OF_PORTS([br0], [1])
780 (for i in `seq 0 255`; do
781   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
782  done) > flows.txt
783 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
784 OVS_VSWITCHD_STOP
785 AT_CLEANUP
786
787 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
788 OVS_VSWITCHD_START
789 ADD_OF_PORTS([br0], [1], [2])
790
791 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
792
793 # "in_port" defaults to OFPP_NONE if it's not specified.
794 flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,icmp_type=8,icmp_code=0"
795 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
796 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
797 1
798 2
799 100
800 ])
801
802 OVS_VSWITCHD_STOP
803 AT_CLEANUP
804
805 AT_SETUP([ofproto-dpif - DSCP])
806 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
807 ADD_OF_PORTS([br0], [9])
808 AT_DATA([flows.txt], [dnl
809 actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
810 ])
811 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
812 AT_CHECK([ovs-vsctl -- \
813         set Port p1 qos=@newqos --\
814         --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
815         --id=@q1 create Queue dscp=1 --\
816         --id=@q2 create Queue dscp=2], [0], [ignore])
817 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
818 AT_CHECK([tail -2 stdout], [0],
819   [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=9,nw_tos=252,nw_frag=no
820 Datapath actions: dnl
821 100,dnl
822 set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl
823 set(ipv4(tos=0x8/0xfc)),set(skb_priority(0x2)),1,dnl
824 1,dnl
825 set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl
826 set(ipv4(tos=0xfc/0xfc)),set(skb_priority(0)),1,dnl
827 set(ipv4(tos=0/0xfc)),1,100
828 ])
829 OVS_VSWITCHD_STOP
830 AT_CLEANUP
831
832 AT_SETUP([ofproto-dpif - output/flood flags])
833 OVS_VSWITCHD_START
834 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
835
836 AT_DATA([flows.txt], [dnl
837 in_port=local actions=local,flood
838 in_port=1 actions=flood
839 in_port=2 actions=all
840 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
841 in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
842 ])
843 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
844 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
845 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
846
847 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
848 AT_CHECK([tail -1 stdout \
849 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
850 1
851 2
852 3
853 4
854 7
855 ])
856
857 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
858 AT_CHECK([tail -1 stdout \
859 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
860 100
861 2
862 3
863 4
864 7
865 ])
866
867 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
868 AT_CHECK([tail -1 stdout \
869 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
870 1
871 100
872 3
873 4
874 6
875 7
876 ])
877
878 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
879 AT_CHECK([tail -1 stdout], [0],
880   [Datapath actions: 100,1,2,4,6,7
881 ])
882
883 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
884 AT_CHECK([tail -1 stdout], [0],
885   [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
886 ])
887 OVS_VSWITCHD_STOP
888 AT_CLEANUP
889
890 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
891 OVS_VSWITCHD_START([dnl
892    add-port br0 p1 -- set Interface p1 type=dummy
893 ])
894 on_exit 'kill `cat ovs-ofctl.pid`'
895
896 AT_CAPTURE_FILE([ofctl_monitor.log])
897
898 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
899
900 for i in 1 2 3 ; do
901     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(syn)'
902 done
903 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
904 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
905 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
906 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
907 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=syn tcp_csum:0
908 dnl
909 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
910 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=syn tcp_csum:0
911 dnl
912 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
913 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=syn tcp_csum:0
914 ])
915
916 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
917 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
918 NXST_FLOW reply:
919 ])
920
921 OVS_VSWITCHD_STOP
922 AT_CLEANUP
923
924 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
925 OVS_VSWITCHD_START([dnl
926    add-port br0 p1 -- set Interface p1 type=dummy
927 ])
928 on_exit 'kill `cat ovs-ofctl.pid`'
929
930 AT_CAPTURE_FILE([ofctl_monitor.log])
931 AT_CHECK([ovs-ofctl del-flows br0])
932
933 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
934
935 dnl Test that missed packets are droped
936 for i in 1 2 3 ; do
937     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(ack,syn)'
938 done
939 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
940
941 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
942 ])
943
944 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
945 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
946 OFPST_FLOW reply (OF1.3):
947 ])
948
949 OVS_VSWITCHD_STOP
950 AT_CLEANUP
951
952 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
953 OVS_VSWITCHD_START([dnl
954    add-port br0 p1 -- set Interface p1 type=dummy
955 ])
956 on_exit 'kill `cat ovs-ofctl.pid`'
957
958 AT_CAPTURE_FILE([ofctl_monitor.log])
959 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
960
961 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
962
963 for i in 1 2 3 ; do
964     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(urg|rst)'
965 done
966 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
967 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
968 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
969 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
970 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=rst|urg tcp_csum:0
971 dnl
972 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
973 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=rst|urg tcp_csum:0
974 dnl
975 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
976 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=rst|urg tcp_csum:0
977 ])
978
979 AT_CHECK([ovs-appctl revalidator/purge], [0])
980 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
981  n_packets=3, n_bytes=180, actions=goto_table:1
982 OFPST_FLOW reply (OF1.2):
983 ])
984
985 OVS_VSWITCHD_STOP
986 AT_CLEANUP
987
988 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
989 OVS_VSWITCHD_START([dnl
990    add-port br0 p1 -- set Interface p1 type=dummy
991 ])
992 on_exit 'kill `cat ovs-ofctl.pid`'
993
994 AT_CAPTURE_FILE([ofctl_monitor.log])
995 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
996
997 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
998
999 for i in 1 2 3 ; do
1000     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1001 done
1002
1003 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1004 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1005 ])
1006
1007 AT_CHECK([ovs-appctl revalidator/purge], [0])
1008 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1009  n_packets=3, n_bytes=180, actions=resubmit(1,1)
1010 OFPST_FLOW reply (OF1.2):
1011 ])
1012
1013 OVS_VSWITCHD_STOP
1014 AT_CLEANUP
1015
1016 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
1017 OVS_VSWITCHD_START([dnl
1018    add-port br0 p1 -- set Interface p1 type=dummy
1019 ])
1020 on_exit 'kill `cat ovs-ofctl.pid`'
1021
1022 AT_CAPTURE_FILE([ofctl_monitor.log])
1023 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
1024 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1025
1026 dnl Miss table 0, Hit table 1
1027 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1028
1029 for i in 1 2 3 ; do
1030     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1031 done
1032 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1033 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1034
1035 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1036 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1037 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1038 dnl
1039 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1040 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1041 dnl
1042 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1043 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1044 ])
1045
1046 dnl Hit table 0, Miss all other tables, sent to controller
1047 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1048
1049 for i in 1 2 3 ; do
1050     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1051 done
1052 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1053 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1054
1055 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1056 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1057 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1058 dnl
1059 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1060 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1061 dnl
1062 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1063 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1064 ])
1065
1066 AT_CHECK([ovs-appctl revalidator/purge], [0])
1067 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1068  table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1069 OFPST_FLOW reply (OF1.2):
1070 ])
1071
1072 OVS_VSWITCHD_STOP
1073 AT_CLEANUP
1074
1075 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
1076 OVS_VSWITCHD_START([dnl
1077    add-port br0 p1 -- set Interface p1 type=dummy
1078 ])
1079 on_exit 'kill `cat ovs-ofctl.pid`'
1080
1081 AT_CAPTURE_FILE([ofctl_monitor.log])
1082 AT_DATA([flows.txt], [dnl
1083 table=0 actions=goto_table(1)
1084 table=2 dl_src=10:11:11:11:11:11 actions=controller
1085 ])
1086 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
1087 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1088
1089 dnl Hit table 0, Miss table 1, Hit table 2
1090 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1091
1092 for i in 1 2 3 ; do
1093     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1094 done
1095 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1096 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1097
1098 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1099 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1100 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1101 dnl
1102 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1103 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1104 dnl
1105 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1106 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1107 ])
1108
1109 dnl Hit table 1, Miss all other tables, sent to controller
1110 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1111
1112 for i in 1 2 3 ; do
1113     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1114 done
1115 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1116 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1117
1118 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1119 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1120 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1121 dnl
1122 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1123 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1124 dnl
1125 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1126 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1127 ])
1128
1129 AT_CHECK([ovs-appctl revalidator/purge], [0])
1130 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1131  n_packets=6, n_bytes=360, actions=goto_table:1
1132  table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1133 OFPST_FLOW reply (OF1.2):
1134 ])
1135
1136 OVS_VSWITCHD_STOP
1137 AT_CLEANUP
1138
1139 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
1140 OVS_VSWITCHD_START([dnl
1141    add-port br0 p1 -- set Interface p1 type=dummy
1142 ])
1143 on_exit 'kill `cat ovs-ofctl.pid`'
1144
1145 AT_CAPTURE_FILE([ofctl_monitor.log])
1146 AT_DATA([flows.txt], [dnl
1147 table=0 actions=resubmit(1,1)
1148 table=2 dl_src=10:11:11:11:11:11 actions=controller
1149 ])
1150 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
1151 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1152
1153 dnl Hit table 0, Miss table 1, Dropped
1154 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1155
1156 for i in 1 2 3 ; do
1157     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1158 done
1159 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1160
1161 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1162 ])
1163
1164 dnl Hit table 1, Dropped
1165 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1166
1167 for i in 1 2 3 ; do
1168     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1169 done
1170 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1171
1172 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1173 ])
1174
1175 AT_CHECK([ovs-appctl revalidator/purge], [0])
1176 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1177  n_packets=6, n_bytes=360, actions=resubmit(1,1)
1178  table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1179 OFPST_FLOW reply (OF1.2):
1180 ])
1181
1182 OVS_VSWITCHD_STOP
1183 AT_CLEANUP
1184
1185 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
1186 OVS_VSWITCHD_START([dnl
1187    add-port br0 p1 -- set Interface p1 type=dummy
1188 ])
1189 on_exit 'kill `cat ovs-ofctl.pid`'
1190
1191 AT_CAPTURE_FILE([ofctl_monitor.log])
1192 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1193
1194 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1195
1196 dnl Test that missed packets are droped
1197 for i in 1 2 3 ; do
1198     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1199 done
1200 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1201
1202 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1203 ])
1204
1205 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1206 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1207 NXST_FLOW reply:
1208 ])
1209
1210 OVS_VSWITCHD_STOP
1211 AT_CLEANUP
1212
1213 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
1214 OVS_VSWITCHD_START([dnl
1215    add-port br0 p1 -- set Interface p1 type=dummy
1216 ])
1217 on_exit 'kill `cat ovs-ofctl.pid`'
1218
1219 AT_CAPTURE_FILE([ofctl_monitor.log])
1220 AT_CHECK([ovs-ofctl del-flows br0])
1221 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1222 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1223
1224 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1225
1226 dnl Test that missed packets are droped
1227 for i in 1 2 3 ; do
1228     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1229 done
1230 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1231
1232 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1233 ])
1234
1235 AT_CHECK([ovs-appctl revalidator/purge], [0])
1236 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1237  n_packets=3, n_bytes=180, actions=goto_table:1
1238 OFPST_FLOW reply (OF1.2):
1239 ])
1240
1241 OVS_VSWITCHD_STOP
1242 AT_CLEANUP
1243
1244 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1245 OVS_VSWITCHD_START([dnl
1246    add-port br0 p1 -- set Interface p1 type=dummy
1247 ])
1248 on_exit 'kill `cat ovs-ofctl.pid`'
1249
1250 AT_CAPTURE_FILE([ofctl_monitor.log])
1251 AT_CHECK([ovs-ofctl del-flows br0])
1252 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1253 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1254
1255 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1256
1257 dnl Test that missed packets are droped
1258 for i in 1 2 3 ; do
1259     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1260 done
1261 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1262
1263 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1264 ])
1265
1266 AT_CHECK([ovs-appctl revalidator/purge], [0])
1267 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1268  n_packets=3, n_bytes=180, actions=resubmit(1,1)
1269 OFPST_FLOW reply (OF1.2):
1270 ])
1271
1272 OVS_VSWITCHD_STOP
1273 AT_CLEANUP
1274
1275 AT_SETUP([ofproto-dpif - controller])
1276 OVS_VSWITCHD_START([dnl
1277    add-port br0 p1 -- set Interface p1 type=dummy
1278 ])
1279 on_exit 'kill `cat ovs-ofctl.pid`'
1280
1281 AT_CAPTURE_FILE([ofctl_monitor.log])
1282 AT_DATA([flows.txt], [dnl
1283 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1284 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1285 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1286
1287 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1288 cookie=0x4 table=2 in_port=81 actions=load:2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,controller,resubmit(82,3)
1289 cookie=0x5 table=3 in_port=82 actions=load:3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,controller,resubmit(83,4)
1290 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1291 cookie=0x7 table=5 in_port=84 actions=load:5->NXM_NX_REG4[[]],load:6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,controller,resubmit(85,6)
1292 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1293 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1294 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1295 cookie=0xd dl_src=80:88:88:88:88:88 arp actions=load:2->OXM_OF_ARP_OP[[]],controller,load:0xc0a88001->OXM_OF_ARP_SPA[[]],controller,load:0x404444444441->OXM_OF_ARP_THA[[]],load:0x01010101->OXM_OF_ARP_SPA[[]],load:0x02020202->OXM_OF_ARP_TPA[[]],controller
1296 ])
1297 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1298
1299 dnl Flow miss.
1300 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1301
1302 for i in 1 2 3 ; do
1303     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1304 done
1305 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1306 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1307
1308 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1309 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1310 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1311 dnl
1312 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1313 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1314 dnl
1315 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1316 tcp,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=ack tcp_csum:0
1317 ])
1318
1319 dnl Singleton controller action.
1320 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1321
1322 for i in 1 2 3 ; do
1323     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
1324 done
1325 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1326 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1327
1328 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1329 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1330 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
1331 dnl
1332 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1333 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
1334 dnl
1335 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1336 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
1337 ])
1338
1339 dnl Modified controller action.
1340 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1341
1342 for i in 1 2 3 ; do
1343     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=30:33:33:33:33:33,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x001)'
1344 done
1345 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1346 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1347
1348 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1349 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1350 tcp,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=fin tcp_csum:0
1351 dnl
1352 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1353 tcp,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=fin tcp_csum:0
1354 dnl
1355 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1356 tcp,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=fin tcp_csum:0
1357 ])
1358
1359 dnl Modified VLAN controller action.
1360 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1361
1362 for i in 1 2 3; do
1363     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:41,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1364 done
1365 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1366 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1367
1368 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1369 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1370 ip,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1371 dnl
1372 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1373 ip,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1374 dnl
1375 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1376 ip,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1377 ])
1378
1379 dnl Checksum TCP.
1380 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1381
1382 for i in 1 ; do
1383     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=20:22:22:22:22:22,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=11),tcp_flags(0x001)'
1384 done
1385 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1386 ovs-appctl -t ovs-ofctl exit
1387
1388 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1389 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1390 tcp,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:0
1391 dnl
1392 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 reg0=0x1,in_port=1 (via action) data_len=64 (unbuffered)
1393 tcp,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:0
1394 dnl
1395 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 reg0=0x1,reg1=0x2,in_port=1 (via action) data_len=64 (unbuffered)
1396 tcp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:0
1397 dnl
1398 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,in_port=1 (via action) data_len=64 (unbuffered)
1399 tcp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:0
1400 dnl
1401 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,in_port=1 (via action) data_len=64 (unbuffered)
1402 tcp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:1a03
1403 dnl
1404 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1405 tcp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=fin tcp_csum:3205
1406 dnl
1407 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1408 tcp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=11,tcp_flags=fin tcp_csum:31b8
1409 dnl
1410 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1411 tcp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=fin tcp_csum:316d
1412 dnl
1413 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1414 tcp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=fin tcp_csum:316d
1415 ])
1416
1417 dnl Checksum UDP.
1418 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1419
1420 for i in 1 ; do
1421     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 1C 00 00 00 00 00 11 00 00 C0 A8 00 01 C0 A8 00 02 00 08 00 0B 00 00 12 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
1422 done
1423 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1424 ovs-appctl -t ovs-ofctl exit
1425
1426 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1427 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1428 udp,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1429 dnl
1430 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 reg0=0x1,in_port=1 (via action) data_len=64 (unbuffered)
1431 udp,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1432 dnl
1433 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 reg0=0x1,reg1=0x2,in_port=1 (via action) data_len=64 (unbuffered)
1434 udp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1435 dnl
1436 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,in_port=1 (via action) data_len=64 (unbuffered)
1437 udp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1438 dnl
1439 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,in_port=1 (via action) data_len=64 (unbuffered)
1440 udp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:2c37
1441 dnl
1442 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1443 udp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:4439
1444 dnl
1445 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1446 udp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=11 udp_csum:43ec
1447 dnl
1448 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1449 udp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1450 dnl
1451 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
1452 udp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1453 ])
1454
1455 dnl Modified ARP controller action.
1456 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1457
1458 for i in 1 2 3; do
1459     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
1460 done
1461
1462 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1463 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1464 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1465 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1466 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1467 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1468 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1469 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1470 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1471 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1472 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1473 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1474 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1475 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1476 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1477 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1478 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1479 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1480 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1481 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1482 arp,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1483 ])
1484
1485 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1486
1487 dnl Checksum SCTP.
1488 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1489
1490 for i in 1 ; do
1491     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 24 00 00 00 00 00 84 00 00 C0 A8 00 01 C0 A8 00 02 04 58 08 af 00 00 00 00 d9 d7 91 57 01 00 00 34 cf 28 ec 4e 00 01 40 00 00 0a ff ff b7 53 24 19 00 05 00 08 7f 00 00 01 00 05 00 08 c0 a8 02 07 00 0c 00 06 00 05 00 00 80 00 00 04 c0 00 00 04'
1492 done
1493
1494 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
1495 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1496 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1497 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1498 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1499 sctp,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1500 dnl
1501 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 reg0=0x1,in_port=1 (via action) data_len=102 (unbuffered)
1502 sctp,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1503 dnl
1504 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=102 reg0=0x1,reg1=0x2,in_port=1 (via action) data_len=102 (unbuffered)
1505 sctp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1506 dnl
1507 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,in_port=1 (via action) data_len=102 (unbuffered)
1508 sctp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1509 dnl
1510 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,in_port=1 (via action) data_len=102 (unbuffered)
1511 sctp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1512 dnl
1513 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
1514 sctp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1515 dnl
1516 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
1517 sctp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=2223 sctp_csum:dd778f5f
1518 dnl
1519 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
1520 sctp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:62051f56
1521 dnl
1522 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
1523 sctp,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:62051f56
1524 ])
1525
1526 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1527  cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1528  cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1529  cookie=0x3, table=1, n_packets=3, n_bytes=218, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
1530  cookie=0x4, table=2, n_packets=3, n_bytes=218, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
1531  cookie=0x5, table=3, n_packets=3, n_bytes=218, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
1532  cookie=0x6, table=4, n_packets=3, n_bytes=218, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
1533  cookie=0x7, table=5, n_packets=3, n_bytes=218, in_port=84 actions=load:0x5->NXM_NX_REG4[[]],load:0x6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,CONTROLLER:65535,resubmit(85,6)
1534  cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1535  cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1536  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
1537  cookie=0xd, n_packets=3, n_bytes=180, arp,dl_src=80:88:88:88:88:88 actions=load:0x2->NXM_OF_ARP_OP[[]],CONTROLLER:65535,load:0xc0a88001->NXM_OF_ARP_SPA[[]],CONTROLLER:65535,load:0x404444444441->NXM_NX_ARP_THA[[]],load:0x1010101->NXM_OF_ARP_SPA[[]],load:0x2020202->NXM_OF_ARP_TPA[[]],CONTROLLER:65535
1538  n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1539 NXST_FLOW reply:
1540 ])
1541
1542 OVS_VSWITCHD_STOP
1543 AT_CLEANUP
1544
1545 AT_SETUP([ofproto-dpif - MPLS handling])
1546 OVS_VSWITCHD_START([dnl
1547    add-port br0 p1 -- set Interface p1 type=dummy
1548 ])
1549 on_exit 'kill `cat ovs-ofctl.pid`'
1550
1551 AT_CAPTURE_FILE([ofctl_monitor.log])
1552 AT_DATA([flows.txt], [dnl
1553 cookie=0xa dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
1554 cookie=0xa dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,controller
1555 cookie=0xa dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
1556 cookie=0xa dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
1557 cookie=0xa dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,controller
1558 cookie=0xa dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),controller
1559 cookie=0xa dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),controller
1560 cookie=0xa dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,controller
1561 cookie=0xa mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:10->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1562 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1563 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1564 cookie=0xc dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:1000->OXM_OF_MPLS_LABEL[[]],load:7->OXM_OF_MPLS_TC[[]],controller
1565
1566 cookie=0xd dl_src=60:66:66:66:00:01 actions=pop_mpls:0x0800,dec_ttl,controller
1567 cookie=0xd dl_src=60:66:66:66:00:02 actions=pop_mpls:0x0800,load:0xa000001->OXM_OF_IPV4_DST[[]],controller
1568 cookie=0xd dl_src=60:66:66:66:00:03 actions=pop_mpls:0x0800,move:OXM_OF_IPV4_DST[[]]->OXM_OF_IPV4_SRC[[]],controller
1569 cookie=0xd dl_src=60:66:66:66:00:04 actions=pop_mpls:0x0800,push:OXM_OF_IPV4_DST[[]],pop:OXM_OF_IPV4_SRC[[]],controller
1570 cookie=0xd dl_src=60:66:66:66:00:05 actions=pop_mpls:0x0800,multipath(eth_src,50,modulo_n,256,0,OXM_OF_IPV4_SRC[[0..7]]),controller
1571 cookie=0xd dl_src=60:66:66:66:00:06 actions=pop_mpls:0x0800,bundle_load(eth_src,50,hrw,ofport,OXM_OF_IPV4_SRC[[0..15]],slaves:1,2),controller
1572 cookie=0xd dl_src=60:66:66:66:00:07 actions=pop_mpls:0x0800,learn(table=1,hard_timeout=60,eth_type=0x800,nw_proto=6,OXM_OF_IPV4_SRC[[]]=OXM_OF_IPV4_DST[[]]),controller
1573
1574 cookie=0xd dl_src=60:66:66:66:00:08 actions=pop_mpls:0x0806,resubmit(1,1)
1575 cookie=0xd table=1 arp actions=controller
1576
1577 cookie=0xdeadbeef table=2 dl_src=60:66:66:66:00:09 actions=pop_mpls:0x0800,mod_nw_tos:48
1578 cookie=0xd dl_src=60:66:66:66:00:09 actions=resubmit(,2),controller
1579 cookie=0xd dl_src=60:66:66:66:00:0a actions=pop_mpls:0x0800,mod_nw_dst:10.0.0.1,controller
1580 cookie=0xd dl_src=60:66:66:66:00:0b actions=pop_mpls:0x0800,mod_nw_src:10.0.0.1,controller
1581
1582 cookie=0xd dl_src=60:66:66:66:01:00 actions=pop_mpls:0x8848,controller
1583 cookie=0xd dl_src=60:66:66:66:01:01 actions=pop_mpls:0x8847,dec_mpls_ttl,controller
1584 cookie=0xd dl_src=60:66:66:66:01:02 actions=pop_mpls:0x8848,load:3->OXM_OF_MPLS_TC[[]],controller
1585
1586 cookie=0xd dl_src=60:66:66:66:02:00 actions=pop_mpls:0x8847,pop_mpls:0x0800,controller
1587 cookie=0xe dl_src=60:66:66:66:02:01 actions=pop_mpls:0x8848,pop_mpls:0x0800,dec_ttl,controller
1588 cookie=0xe dl_src=60:66:66:66:02:10 actions=pop_mpls:0x8847,dec_mpls_ttl,pop_mpls:0x0800,dec_ttl,controller
1589
1590 cookie=0xe dl_src=60:66:66:66:03:00 actions=pop_mpls:0x8848,pop_mpls:0x8848,controller
1591 cookie=0xe dl_src=60:66:66:66:03:01 actions=pop_mpls:0x8847,pop_mpls:0x8847,dec_mpls_ttl,controller
1592 cookie=0xe dl_src=60:66:66:66:03:10 actions=pop_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8848,dec_mpls_ttl,controller
1593
1594 cookie=0xf dl_src=60:66:66:66:04:00 actions=pop_mpls:0x0800,push_mpls:0x8847,controller
1595 cookie=0xf dl_src=60:66:66:66:04:01 actions=pop_mpls:0x0800,push_mpls:0x8848,dec_mpls_ttl,controller
1596 cookie=0xf dl_src=60:66:66:66:04:10 actions=pop_mpls:0x0800,dec_ttl,push_mpls:0x8848,dec_mpls_ttl,controller
1597
1598 cookie=0x5 dl_src=60:66:66:66:05:00 actions=push_mpls:0x8848,pop_mpls:0x8847,controller
1599 cookie=0x5 dl_src=60:66:66:66:05:01 actions=push_mpls:0x8847,pop_mpls:0x8848,dec_mpls_ttl,controller
1600 cookie=0x5 dl_src=60:66:66:66:05:10 actions=push_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8847,dec_mpls_ttl,controller
1601 ])
1602 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1603
1604 dnl Modified MPLS controller action.
1605 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1606
1607 for i in 1 2 3; do
1608     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=17,tos=0,ttl=64,frag=no),udp(src=7777,dst=80)'
1609 done
1610 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1611 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1612
1613 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1614 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1615 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1616 dnl
1617 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1618 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1619 dnl
1620 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1621 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1622 ])
1623
1624 dnl Modified MPLS controller action.
1625 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1626
1627 for i in 1 2 3; do
1628     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=41:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1629 done
1630 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1631 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1632
1633 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1634 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1635 ip,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1636 dnl
1637 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1638 ip,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1639 dnl
1640 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1641 ip,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1642 ])
1643
1644 dnl Modified MPLS controller action.
1645 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1646
1647 dnl in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=3,ttl=64,bos=1)
1648
1649 for i in 1 2 3; do
1650     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:43,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'
1651 done
1652 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1653 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1654
1655 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1656 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1657 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1658 dnl
1659 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1660 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1661 dnl
1662 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1663 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1664 ])
1665
1666 dnl Modified MPLS controller action.
1667 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1668
1669 for i in 1 2 3; do
1670     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:44,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=99,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no))'
1671 done
1672 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1673 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1674
1675 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1676 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1677 mpls,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1678 dnl
1679 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1680 mpls,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1681 dnl
1682 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1683 mpls,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1684 ])
1685
1686 dnl Modified MPLS controller action.
1687 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1688
1689 for i in 1 2 3; do
1690     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:45,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1691 done
1692 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1693 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1694
1695 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1696 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1697 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1698 dnl
1699 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1700 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1701 dnl
1702 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1703 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1704 ])
1705
1706 dnl Modified MPLS controller action.
1707 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1708
1709 for i in 1 2 3; do
1710     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:46,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1711 done
1712 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1713 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1714
1715 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1716 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1717 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1718 dnl
1719 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1720 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1721 dnl
1722 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1723 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1724 ])
1725
1726 dnl Modified MPLS controller action.
1727 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1728
1729 for i in 1 2 3; do
1730     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:47,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1731 done
1732 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1733 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1734
1735 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1736 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1737 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1738 dnl
1739 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1740 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1741 dnl
1742 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1743 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1744 ])
1745
1746 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1747
1748 dnl Modified MPLS controller action.
1749 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1750
1751 for i in 1 2 3; do
1752     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:49,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=3,ttl=64,bos=1)'
1753 done
1754 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1755 ovs-appctl -t ovs-ofctl exit
1756
1757 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1758 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1759 mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:44:49,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=42816
1760 dnl
1761 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1762 mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:44:49,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=42816
1763 dnl
1764 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1765 mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:44:49,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=42816
1766 ])
1767
1768 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1769
1770 dnl Modified MPLS controller action.
1771 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1772
1773 for i in 1 2 3; do
1774     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:48,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1775 done
1776 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1777 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1778
1779 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1780 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1781 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1782 dnl
1783 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1784 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1785 dnl
1786 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1787 mpls,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1788 ])
1789
1790 dnl Modified MPLS actions.
1791 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1792
1793 for i in 1 2 3; do
1794     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:55:55:55:55:55,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=100,tc=7,ttl=64,bos=1)'
1795 done
1796 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1797 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1798
1799 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1800 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1801 mpls,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1802 dnl
1803 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1804 mpls,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1805 dnl
1806 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1807 mpls,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1808 ])
1809
1810 dnl Modified MPLS ipv6 controller action.
1811 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1812
1813 for i in 1 2 3; do
1814     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=70:77:77:77:77:77,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
1815 done
1816 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1817 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1818
1819 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1820 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1821 mplsm,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1822 dnl
1823 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1824 mplsm,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1825 dnl
1826 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1827 mplsm,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1828 ])
1829
1830
1831 dnl Modified MPLS pop action.
1832 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1833 dnl 60:66:66:66:66:66 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
1834 dnl             (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1835
1836 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1837
1838 for i in 1 2 3; do
1839     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 66 66 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
1840 done
1841 #for i in 2 3; do
1842 #    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=60:66:66:66:66:66,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=3,ttl=100,bos=1)'
1843 #done
1844 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1845 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1846
1847 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1848 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1849 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1850 dnl
1851 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1852 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1853 dnl
1854 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1855 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1856 ])
1857
1858 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1859
1860 dnl Modified MPLS pop action.
1861 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1862 dnl 60:66:66:66:00:01 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1863 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1864 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1865 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1866
1867 for i in 1 2 3; do
1868     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 01 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
1869 done
1870 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1871 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1872
1873 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
1874 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1875 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1876 dnl
1877 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1878 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1879 dnl
1880 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1881 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1882 ])
1883
1884 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1885
1886 dnl Modified MPLS pop action.
1887 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1888 dnl 60:66:66:66:00:02 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1889 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1890 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1891 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1892
1893 for i in 1 2 3; do
1894     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 02 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
1895 done
1896 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1897 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1898
1899 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
1900 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1901 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:02,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
1902 dnl
1903 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1904 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:02,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
1905 dnl
1906 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1907 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:02,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
1908 ])
1909
1910 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1911
1912 dnl Modified MPLS pop action.
1913 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1914 dnl 60:66:66:66:00:03 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1915 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1916 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1917 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1918
1919 for i in 1 2 3; do
1920     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 03 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
1921 done
1922 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1923 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1924
1925 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
1926 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1927 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:03,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1928 dnl
1929 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1930 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:03,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1931 dnl
1932 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1933 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:03,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1934 ])
1935
1936 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1937
1938 dnl Modified MPLS pop action.
1939 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1940 dnl 60:66:66:66:00:04 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1941 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1942 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1943 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1944
1945 for i in 1 2 3; do
1946     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 04 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
1947 done
1948 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1949 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1950
1951 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
1952 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1953 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:04,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1954 dnl
1955 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1956 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:04,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1957 dnl
1958 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1959 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:04,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1960 ])
1961
1962 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1963
1964 dnl Modified MPLS pop action.
1965 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1966 dnl 60:66:66:66:00:05 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1967 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1968 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1969 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1970
1971 for i in 1 2 3; do
1972     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 05 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
1973 done
1974 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1975 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1976
1977 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
1978 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1979 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.106,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:76db
1980 dnl
1981 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1982 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.106,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:76db
1983 dnl
1984 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1985 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.106,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:76db
1986 ])
1987
1988 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1989
1990 dnl Modified MPLS pop action.
1991 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1992 dnl 60:66:66:66:00:06 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1993 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1994 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1995 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1996
1997 for i in 1 2 3; do
1998     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 06 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
1999 done
2000 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2001 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2002
2003 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2004 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2005 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:06,dl_dst=50:54:00:00:00:07,nw_src=192.168.255.255,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
2006 dnl
2007 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2008 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:06,dl_dst=50:54:00:00:00:07,nw_src=192.168.255.255,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
2009 dnl
2010 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2011 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:06,dl_dst=50:54:00:00:00:07,nw_src=192.168.255.255,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
2012 ])
2013
2014 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2015
2016 dnl Modified MPLS pop action.
2017 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2018 dnl 60:66:66:66:00:07 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2019 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2020 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2021 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2022
2023 for i in 1 2 3; do
2024     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 07 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2025 done
2026 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2027 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2028
2029 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2030 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2031 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:07,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2032 dnl
2033 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2034 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:07,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2035 dnl
2036 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2037 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:07,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2038 ])
2039
2040 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2041
2042 dnl Modified MPLS pop action.
2043 dnl The input is an ARP frame with a single MPLS label stack entry which tcpdump -vve shows as:
2044 dnl 60:66:66:66:00:08 > ff:ff:ff:ff:ff:ff, ethertype MPLS unicast (0x8847), length 46: MPLS (label 20, exp 0, [S], ttl 32)
2045 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2046
2047 for i in 1 2 3; do
2048     ovs-appctl netdev-dummy/receive p1 'ff ff ff ff ff ff 60 66 66 66 00 08 88 47 00 01 41 20 00 01 08 00 06 04 00 02 60 66 66 66 00 08 c0 a8 00 01 ff ff ff ff ff ff ff ff ff ff'
2049 done
2050 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2051 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2052
2053 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2054 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
2055 arp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=255.255.255.255,arp_op=2,arp_sha=60:66:66:66:00:08,arp_tha=ff:ff:ff:ff:ff:ff
2056 dnl
2057 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
2058 arp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=255.255.255.255,arp_op=2,arp_sha=60:66:66:66:00:08,arp_tha=ff:ff:ff:ff:ff:ff
2059 dnl
2060 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
2061 arp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=255.255.255.255,arp_op=2,arp_sha=60:66:66:66:00:08,arp_tha=ff:ff:ff:ff:ff:ff
2062 ])
2063
2064 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2065
2066 dnl Modified MPLS pop action.
2067 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2068 dnl 60:66:66:66:00:09 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2069 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2070 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2071 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2072
2073 for i in 1 2 3; do
2074     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 09 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2075 done
2076 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2077 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2078
2079 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2080 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2081 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:09,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=48,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2082 dnl
2083 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2084 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:09,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=48,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2085 dnl
2086 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2087 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:09,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=48,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2088 ])
2089
2090 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2091
2092 dnl Modified MPLS pop action.
2093 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2094 dnl 60:66:66:66:00:0a > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2095 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2096 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2097 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2098
2099 for i in 1 2 3; do
2100     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 0a 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2101 done
2102 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2103 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2104
2105 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2106 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2107 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0a,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
2108 dnl
2109 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2110 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0a,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
2111 dnl
2112 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2113 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0a,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
2114 ])
2115
2116 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2117
2118 dnl Modified MPLS pop action.
2119 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2120 dnl 60:66:66:66:00:0b > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2121 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2122 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2123 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2124
2125 for i in 1 2 3; do
2126     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 0b 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2127 done
2128 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2129 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2130
2131 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2132 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2133 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0b,dl_dst=50:54:00:00:00:07,nw_src=10.0.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2ded
2134 dnl
2135 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2136 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0b,dl_dst=50:54:00:00:00:07,nw_src=10.0.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2ded
2137 dnl
2138 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2139 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0b,dl_dst=50:54:00:00:00:07,nw_src=10.0.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2ded
2140 ])
2141
2142 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2143
2144 dnl Modified MPLS pop action.
2145 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2146 dnl 60:66:66:66:01:00 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2147 dnl             (label 20, exp 0, [S], ttl 31)
2148 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2149 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2150 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2151
2152 for i in 1 2 3; do
2153     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 01 00 88 48 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2154 done
2155 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2156 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2157
2158 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2159 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2160 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2161 dnl
2162 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2163 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2164 dnl
2165 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2166 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2167 ])
2168
2169 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2170
2171 dnl Modified MPLS pop action.
2172 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2173 dnl 60:66:66:66:01:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2174 dnl             (label 20, exp 0, [S], ttl 31)
2175 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2176 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2177 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2178
2179 for i in 1 2 3; do
2180     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 01 01 88 47 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2181 done
2182 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2183 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2184
2185 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2186 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2187 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2188 dnl
2189 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2190 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2191 dnl
2192 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2193 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2194 ])
2195
2196 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2197
2198 dnl Modified MPLS pop action.
2199 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2200 dnl 60:66:66:66:01:02 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2201 dnl             (label 20, exp 0, [S], ttl 31)
2202 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2203 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2204 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2205
2206 for i in 1 2 3; do
2207     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 01 02 88 48 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2208 done
2209 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2210 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2211
2212 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2213 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2214 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:02,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=3,mpls_ttl=31,mpls_bos=1
2215 dnl
2216 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2217 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:02,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=3,mpls_ttl=31,mpls_bos=1
2218 dnl
2219 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2220 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:02,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=3,mpls_ttl=31,mpls_bos=1
2221 ])
2222
2223 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2224
2225 dnl Modified MPLS pop action.
2226 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2227 dnl 60:66:66:66:02:00 > 50:54:00:00:02:00, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2228 dnl             (label 20, exp 0, [S], ttl 31)
2229 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2230 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2231 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2232
2233 for i in 1 2 3; do
2234     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 02 00 88 47 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2235 done
2236 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2237 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2238
2239 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2240 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2241 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2242 dnl
2243 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2244 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2245 dnl
2246 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2247 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2248 ])
2249
2250 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2251
2252 dnl Modified MPLS pop action.
2253 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2254 dnl 60:66:66:66:02:01 > 50:54:00:00:02:01, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2255 dnl             (label 20, exp 0, [S], ttl 31)
2256 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2257 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2258 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2259
2260 for i in 1 2 3; do
2261     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 02 01 88 48 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2262 done
2263
2264 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2265 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2266
2267 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2268 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2269 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2270 dnl
2271 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2272 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2273 dnl
2274 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2275 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:01,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2276 ])
2277
2278 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2279
2280 dnl Modified MPLS pop action.
2281 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2282 dnl 60:66:66:66:02:10 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2283 dnl             (label 20, exp 0, [S], ttl 31)
2284 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2285 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2286 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2287
2288 for i in 1 2 3; do
2289     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 02 10 88 47 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2290 done
2291 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2292 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2293
2294 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2295 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2296 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:10,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2297 dnl
2298 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2299 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:10,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2300 dnl
2301 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2302 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:10,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2303 ])
2304
2305 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2306
2307 dnl Modified MPLS pop action.
2308 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2309 dnl 60:66:66:66:03:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2310 dnl             (label 20, exp 0, ttl 31)
2311 dnl             (label 20, exp 0, [S], ttl 30)
2312 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2313 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2314 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2315
2316 for i in 1 2 3; do
2317     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 03 00 88 47 00 01 40 20 00 01 40 1f 00 01 41 1e 45 00 00 2c 00 00 00 00 ff 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2318 done
2319 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2320 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2321
2322 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2323 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2324 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2325 dnl
2326 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2327 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2328 dnl
2329 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2330 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
2331 ])
2332
2333 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2334
2335 dnl Modified MPLS pop action.
2336 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2337 dnl 60:66:66:66:03:01 > 50:54:00:00:00:00, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2338 dnl             (label 20, exp 0, ttl 31)
2339 dnl             (label 20, exp 0, [S], ttl 30)
2340 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2341 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2342 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2343
2344 for i in 1 2 3; do
2345     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 03 01 88 48 00 01 40 20 00 01 40 1f 00 01 41 1e 45 00 00 2c 00 00 00 00 ff 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2346 done
2347 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2348 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2349
2350 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2351 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2352 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2353 dnl
2354 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2355 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2356 dnl
2357 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2358 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2359 ])
2360
2361 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2362
2363 dnl Modified MPLS pop action.
2364 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2365 dnl 60:66:66:66:03:10 > 50:54:00:00:00:00, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2366 dnl             (label 20, exp 0, ttl 31)
2367 dnl             (label 20, exp 0, [S], ttl 30)
2368 dnl             (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2369 dnl        192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2370 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2371
2372 for i in 1 2 3; do
2373     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 03 10 88 47 00 01 40 20 00 01 40 1f 00 01 41 1e 45 00 00 2c 00 00 00 00 ff 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2374 done
2375 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2376 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2377
2378 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2379 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2380 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2381 dnl
2382 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2383 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2384 dnl
2385 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2386 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
2387 ])
2388
2389 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2390
2391 dnl Modified MPLS pop action.
2392 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2393 dnl 60:66:66:66:04:00 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2394 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2395 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2396 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2397
2398 for i in 1 2 3; do
2399     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 04 00 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2400 done
2401 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2402 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2403
2404 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2405 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2406 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:04:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=255,mpls_bos=1
2407 dnl
2408 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2409 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:04:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=255,mpls_bos=1
2410 dnl
2411 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2412 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:04:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=255,mpls_bos=1
2413 ])
2414
2415 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2416
2417 dnl Modified MPLS pop action.
2418 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2419 dnl 60:66:66:66:04:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2420 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2421 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2422 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2423
2424 for i in 1 2 3; do
2425     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 04 01 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2426 done
2427 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2428 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2429
2430 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2431 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2432 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:01,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=254,mpls_bos=1
2433 dnl
2434 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2435 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:01,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=254,mpls_bos=1
2436 dnl
2437 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2438 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:01,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=254,mpls_bos=1
2439 ])
2440
2441 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2442
2443 dnl Modified MPLS pop action.
2444 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2445 dnl 60:66:66:66:04:10 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2446 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2447 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2448 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2449
2450 for i in 1 2 3; do
2451     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 04 10 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2452 done
2453 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2454 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2455
2456 AT_CHECK([STRIP_METADATA  ofctl_monitor.log], [0], [dnl
2457 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2458 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:10,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=253,mpls_bos=1
2459 dnl
2460 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2461 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:10,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=253,mpls_bos=1
2462 dnl
2463 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2464 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:10,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=253,mpls_bos=1
2465 ])
2466
2467 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2468
2469 dnl Modified MPLS pop action.
2470 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2471 dnl 60:66:66:66:05:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2472 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2473 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2474 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2475
2476 for i in 1 2 3; do
2477     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 05 00 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2478 done
2479
2480 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2481 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2482
2483 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2484 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2485 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=1
2486 dnl
2487 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2488 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=1
2489 dnl
2490 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2491 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=1
2492 ])
2493
2494 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2495
2496 dnl Modified MPLS pop action.
2497 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2498 dnl 60:66:66:66:05:01 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2499 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2500 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2501 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2502
2503 for i in 1 2 3; do
2504     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 05 01 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2505 done
2506 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2507 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2508
2509 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2510 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2511 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2512 dnl
2513 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2514 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2515 dnl
2516 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2517 mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2518 ])
2519
2520 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2521
2522 dnl Modified MPLS pop action.
2523 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2524 dnl 60:66:66:66:05:10 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2525 dnl             (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2526 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2527 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2528
2529 for i in 1 2 3; do
2530     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 05 10 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2531 done
2532
2533 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2534 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2535
2536 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2537 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2538 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2539 dnl
2540 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2541 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2542 dnl
2543 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2544 mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
2545 ])
2546
2547 AT_CHECK([ovs-appctl revalidator/purge], [0])
2548 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
2549  cookie=0x5, n_packets=3, n_bytes=186, dl_src=60:66:66:66:05:00 actions=push_mpls:0x8848,pop_mpls:0x8847,CONTROLLER:65535
2550  cookie=0x5, n_packets=3, n_bytes=186, dl_src=60:66:66:66:05:01 actions=push_mpls:0x8847,pop_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2551  cookie=0x5, n_packets=3, n_bytes=186, dl_src=60:66:66:66:05:10 actions=push_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8847,dec_mpls_ttl,CONTROLLER:65535
2552  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2553  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2554  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2555  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,CONTROLLER:65535
2556  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),CONTROLLER:65535
2557  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),CONTROLLER:65535
2558  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,CONTROLLER:65535
2559  cookie=0xa, n_packets=3, n_bytes=180, dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,CONTROLLER:65535
2560  cookie=0xa, n_packets=3, n_bytes=180, mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2561  cookie=0xb, n_packets=3, n_bytes=180, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2562  cookie=0xc, n_packets=3, n_bytes=180, dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:0x3e8->OXM_OF_MPLS_LABEL[[]],load:0x7->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2563  cookie=0xd, n_packets=3, n_bytes=180, dl_src=60:66:66:66:00:08 actions=pop_mpls:0x0806,resubmit(1,1)
2564  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:01 actions=pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
2565  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:02 actions=pop_mpls:0x0800,load:0xa000001->NXM_OF_IP_DST[[]],CONTROLLER:65535
2566  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:03 actions=pop_mpls:0x0800,move:NXM_OF_IP_DST[[]]->NXM_OF_IP_SRC[[]],CONTROLLER:65535
2567  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:04 actions=pop_mpls:0x0800,push:NXM_OF_IP_DST[[]],pop:NXM_OF_IP_SRC[[]],CONTROLLER:65535
2568  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:05 actions=pop_mpls:0x0800,multipath(eth_src,50,modulo_n,256,0,NXM_OF_IP_SRC[[0..7]]),CONTROLLER:65535
2569  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:06 actions=pop_mpls:0x0800,bundle_load(eth_src,50,hrw,ofport,NXM_OF_IP_SRC[[0..15]],slaves:1,2),CONTROLLER:65535
2570  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:07 actions=pop_mpls:0x0800,learn(table=1,hard_timeout=60,eth_type=0x800,nw_proto=6,NXM_OF_IP_SRC[[]]=NXM_OF_IP_DST[[]]),CONTROLLER:65535
2571  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:09 actions=resubmit(,2),CONTROLLER:65535
2572  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:0a actions=pop_mpls:0x0800,mod_nw_dst:10.0.0.1,CONTROLLER:65535
2573  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:0b actions=pop_mpls:0x0800,mod_nw_src:10.0.0.1,CONTROLLER:65535
2574  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
2575  cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:00 actions=pop_mpls:0x8848,CONTROLLER:65535
2576  cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:01 actions=pop_mpls:0x8847,dec_mpls_ttl,CONTROLLER:65535
2577  cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:02 actions=pop_mpls:0x8848,load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2578  cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:02:00 actions=pop_mpls:0x8847,pop_mpls:0x0800,CONTROLLER:65535
2579  cookie=0xd, table=1, n_packets=3, n_bytes=168, arp actions=CONTROLLER:65535
2580  cookie=0xdeadbeef, table=2, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:09 actions=pop_mpls:0x0800,mod_nw_tos:48
2581  cookie=0xe, n_packets=3, n_bytes=198, dl_src=60:66:66:66:02:01 actions=pop_mpls:0x8848,pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
2582  cookie=0xe, n_packets=3, n_bytes=198, dl_src=60:66:66:66:02:10 actions=pop_mpls:0x8847,dec_mpls_ttl,pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
2583  cookie=0xe, n_packets=3, n_bytes=210, dl_src=60:66:66:66:03:00 actions=pop_mpls:0x8848,pop_mpls:0x8848,CONTROLLER:65535
2584  cookie=0xe, n_packets=3, n_bytes=210, dl_src=60:66:66:66:03:01 actions=pop_mpls:0x8847,pop_mpls:0x8847,dec_mpls_ttl,CONTROLLER:65535
2585  cookie=0xe, n_packets=3, n_bytes=210, dl_src=60:66:66:66:03:10 actions=pop_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2586  cookie=0xf, n_packets=3, n_bytes=186, dl_src=60:66:66:66:04:00 actions=pop_mpls:0x0800,push_mpls:0x8847,CONTROLLER:65535
2587  cookie=0xf, n_packets=3, n_bytes=186, dl_src=60:66:66:66:04:01 actions=pop_mpls:0x0800,push_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2588  cookie=0xf, n_packets=3, n_bytes=186, dl_src=60:66:66:66:04:10 actions=pop_mpls:0x0800,dec_ttl,push_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2589 NXST_FLOW reply:
2590 ])
2591
2592 OVS_VSWITCHD_STOP
2593 AT_CLEANUP
2594
2595 AT_SETUP([ofproto-dpif - MPLS handling with goto_table])
2596 OVS_VSWITCHD_START([dnl
2597    add-port br0 p1 -- set Interface p1 type=dummy
2598 ])
2599 on_exit 'kill `cat ovs-ofctl.pid`'
2600
2601 AT_CAPTURE_FILE([ofctl_monitor.log])
2602 AT_DATA([flows.txt], [dnl
2603 table=0 mplsm actions=pop_mpls:0x800,goto_table(1)
2604 table=1 ip,ip_dscp=8 actions=controller
2605 ])
2606 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2607
2608
2609 dnl Modified MPLS pop action.
2610 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2611 dnl 60:66:66:66:00:08 > 50:54:00:00:00:01, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2612 dnl             (tos 0x20, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2613 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2614 AT_CHECK([ovs-ofctl -O OpenFlow12 monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2615
2616 for i in 1 2 3; do
2617     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 01 60 66 66 66 00 08 88 48 00 01 41 20 45 20 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2618 done
2619 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2620 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2621
2622 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2623 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2624 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2625 dnl
2626 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2627 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2628 dnl
2629 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2630 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2631 ])
2632
2633 AT_CHECK([ovs-appctl revalidator/purge], [0])
2634 AT_CHECK([ovs-ofctl -O OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2635  n_packets=3, n_bytes=186, mplsm actions=pop_mpls:0x0800,goto_table:1
2636  table=1, n_packets=3, n_bytes=174, ip,nw_tos=32 actions=CONTROLLER:65535
2637 OFPST_FLOW reply (OF1.2):
2638 ])
2639
2640 OVS_VSWITCHD_STOP
2641 AT_CLEANUP
2642
2643 AT_SETUP([ofproto-dpif - MPLS handling with write_actions])
2644 OVS_VSWITCHD_START([dnl
2645    add-port br0 p1 -- set Interface p1 type=dummy
2646 ])
2647 on_exit 'kill `cat ovs-ofctl.pid`'
2648
2649 dnl N.B: The first (and only) action that accesses L3 data after the
2650 dnl pop_mpls action is present in write_actions. This exercises recirculation
2651 dnl triggered in write_actions due to a previous action not in write actions.
2652 AT_CAPTURE_FILE([ofctl_monitor.log])
2653 AT_DATA([flows.txt], [dnl
2654 mplsm actions=pop_mpls:0x800,write_actions(dec_ttl,controller)
2655 ])
2656 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2657
2658 dnl Modified MPLS pop action.
2659 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2660 dnl 60:66:66:66:00:08 > 50:54:00:00:00:01, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2661 dnl             (tos 0x20, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2662 dnl         192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2663 AT_CHECK([ovs-ofctl -O OpenFlow12 monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2664
2665 for i in 1 2 3; do
2666     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 01 60 66 66 66 00 08 88 48 00 01 41 20 45 20 00 2c 00 00 00 00 ff 06 3a 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
2667 done
2668 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2669 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2670
2671 AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2672 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2673 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2674 dnl
2675 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2676 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2677 dnl
2678 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2679 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
2680 ])
2681
2682 AT_CHECK([ovs-appctl revalidator/purge], [0])
2683 AT_CHECK([ovs-ofctl -O OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2684  n_packets=3, n_bytes=186, mplsm actions=pop_mpls:0x0800,write_actions(dec_ttl,CONTROLLER:65535)
2685 OFPST_FLOW reply (OF1.2):
2686 ])
2687
2688 OVS_VSWITCHD_STOP
2689 AT_CLEANUP
2690
2691 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
2692 OVS_VSWITCHD_START([dnl
2693    add-port br0 p1 -- set Interface p1 type=dummy
2694 ])
2695 on_exit 'kill `cat ovs-ofctl.pid`'
2696
2697 AT_CAPTURE_FILE([ofctl_monitor.log])
2698 # A table-miss flow has priority 0 and no match
2699 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2700
2701 dnl Singleton controller action.
2702 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2703
2704 for i in 1 2 3 ; do
2705     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
2706 done
2707 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2708 ovs-appctl -t ovs-ofctl exit
2709
2710 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2711 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2712 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2713 dnl
2714 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2715 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2716 dnl
2717 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2718 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2719 ])
2720
2721 AT_CHECK([ovs-appctl revalidator/purge], [0])
2722 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2723  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2724 NXST_FLOW reply:
2725 ])
2726
2727 OVS_VSWITCHD_STOP
2728 AT_CLEANUP
2729
2730
2731 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
2732 OVS_VSWITCHD_START([dnl
2733    add-port br0 p1 -- set Interface p1 type=dummy
2734 ])
2735 on_exit 'kill `cat ovs-ofctl.pid`'
2736
2737 AT_CAPTURE_FILE([ofctl_monitor.log])
2738 # A table-miss flow has priority 0 and no match
2739 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2740
2741 dnl Singleton controller action.
2742 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2743
2744 for i in 1 2 3 ; do
2745     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
2746 done
2747 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2748 ovs-appctl -t ovs-ofctl exit
2749
2750 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2751
2752 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2753 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2754 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2755 dnl
2756 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2757 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2758 dnl
2759 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2760 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2761 ])
2762
2763 AT_CHECK([ovs-appctl revalidator/purge], [0])
2764 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2765  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2766 OFPST_FLOW reply (OF1.3):
2767 ])
2768
2769 OVS_VSWITCHD_STOP
2770 AT_CLEANUP
2771
2772 AT_SETUP([ofproto-dpif - table-miss flow with async config (OpenFlow 1.3)])
2773 OVS_VSWITCHD_START([dnl
2774    add-port br0 p1 -- set Interface p1 type=dummy
2775 ])
2776 on_exit 'kill `cat ovs-ofctl.pid`'
2777
2778 ovs-appctl time/stop
2779
2780 AT_CAPTURE_FILE([ofctl_monitor.log])
2781 # A table-miss flow has priority 0 and no match
2782 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2783
2784 dnl Singleton controller action.
2785 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2786
2787 # Become slave (OF 1.3), which should disable everything except port status.
2788 ovs-appctl -t ovs-ofctl ofctl/send 041800180000000200000003000000000000000000000001
2789
2790 # Ensure that ovs-vswitchd gets a chance to reply before sending another command.
2791 ovs-appctl time/warp 500 100
2792
2793 # Use OF 1.3 OFPT_SET_ASYNC to enable OFPR_NO_MATCH for slave only.
2794 ovs-appctl -t ovs-ofctl ofctl/send 041c002000000002000000000000000100000000000000000000000000000000
2795
2796 ovs-appctl time/warp 500 100
2797 for i in 1 2 3 ; do
2798     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
2799 done
2800 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2801 ovs-appctl -t ovs-ofctl exit
2802
2803 AT_CHECK([ovs-appctl revalidator/purge], [0])
2804 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2805 send: OFPT_ROLE_REQUEST (OF1.3) (xid=0x2): role=slave generation_id=1
2806 OFPT_ROLE_REPLY (OF1.3) (xid=0x2): role=slave generation_id=1
2807 dnl
2808 send: OFPT_SET_ASYNC (OF1.3) (xid=0x2):
2809  master:
2810        PACKET_IN: (off)
2811      PORT_STATUS: (off)
2812     FLOW_REMOVED: (off)
2813      ROLE_STATUS: (off)
2814     TABLE_STATUS: (off)
2815   REQUESTFORWARD: (off)
2816
2817  slave:
2818        PACKET_IN: no_match
2819      PORT_STATUS: (off)
2820     FLOW_REMOVED: (off)
2821      ROLE_STATUS: (off)
2822     TABLE_STATUS: (off)
2823   REQUESTFORWARD: (off)
2824 dnl
2825 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2826 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2827 dnl
2828 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2829 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
2830 dnl
2831 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2832 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
2833 ])
2834
2835 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2836
2837 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2838  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2839 OFPST_FLOW reply (OF1.3):
2840 ])
2841
2842 OVS_VSWITCHD_STOP
2843 AT_CLEANUP
2844
2845
2846 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.4)])
2847 OVS_VSWITCHD_START([dnl
2848    add-port br0 p1 -- set Interface p1 type=dummy
2849 ])
2850 on_exit 'kill `cat ovs-ofctl.pid`'
2851
2852 AT_CAPTURE_FILE([ofctl_monitor.log])
2853 # A table-miss flow has priority 0 and no match
2854 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2855
2856 dnl Singleton controller action.
2857 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2858
2859 for i in 1 2 3 ; do
2860     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)'
2861 done
2862 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2863 ovs-appctl -t ovs-ofctl exit
2864
2865 AT_CHECK([ovs-appctl revalidator/purge], [0])
2866 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2867 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2868 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2869 dnl
2870 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2871 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
2872 dnl
2873 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
2874 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
2875 ])
2876
2877 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2878
2879 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2880  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2881 OFPST_FLOW reply (OF1.4):
2882 ])
2883
2884 OVS_VSWITCHD_STOP
2885 AT_CLEANUP
2886
2887
2888 AT_SETUP([ofproto-dpif - packet-in reasons (Openflow 1.3)])
2889 OVS_VSWITCHD_START([dnl
2890    add-port br0 p1 -- set Interface p1 type=dummy
2891 ])
2892 on_exit 'kill `cat ovs-ofctl.pid`'
2893
2894 AT_CAPTURE_FILE([ofctl_monitor.log])
2895 AT_DATA([flows.txt], [dnl
2896 table=0 in_port=1 actions=write_actions(output(CONTROLLER)),goto_table(1)
2897 table=1 actions=output(CONTROLLER),goto_table(2)
2898 table=2 actions=group:1234
2899 ])
2900 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:CONTROLLER'])
2901 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flows br0 flows.txt])
2902
2903 dnl Singleton controller action.
2904 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2905
2906 for i in 1 2 3 ; do
2907     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)'
2908 done
2909 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2910 ovs-appctl -t ovs-ofctl exit
2911
2912 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2913
2914 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2915 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2916 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2917 dnl
2918 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2919 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2920 dnl
2921 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2922 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2923 dnl
2924 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2925 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2926 dnl
2927 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2928 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2929 dnl
2930 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2931 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2932 dnl
2933 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2934 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2935 dnl
2936 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2937 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
2938 dnl
2939 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2940 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
2941 ])
2942
2943 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2944
2945 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2946  n_packets=3, n_bytes=180, in_port=1 actions=write_actions(CONTROLLER:65535),goto_table:1
2947  table=1, n_packets=3, n_bytes=180, actions=CONTROLLER:65535,goto_table:2
2948  table=2, n_packets=3, n_bytes=180, actions=group:1234
2949 OFPST_FLOW reply (OF1.3):
2950 ])
2951
2952 OVS_VSWITCHD_STOP
2953 AT_CLEANUP
2954
2955
2956 AT_SETUP([ofproto-dpif - packet-in reasons (Openflow 1.4)])
2957 OVS_VSWITCHD_START([dnl
2958    add-port br0 p1 -- set Interface p1 type=dummy
2959 ])
2960 on_exit 'kill `cat ovs-ofctl.pid`'
2961
2962 AT_CAPTURE_FILE([ofctl_monitor.log])
2963 AT_DATA([flows.txt], [dnl
2964 table=0 in_port=1 actions=write_actions(output(CONTROLLER)),goto_table(1)
2965 table=1 actions=output(CONTROLLER),goto_table(2)
2966 table=2 actions=group:1234
2967 ])
2968 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:CONTROLLER'])
2969 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flows br0 flows.txt])
2970
2971 dnl Singleton controller action.
2972 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2973
2974 for i in 1 2 3 ; do
2975     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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)'
2976 done
2977 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2978 ovs-appctl -t ovs-ofctl exit
2979
2980 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2981
2982 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2983 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2984 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2985 dnl
2986 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via group) data_len=60 (unbuffered)
2987 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2988 dnl
2989 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action_set) data_len=60 (unbuffered)
2990 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2991 dnl
2992 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
2993 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2994 dnl
2995 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via group) data_len=60 (unbuffered)
2996 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
2997 dnl
2998 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action_set) data_len=60 (unbuffered)
2999 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
3000 dnl
3001 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3002 tcp,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=syn tcp_csum:0
3003 dnl
3004 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via group) data_len=60 (unbuffered)
3005 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
3006 dnl
3007 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action_set) data_len=60 (unbuffered)
3008 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
3009 ])
3010
3011 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3012
3013 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3014  n_packets=3, n_bytes=180, in_port=1 actions=write_actions(CONTROLLER:65535),goto_table:1
3015  table=1, n_packets=3, n_bytes=180, actions=CONTROLLER:65535,goto_table:2
3016  table=2, n_packets=3, n_bytes=180, actions=group:1234
3017 OFPST_FLOW reply (OF1.4):
3018 ])
3019
3020 OVS_VSWITCHD_STOP
3021 AT_CLEANUP
3022
3023
3024 AT_SETUP([ofproto-dpif - ARP modification slow-path])
3025 OVS_VSWITCHD_START
3026 ADD_OF_PORTS([br0], [1], [2])
3027
3028 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
3029 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'
3030
3031 # Input some packets that should follow the arp modification slow-path.
3032 for i in 1 2 3; do
3033     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)'
3034 done
3035 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3036
3037 # Check the packets that were output.
3038 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
3039 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
3040 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
3041 arp,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
3042 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
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.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
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=40:44:44:44:44:41
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.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
3046 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
3047 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
3048 ])
3049
3050 OVS_VSWITCHD_STOP
3051 AT_CLEANUP
3052
3053 AT_SETUP([ofproto-dpif - VLAN handling])
3054 OVS_VSWITCHD_START(
3055   [set Bridge br0 fail-mode=standalone -- \
3056    add-port br0 p1                                  trunks=10,12 -- \
3057    add-port br0 p2                           tag=10              -- \
3058    add-port br0 p3                           tag=12              \
3059                    other-config:priority-tags=true               -- \
3060    add-port br0 p4                           tag=12              -- \
3061    add-port br0 p5 vlan_mode=native-tagged   tag=10              -- \
3062    add-port br0 p6 vlan_mode=native-tagged   tag=10 trunks=10,12 -- \
3063    add-port br0 p7 vlan_mode=native-untagged tag=12              -- \
3064    add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
3065                    other-config:priority-tags=true               -- \
3066    set Interface p1 type=dummy -- \
3067    set Interface p2 type=dummy -- \
3068    set Interface p3 type=dummy -- \
3069    set Interface p4 type=dummy -- \
3070    set Interface p5 type=dummy -- \
3071    set Interface p6 type=dummy -- \
3072    set Interface p7 type=dummy -- \
3073    set Interface p8 type=dummy --])
3074
3075 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
3076 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
3077 dnl actions.
3078 for tuple in \
3079         "100 none 0 drop" \
3080         "100 0    0 drop" \
3081         "100 0    1 drop" \
3082         "100 10   0 1,5,6,7,8,pop_vlan,2" \
3083         "100 10   1 1,5,6,7,8,pop_vlan,2" \
3084         "100 11   0 5,7" \
3085         "100 11   1 5,7" \
3086         "100 12   0 1,5,6,pop_vlan,3,4,7,8" \
3087         "100 12   1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3088         "1  none 0 drop" \
3089         "1  0    0 drop" \
3090         "1  0    1 drop" \
3091         "1  10   0 5,6,7,8,100,pop_vlan,2" \
3092         "1  10   1 5,6,7,8,100,pop_vlan,2" \
3093         "1  11   0 drop" \
3094         "1  11   1 drop" \
3095         "1  12   0 5,6,100,pop_vlan,3,4,7,8" \
3096         "1  12   1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3097         "2  none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3098         "2  0    0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3099         "2  0    1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
3100         "2  10   0 drop" \
3101         "2  10   1 drop" \
3102         "2  11   0 drop" \
3103         "2  11   1 drop" \
3104         "2  12   0 drop" \
3105         "2  12   1 drop" \
3106         "3  none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3107         "3  0    0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3108         "3  0    1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
3109         "3  10   0 drop" \
3110         "3  10   1 drop" \
3111         "3  11   0 drop" \
3112         "3  11   1 drop" \
3113         "3  12   0 drop" \
3114         "3  12   1 drop" \
3115         "4  none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3116         "4  0    0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3117         "4  0    1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
3118         "4  10   0 drop" \
3119         "4  10   1 drop" \
3120         "4  11   0 drop" \
3121         "4  11   1 drop" \
3122         "4  12   0 drop" \
3123         "4  12   1 drop" \
3124         "5  none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
3125         "5  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
3126         "5  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
3127         "5  10   0 1,6,7,8,100,pop_vlan,2" \
3128         "5  10   1 1,6,7,8,100,pop_vlan,2" \
3129         "5  11   0 7,100" \
3130         "5  11   1 7,100" \
3131         "5  12   0 1,6,100,pop_vlan,3,4,7,8" \
3132         "5  12   1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3133         "6  none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
3134         "6  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
3135         "6  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
3136         "6  10   0 1,5,7,8,100,pop_vlan,2" \
3137         "6  10   1 1,5,7,8,100,pop_vlan,2" \
3138         "6  11   0 drop" \
3139         "6  11   1 drop" \
3140         "6  12   0 1,5,100,pop_vlan,3,4,7,8" \
3141         "6  12   1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3142         "7  none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3143         "7  0    0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3144         "7  0    1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
3145         "7  10   0 1,5,6,8,100,pop_vlan,2" \
3146         "7  10   1 1,5,6,8,100,pop_vlan,2" \
3147         "7  11   0 5,100" \
3148         "7  11   1 5,100" \
3149         "7  12   0 1,5,6,100,pop_vlan,3,4,8" \
3150         "7  12   1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
3151         "8  none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
3152         "8  0    0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
3153         "8  0    1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
3154         "8  10   0 1,5,6,7,100,pop_vlan,2" \
3155         "8  10   1 1,5,6,7,100,pop_vlan,2" \
3156         "8  11   0 drop" \
3157         "8  11   1 drop" \
3158         "8  12   0 1,5,6,100,pop_vlan,3,4,7" \
3159         "8  12   1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
3160 do
3161   set $tuple
3162   in_port=$1
3163   vlan=$2
3164   pcp=$3
3165   expected=$4
3166
3167   if test $vlan = none; then
3168     flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
3169   else
3170     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))"
3171   fi
3172
3173   echo "----------------------------------------------------------------------"
3174   echo "in_port=$in_port vlan=$vlan pcp=$pcp"
3175
3176   AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3177   actual=`tail -1 stdout | sed 's/Datapath actions: //'`
3178
3179   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
3180   mv stdout expout
3181   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
3182 done
3183
3184 OVS_VSWITCHD_STOP
3185 AT_CLEANUP
3186
3187 AT_SETUP([ofproto-dpif - MPLS handling])
3188 OVS_VSWITCHD_START([dnl
3189    add-port br0 p1 -- set Interface p1 type=dummy
3190 ])
3191 on_exit 'kill `cat ovs-ofctl.pid`'
3192
3193 AT_CAPTURE_FILE([ofctl_monitor.log])
3194 AT_DATA([flows.txt], [dnl
3195 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
3196 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
3197 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
3198 ])
3199 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3200
3201 dnl In this test, we push an MPLS tag to an ethernet packet.
3202 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3203
3204 for i in 1 2 3; do
3205     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)'
3206 done
3207 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3208 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3209
3210 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3211 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3212 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
3213 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3214 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3215 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3216 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
3217 dnl
3218 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3219 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
3220 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3221 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3222 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3223 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
3224 dnl
3225 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3226 mpls,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
3227 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3228 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3229 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3230 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
3231 ])
3232
3233 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3234 dnl copied exactly, except for the BOS bit.
3235 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3236
3237 for i in 1 2 3; do
3238     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)'
3239 done
3240 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3241 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3242
3243 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3244 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3245 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
3246 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3247 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3248 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3249 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3250 dnl
3251 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3252 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
3253 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3254 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3255 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3256 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3257 dnl
3258 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3259 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
3260 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3261 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3262 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3263 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3264 ])
3265
3266 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3267 dnl copied exactly, except for the BOS bit. The ethertype should be updated
3268 dnl to the MPLS ethertype of the MPLS push action which differs to that
3269 dnl of the input packet.
3270 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3271
3272 for i in 1 2 3; do
3273     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)'
3274 done
3275 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3276 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
3277
3278 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3279 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3280 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
3281 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3282 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3283 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3284 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3285 dnl
3286 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3287 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
3288 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3289 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3290 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3291 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3292 dnl
3293 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3294 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
3295 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3296 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
3297 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3298 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3299 ])
3300
3301 OVS_VSWITCHD_STOP
3302 AT_CLEANUP
3303
3304 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
3305 OVS_VSWITCHD_START([dnl
3306    add-port br0 p1 -- set Interface p1 type=dummy
3307 ])
3308 on_exit 'kill `cat ovs-ofctl.pid`'
3309
3310 AT_CAPTURE_FILE([ofctl_monitor.log])
3311 AT_DATA([flows.txt], [dnl
3312 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
3313 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
3314 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
3315 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
3316 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
3317 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
3318 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
3319 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
3320 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
3321 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
3322 ])
3323 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3324
3325 dnl Modified MPLS controller action.
3326 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3327 dnl both of these in the final flow
3328 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3329
3330 for i in 1 2 3; do
3331     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)'
3332 done
3333 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3334 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3335
3336 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3337 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3338 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
3339 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3340 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3341 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3342 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3343 00000040  00 00 00 00
3344 dnl
3345 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3346 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
3347 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3348 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3349 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3350 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3351 00000040  00 00 00 00
3352 dnl
3353 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3354 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
3355 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3356 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3357 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3358 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3359 00000040  00 00 00 00
3360 ])
3361
3362 dnl Modified MPLS controller action.
3363 dnl In this test, the input packet is vlan-tagged, which should be stripped
3364 dnl before we push the MPLS and VLAN tags.
3365 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3366
3367 for i in 1 2 3; do
3368     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))'
3369 done
3370 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3371 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3372
3373 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3374 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3375 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
3376 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3377 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3378 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3379 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3380 dnl
3381 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3382 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
3383 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3384 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3385 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3386 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3387 dnl
3388 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3389 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
3390 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3391 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3392 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3393 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3394 ])
3395
3396 dnl Modified MPLS controller action.
3397 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3398 dnl both of these in the final flow
3399 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3400
3401 for i in 1 2 3; do
3402     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)'
3403 done
3404 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3405 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3406
3407 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3408 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3409 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
3410 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3411 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3412 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3413 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3414 00000040  00 00 00 00
3415 dnl
3416 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3417 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
3418 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3419 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3420 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3421 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3422 00000040  00 00 00 00
3423 dnl
3424 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3425 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
3426 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3427 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3428 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3429 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3430 00000040  00 00 00 00
3431 ])
3432
3433 dnl Modified MPLS controller action.
3434 dnl In this test, the input packet is vlan-tagged, which should be stripped
3435 dnl before we push the MPLS and VLAN tags.
3436 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3437
3438 for i in 1 2 3; do
3439     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))'
3440 done
3441 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3442 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3443
3444 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3445 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3446 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
3447 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3448 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3449 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3450 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3451 dnl
3452 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3453 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
3454 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3455 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3456 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3457 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3458 dnl
3459 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3460 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
3461 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3462 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3463 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3464 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3465 ])
3466
3467 dnl Modified MPLS controller action.
3468 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3469 dnl actions are reordered, so we see both of these in the final flow.
3470 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3471
3472 for i in 1 2 3; do
3473     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)'
3474 done
3475 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3476 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3477
3478 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3479 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3480 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
3481 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3482 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3483 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3484 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3485 00000040  00 00 00 00
3486 dnl
3487 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3488 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
3489 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3490 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3491 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3492 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3493 00000040  00 00 00 00
3494 dnl
3495 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3496 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
3497 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3498 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3499 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3500 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3501 00000040  00 00 00 00
3502 ])
3503
3504 dnl Modified MPLS controller action.
3505 dnl In this test, the input packet is vlan-tagged, which should be stripped
3506 dnl before we push the MPLS and VLAN tags.
3507 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3508
3509 for i in 1 2 3; do
3510     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))'
3511 done
3512 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3513 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3514
3515 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3516 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3517 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
3518 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3519 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3520 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3521 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3522 dnl
3523 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3524 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
3525 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3526 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3527 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3528 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3529 dnl
3530 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3531 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
3532 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3533 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3534 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3535 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3536 ])
3537
3538 dnl Modified MPLS controller action.
3539 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3540 dnl actions are reordered, so we see both of these in the final flow.
3541 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3542
3543 for i in 1 2 3; do
3544     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)'
3545 done
3546 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3547 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3548
3549 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3550 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3551 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
3552 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3553 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3554 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3555 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3556 00000040  00 00 00 00
3557 dnl
3558 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3559 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
3560 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3561 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3562 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3563 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3564 00000040  00 00 00 00
3565 dnl
3566 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
3567 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
3568 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3569 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3570 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3571 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3572 00000040  00 00 00 00
3573 ])
3574
3575 dnl Modified MPLS controller action.
3576 dnl In this test, the input packet is vlan-tagged, which should be stripped
3577 dnl before we push the MPLS and VLAN tags.
3578 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
3579
3580 for i in 1 2 3; do
3581     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))'
3582 done
3583 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3584 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3585
3586 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3587 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3588 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
3589 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3590 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3591 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3592 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3593 dnl
3594 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3595 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
3596 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3597 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3598 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3599 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3600 dnl
3601 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3602 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
3603 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3604 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3605 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3606 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3607 ])
3608
3609 dnl Modified MPLS controller action.
3610 dnl In this test, the input packet is vlan-tagged, which should be stripped
3611 dnl before we push the MPLS and VLAN tags.
3612 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3613
3614 for i in 1 2 3; do
3615     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))'
3616 done
3617 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3618 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3619
3620 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3621 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3622 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
3623 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3624 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3625 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3626 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3627 dnl
3628 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3629 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
3630 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3631 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3632 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3633 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3634 dnl
3635 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3636 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
3637 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3638 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3639 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3640 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3641 ])
3642
3643 dnl Modified MPLS controller action.
3644 dnl In this test, the input packet is vlan-tagged, which should be modified
3645 dnl before we push MPLS and VLAN tags.
3646 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3647
3648 for i in 1 2 3; do
3649     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))'
3650 done
3651 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3652 ovs-appctl -t ovs-ofctl exit
3653
3654 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3655 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3656 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
3657 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3658 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3659 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3660 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3661 dnl
3662 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3663 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
3664 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3665 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3666 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3667 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3668 dnl
3669 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3670 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
3671 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3672 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3673 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3674 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3675 ])
3676
3677 AT_CHECK([ovs-appctl revalidator/purge], [0])
3678 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3679  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
3680  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
3681  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
3682  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
3683  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
3684  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
3685  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
3686  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
3687  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
3688  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
3689 OFPST_FLOW reply (OF1.2):
3690 ])
3691
3692 OVS_VSWITCHD_STOP
3693 AT_CLEANUP
3694
3695 AT_SETUP([ofproto-dpif - fragment handling - trace])
3696 OVS_VSWITCHD_START
3697 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3698 AT_DATA([flows.txt], [dnl
3699 priority=75 tcp ip_frag=no    tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:1
3700 priority=75 tcp ip_frag=first tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:2
3701 priority=50 tcp ip_frag=no              actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:4
3702 priority=50 tcp ip_frag=first           actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:5
3703 priority=50 tcp ip_frag=later           actions=output:6
3704 ])
3705 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
3706
3707 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"
3708 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
3709 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
3710 later_flow="$base_flow,frag=later)"
3711
3712     # mode    no  first  later
3713 for tuple in \
3714     'normal    1     5      6' \
3715     'drop      1  drop   drop' \
3716     'nx-match  1     2      6'
3717 do
3718   set $tuple
3719   mode=$1
3720   no=$2
3721   first=$3
3722   later=$4
3723
3724   AT_CHECK([ovs-ofctl set-frags br0 $mode])
3725   for type in no first later; do
3726     eval flow=\$${type}_flow exp_output=\$$type
3727     printf "\n%s\n" "----$mode $type-----"
3728     AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3729     : > expout
3730     if test $mode = drop && test $type != no; then
3731         echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
3732         echo "Datapath actions: $exp_output" >> expout
3733     elif test $type = later; then
3734         echo "Datapath actions: $exp_output" >> expout
3735     else
3736         echo "Datapath actions: set(tcp(src=80,dst=80)),$exp_output" >> expout
3737     fi
3738     AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
3739   done
3740 done
3741 OVS_VSWITCHD_STOP
3742 AT_CLEANUP
3743
3744 AT_SETUP([ofproto-dpif - fragment handling - upcall])
3745 OVS_VSWITCHD_START
3746 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3747 AT_DATA([flows.txt], [dnl
3748 priority=75 tcp ip_frag=no    tp_dst=80 actions=set_field:81->tcp_dst,output:1
3749 priority=75 tcp ip_frag=first tp_dst=80 actions=set_field:81->tcp_dst,output:2
3750 priority=50 tcp ip_frag=no              actions=set_field:81->tcp_dst,output:4
3751 priority=50 tcp ip_frag=first           actions=set_field:81->tcp_dst,output:5
3752 priority=50 tcp ip_frag=later           actions=output:6
3753 ])
3754 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
3755
3756 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"
3757 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
3758 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
3759 later_flow="$base_flow,frag=later)"
3760
3761 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
3762
3763 mode=normal
3764
3765 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3766 for type in no first later; do
3767   eval flow=\$${type}_flow
3768   printf "\n%s\n" "----$mode $type-----"
3769
3770   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3771 done
3772
3773 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
3774 flow-dump from non-dpdk interfaces:
3775 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
3776 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
3777 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
3778 ])
3779
3780 mode=drop
3781
3782 AT_CHECK([ovs-appctl revalidator/purge], [0])
3783 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3784 for type in no first later; do
3785   eval flow=\$${type}_flow
3786   printf "\n%s\n" "----$mode $type-----"
3787
3788   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3789 done
3790
3791 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
3792 flow-dump from non-dpdk interfaces:
3793 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
3794 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(frag=first), packets:0, bytes:0, used:never, actions:drop
3795 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(frag=later), packets:0, bytes:0, used:never, actions:drop
3796 ])
3797
3798 mode=nx-match
3799
3800 AT_CHECK([ovs-appctl revalidator/purge], [0])
3801 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3802 for type in no first later; do
3803   eval flow=\$${type}_flow
3804   printf "\n%s\n" "----$mode $type-----"
3805
3806   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3807 done
3808
3809 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
3810 flow-dump from non-dpdk interfaces:
3811 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
3812 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
3813 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
3814 ])
3815
3816 OVS_VSWITCHD_STOP
3817 AT_CLEANUP
3818
3819 AT_SETUP([ofproto-dpif - fragment handling - actions])
3820 OVS_VSWITCHD_START
3821 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3822
3823 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])
3824 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3825 source field tcp_dst lacks correct prerequisites
3826 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3827 ])
3828
3829 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])
3830 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3831 destination field tcp_src lacks correct prerequisites
3832 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3833 ])
3834
3835 AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=set_field:8888->udp_src,output:1"], [1], [], [stderr])
3836 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3837 set_field udp_src lacks correct prerequisities
3838 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3839 ])
3840
3841 AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=load:8888->NXM_OF_UDP_DST[[]],output:1"], [1], [], [stderr])
3842 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3843 set_field udp_dst lacks correct prerequisities
3844 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3845 ])
3846
3847 AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_src,output:1"], [1], [], [stderr])
3848 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3849 set_field sctp_src lacks correct prerequisities
3850 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3851 ])
3852
3853 AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_dst,output:1"], [1], [], [stderr])
3854 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3855 set_field sctp_dst lacks correct prerequisities
3856 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3857 ])
3858
3859 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])
3860 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3861 source field tcp_dst lacks correct prerequisites
3862 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3863 ])
3864
3865 AT_DATA([flows.txt], [dnl
3866 priority=75 tcp actions=load:42->OXM_OF_TCP_SRC[[0..7]],output:1
3867 ])
3868 AT_CHECK([ovs-ofctl -O OpenFlow12 replace-flows br0 flows.txt])
3869
3870 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
3871
3872 mode=normal
3873
3874 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3875 for frag in 4000 6000 6008 4010; do
3876   printf "\n%s\n" "----$mode $frag-----"
3877
3878   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"])
3879 done
3880
3881 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
3882 flow-dump from non-dpdk interfaces:
3883 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
3884 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
3885 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:74, used:0.001s, actions:1
3886 ])
3887
3888 AT_CHECK([ovs-appctl revalidator/purge], [0])
3889 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3890 for frag in 4000 6000 6008 4010; do
3891   printf "\n%s\n" "----$mode $frag truncated transport header -----"
3892
3893   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0018 2e24 $frag 40 06 465d ac11370d ac11370b 828b 0016"])
3894 done
3895
3896 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
3897 flow-dump from non-dpdk interfaces:
3898 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
3899 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
3900 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:60, used:0.001s, actions:1
3901 ])
3902
3903 AT_CHECK([ovs-appctl revalidator/purge], [0])
3904 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3905 for frag in 4000 6000 6001 4002; do
3906   printf "\n%s\n" "----$mode $frag missing transport header-----"
3907
3908   AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0014 2e24 $frag 40 06 465d ac11370d ac11370b"])
3909 done
3910
3911 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
3912 flow-dump from non-dpdk interfaces:
3913 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
3914 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
3915 recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:60, used:0.001s, actions:1
3916 ])
3917
3918 OVS_VSWITCHD_STOP
3919 AT_CLEANUP
3920
3921 AT_SETUP([ofproto-dpif - exit])
3922 OVS_VSWITCHD_START
3923 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
3924 AT_DATA([flows.txt], [dnl
3925 in_port=1 actions=output:10,exit,output:11
3926 in_port=2 actions=output:12,resubmit:1,output:12
3927 in_port=3 actions=output:13,resubmit:2,output:14
3928 ])
3929 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3930 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])
3931 AT_CHECK([tail -1 stdout], [0],
3932   [Datapath actions: 10
3933 ])
3934 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])
3935 AT_CHECK([tail -1 stdout], [0],
3936   [Datapath actions: 12,10
3937 ])
3938 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])
3939 AT_CHECK([tail -1 stdout], [0],
3940   [Datapath actions: 13,12,10
3941 ])
3942 OVS_VSWITCHD_STOP
3943 AT_CLEANUP
3944
3945
3946 AT_SETUP([ofproto-dpif - mirroring, select_all])
3947 OVS_VSWITCHD_START
3948 ADD_OF_PORTS([br0], 1, 2, 3)
3949 ovs-vsctl \
3950         set Bridge br0 mirrors=@m --\
3951         --id=@p3 get Port p3 --\
3952         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
3953
3954 AT_DATA([flows.txt], [dnl
3955 in_port=1 actions=output:2
3956 in_port=2 actions=output:1
3957 ])
3958 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3959
3960 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)"
3961 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3962 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3963   [Datapath actions: 3,2
3964 ])
3965
3966 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)"
3967 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3968 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3969   [Datapath actions: 3,1
3970 ])
3971
3972 OVS_VSWITCHD_STOP
3973 AT_CLEANUP
3974
3975
3976 AT_SETUP([ofproto-dpif - mirroring, select_src])
3977 OVS_VSWITCHD_START
3978 ADD_OF_PORTS([br0], 1, 2, 3)
3979 ovs-vsctl \
3980         set Bridge br0 mirrors=@m --\
3981         --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
3982         --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
3983
3984 AT_DATA([flows.txt], [dnl
3985 in_port=1 actions=output:2
3986 in_port=2 actions=output:1
3987 ])
3988 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3989
3990 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)"
3991 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3992 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3993   [Datapath actions: 3,2
3994 ])
3995
3996 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)"
3997 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3998 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
3999   [Datapath actions: 1
4000 ])
4001 OVS_VSWITCHD_STOP
4002 AT_CLEANUP
4003
4004 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
4005 OVS_VSWITCHD_START
4006 ADD_OF_PORTS([br0], 1, 2)
4007 ovs-vsctl \
4008         set Bridge br0 mirrors=@m --\
4009         --id=@p2 get Port p2 --\
4010         --id=@m create Mirror name=mymirror select_all=true output_port=@p2
4011
4012 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
4013
4014 # "in_port" defaults to OFPP_NONE if it's not specified.
4015 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"
4016 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4017 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4018   [Datapath actions: 1,2
4019 ])
4020
4021 OVS_VSWITCHD_STOP
4022 AT_CLEANUP
4023
4024
4025 AT_SETUP([ofproto-dpif - mirroring, select_dst])
4026 OVS_VSWITCHD_START
4027 ADD_OF_PORTS([br0], 1, 2, 3)
4028 ovs-vsctl \
4029         set Bridge br0 mirrors=@m --\
4030         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4031         --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
4032
4033 AT_DATA([flows.txt], [dnl
4034 in_port=1 actions=output:2
4035 in_port=2 actions=output:1
4036 ])
4037 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4038
4039 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)"
4040 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4041 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4042   [Datapath actions: 2,3
4043 ])
4044
4045 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)"
4046 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4047 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4048   [Datapath actions: 1
4049 ])
4050
4051 OVS_VSWITCHD_STOP
4052 AT_CLEANUP
4053
4054
4055 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
4056 OVS_VSWITCHD_START
4057 ADD_OF_PORTS([br0], 1, 2, 3)
4058 ovs-vsctl \
4059         set Bridge br0 mirrors=@m --\
4060         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4061         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4062
4063 AT_DATA([flows.txt], [dnl
4064 in_port=1, actions=output:2
4065 ])
4066 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4067
4068 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)"
4069 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4070 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4071   [Datapath actions: 2
4072 ])
4073
4074 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=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))"
4075 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4076 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4077   [Datapath actions: 2
4078 ])
4079
4080 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))"
4081 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4082 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4083   [Datapath actions: 3,2
4084 ])
4085
4086 OVS_VSWITCHD_STOP
4087 AT_CLEANUP
4088
4089
4090 AT_SETUP([ofproto-dpif - mirroring, output_port])
4091 OVS_VSWITCHD_START
4092 ADD_OF_PORTS([br0], 1, 2, 3)
4093 ovs-vsctl \
4094         set Bridge br0 mirrors=@m --\
4095         --id=@p3 get Port p3 --\
4096         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4097
4098 AT_DATA([flows.txt], [dnl
4099 in_port=1 actions=mod_vlan_vid:17,output:2
4100 in_port=2 actions=output:1
4101 ])
4102 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4103
4104 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)"
4105 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4106 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4107   [Datapath actions: 3,push_vlan(vid=17,pcp=0),2
4108 ])
4109
4110 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)"
4111 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4112 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4113   [Datapath actions: 3,1
4114 ])
4115
4116 OVS_VSWITCHD_STOP
4117 AT_CLEANUP
4118
4119 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
4120 OVS_VSWITCHD_START
4121 ADD_OF_PORTS([br0], 1, 2)
4122 ovs-vsctl \
4123         set Bridge br0 mirrors=@m --\
4124         --id=@m create Mirror name=mymirror select_all=true output_vlan=12
4125
4126 AT_DATA([flows.txt], [dnl
4127 in_port=1 actions=output:2
4128 in_port=2 actions=mod_vlan_vid:17,output:1
4129 ])
4130 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4131
4132 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)"
4133 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4134 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4135
4136 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
4137 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
4138 mv stdout expout
4139 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
4140
4141 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)"
4142 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4143 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4144
4145 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
4146 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
4147 mv stdout expout
4148 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
4149
4150 OVS_VSWITCHD_STOP
4151 AT_CLEANUP
4152
4153 # This test verifies that mirror state is preserved across recirculation.
4154 #
4155 # Otherwise, post-recirculation the ingress and the output to port 4
4156 # would cause the packet to be mirrored to port 3 a second time.
4157 AT_SETUP([ofproto-dpif - mirroring with recirculation])
4158 OVS_VSWITCHD_START
4159 ADD_OF_PORTS([br0], 1, 2, 3, 4)
4160 ovs-vsctl \
4161         set Bridge br0 mirrors=@m --\
4162         --id=@p3 get Port p3 --\
4163         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4164
4165 AT_DATA([flows.txt], [dnl
4166 in_port=1 actions=2,debug_recirc,4
4167 ])
4168 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4169
4170 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)"
4171 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4172 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 3,2,recirc(0x1)
4173 ])
4174 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4175 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 4
4176 ])
4177
4178 OVS_VSWITCHD_STOP
4179 AT_CLEANUP
4180
4181 # This test verifies that the table ID is preserved across recirculation
4182 # when a resubmit action requires it (because the action is relative to
4183 # the current table rather than specifying a table).
4184 AT_SETUP([ofproto-dpif - resubmit with recirculation])
4185 OVS_VSWITCHD_START
4186 ADD_OF_PORTS([br0], [1], [2], [3])
4187
4188 AT_DATA([flows.txt], [dnl
4189 table=0 in_port=1  actions=2,resubmit(,1)
4190 table=1 in_port=1  actions=debug_recirc,resubmit:55
4191 table=1 in_port=55 actions=3
4192 ])
4193 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4194
4195 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)"
4196 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4197 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 2,recirc(0x1)
4198 ])
4199 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4200 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 3
4201 ])
4202
4203 OVS_VSWITCHD_STOP
4204 AT_CLEANUP
4205
4206 # This test verifies that "resubmit", when it triggers recirculation
4207 # indirectly through the flow that it recursively invokes, is not
4208 # re-executed when execution continues later post-recirculation.
4209 AT_SETUP([ofproto-dpif - recirculation after resubmit])
4210 OVS_VSWITCHD_START
4211 ADD_OF_PORTS([br0], [1], [2])
4212
4213 AT_DATA([flows.txt], [dnl
4214 table=0 in_port=1 actions=resubmit(,1),2
4215 table=1 in_port=1 actions=debug_recirc
4216 ])
4217 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4218
4219 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)"
4220 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4221 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: recirc(0x1)
4222 ])
4223 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4224 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 2
4225 ])
4226
4227 OVS_VSWITCHD_STOP
4228 AT_CLEANUP
4229
4230 # Two testcases below are for the ofproto/trace command
4231 # The first one tests all correct syntax:
4232 # ofproto/trace [dp_name] odp_flow [-generate|packet]
4233 # ofproto/trace br_name br_flow [-generate|packet]
4234 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
4235 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
4236 ADD_OF_PORTS([br0], 1, 2, 3)
4237
4238 AT_DATA([flows.txt], [dnl
4239 in_port=1 actions=output:2
4240 in_port=2 actions=output:1
4241 ])
4242 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4243
4244 odp_flow="in_port(p1)"
4245 br_flow="in_port=1"
4246 # Test command: ofproto/trace odp_flow with in_port as a name.
4247 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4248 AT_CHECK([tail -1 stdout], [0], [dnl
4249 Datapath actions: 2
4250 ])
4251
4252 odp_flow="in_port(1)"
4253 # Test command: ofproto/trace odp_flow
4254 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4255 AT_CHECK([tail -1 stdout], [0], [dnl
4256 Datapath actions: 2
4257 ])
4258
4259 # Test command: ofproto/trace dp_name odp_flow
4260 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
4261 AT_CHECK([tail -1 stdout], [0], [dnl
4262 Datapath actions: 2
4263 ])
4264 # Test commmand: ofproto/trace br_name br_flow
4265 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
4266 AT_CHECK([tail -1 stdout], [0], [dnl
4267 Datapath actions: 2
4268 ])
4269
4270 # Delete the inserted flows
4271 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
4272 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
4273
4274 # This section below tests the [-generate] option
4275 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
4276 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"
4277
4278 # Test command: ofproto/trace odp_flow
4279 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4280 # Check for no MAC learning entry
4281 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4282  port  VLAN  MAC                Age
4283 ])
4284
4285 # Test command: ofproto/trace br_name br_flow
4286 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
4287 # Check for no MAC learning entry
4288 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4289  port  VLAN  MAC                Age
4290 ])
4291
4292 # Test command: ofproto/trace odp_flow -generate
4293 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
4294 # Check for the MAC learning entry
4295 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4296  port  VLAN  MAC                Age
4297     3     0  50:54:00:00:00:05    ?
4298 ])
4299
4300 # Test command: ofproto/trace dp_name odp_flow -generate
4301 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4302   "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
4303   -generate], [0], [stdout])
4304 # Check for both MAC learning entries
4305 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4306  port  VLAN  MAC                Age
4307     3     0  50:54:00:00:00:05    ?
4308     1     0  50:54:00:00:00:06    ?
4309 ])
4310
4311 # Test command: ofproto/trace br_name br_flow -generate
4312 AT_CHECK([ovs-appctl ofproto/trace br0 \
4313   "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
4314   -generate], [0], [stdout])
4315 # Check for both MAC learning entries.
4316 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4317  port  VLAN  MAC                Age
4318     3     0  50:54:00:00:00:05    ?
4319     1     0  50:54:00:00:00:06    ?
4320     2     0  50:54:00:00:00:07    ?
4321 ])
4322
4323 # This section beflow tests the [packet] option
4324 # The ovs-tcpundump of packets between port1 and port2
4325 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
4326 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
4327
4328 # Construct the MAC learning table
4329 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4330   "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
4331   -generate], [0], [stdout])
4332
4333 # Construct the MAC learning table
4334 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4335   "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
4336   -generate], [0], [stdout])
4337
4338 # Test command: ofproto/trace odp_flow packet
4339 AT_CHECK([ovs-appctl ofproto/trace \
4340   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
4341 AT_CHECK([tail -1 stdout], [0], [dnl
4342 Datapath actions: 2
4343 ])
4344 AT_CHECK([head -n 2 stdout], [0], [dnl
4345 Bridge: br0
4346 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
4347 ])
4348
4349 # Test command: ofproto/trace dp_name odp_flow packet
4350 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4351   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
4352 AT_CHECK([tail -1 stdout], [0], [dnl
4353 Datapath actions: 2
4354 ])
4355 AT_CHECK([head -n 2 stdout], [0], [dnl
4356 Bridge: br0
4357 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
4358 ])
4359
4360 # Test command: ofproto/trace br_name br_flow packet
4361 AT_CHECK([ovs-appctl ofproto/trace br0 \
4362   "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
4363 AT_CHECK([tail -1 stdout], [0], [dnl
4364 Datapath actions: 1
4365 ])
4366 AT_CHECK([head -n 2 stdout], [0], [dnl
4367 Bridge: br0
4368 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
4369 ])
4370
4371 OVS_VSWITCHD_STOP
4372 AT_CLEANUP
4373
4374 # The second test tests the corner cases
4375 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
4376 OVS_VSWITCHD_START
4377 ADD_OF_PORTS([br0], 1, 2)
4378
4379 # Define flows
4380 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
4381 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
4382 # Define options
4383 generate="-generate"
4384 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
4385
4386 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
4387 m4_foreach(
4388 [option],
4389 [[],
4390 ["$generate"],
4391 ["$pkt"]],
4392 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
4393   [2], [], [stderr])
4394 AT_CHECK([tail -2 stderr], [0], [dnl
4395 Cannot find the datapath
4396 ovs-appctl: ovs-vswitchd: server returned an error
4397 ])])
4398
4399 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
4400 m4_foreach(
4401 [option],
4402 [[],
4403 ["$generate"],
4404 ["$pkt"]],
4405 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
4406   [2], [], [stderr])
4407 AT_CHECK([tail -2 stderr], [0], [dnl
4408 Cannot find the datapath
4409 ovs-appctl: ovs-vswitchd: server returned an error
4410 ])])
4411
4412 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
4413 m4_foreach(
4414 [option],
4415 [[],
4416 ["$generate"],
4417 ["$pkt"]],
4418 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
4419   [2], [], [stderr])
4420 AT_CHECK([tail -2 stderr], [0], [dnl
4421 Cannot find the datapath
4422 ovs-appctl: ovs-vswitchd: server returned an error
4423 ])])
4424
4425 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
4426 m4_foreach(
4427 [option],
4428 [[],
4429 ["$generate"],
4430 ["$pkt"]],
4431 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
4432   [2], [], [stderr])
4433 AT_CHECK([tail -2 stderr], [0], [dnl
4434 Cannot find the datapath
4435 ovs-appctl: ovs-vswitchd: server returned an error
4436 ])])
4437
4438 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
4439 m4_foreach(
4440 [option],
4441 [[],
4442 ["$generate"],
4443 ["$pkt"]],
4444 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
4445   [2], [], [stderr])
4446 AT_CHECK([tail -2 stderr], [0], [dnl
4447 Unknown bridge name
4448 ovs-appctl: ovs-vswitchd: server returned an error
4449 ])])
4450
4451 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
4452 m4_foreach(
4453 [option],
4454 [[],
4455 ["$generate"],
4456 ["$pkt"]],
4457 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
4458   [2], [], [stderr])
4459 AT_CHECK([tail -2 stderr], [0], [dnl
4460 Must specify bridge name
4461 ovs-appctl: ovs-vswitchd: server returned an error
4462 ])])
4463
4464 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
4465 AT_CHECK([ovs-appctl ofproto/trace \
4466   ovs-dummy "$odp_flow" garbage_option],
4467   [2], [stdout],[stderr])
4468 AT_CHECK([tail -2 stderr], [0], [dnl
4469 Trailing garbage in packet data
4470 ovs-appctl: ovs-vswitchd: server returned an error
4471 ])
4472
4473 # Test incorrect command: ofproto/trace with 4 arguments
4474 AT_CHECK([ovs-appctl ofproto/trace \
4475   arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
4476 AT_CHECK([tail -2 stderr], [0], [dnl
4477 "ofproto/trace" command takes at most 3 arguments
4478 ovs-appctl: ovs-vswitchd: server returned an error
4479 ])
4480
4481 # Test incorrect command: ofproto/trace with 0 argument
4482 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
4483 AT_CHECK([tail -2 stderr], [0], [dnl
4484 "ofproto/trace" command requires at least 1 arguments
4485 ovs-appctl: ovs-vswitchd: server returned an error
4486 ])
4487
4488 OVS_VSWITCHD_STOP
4489 AT_CLEANUP
4490
4491 # The third test checks that the output of "ovs-dpctl -m" is valid to trace.
4492 AT_SETUP([ofproto-dpif - ofproto/trace from dpctl output])
4493 OVS_VSWITCHD_START([dnl
4494     set Open_vSwitch . other_config:max-idle=10000 \
4495     -- add-port br0 p1 -- set Interface p1 type=dummy])
4496
4497 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)'])
4498 ovs-appctl revalidator/wait
4499 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows1.txt])
4500
4501 odp_flow=`cat dp_flows1.txt`
4502 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
4503 Bridge: br0
4504 Flow: <cleared>
4505 No match, packets dropped because OFPPC_NO_PACKET_IN is set on in_port.
4506
4507 Rule: table=254 cookie=0 priority=0,reg0=0x2
4508 OpenFlow actions=drop
4509
4510 Final flow: <cleared>
4511 Megaflow: <cleared>
4512 Datapath actions: drop
4513 ])
4514
4515 dnl Now, try again without megaflows:
4516 ovs-appctl upcall/disable-megaflows
4517
4518 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)'])
4519 ovs-appctl revalidator/wait
4520 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows2.txt])
4521
4522 odp_flow=`cat dp_flows2.txt`
4523 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
4524 Bridge: br0
4525 Flow: <cleared>
4526 No match, packets dropped because OFPPC_NO_PACKET_IN is set on in_port.
4527
4528 Rule: table=254 cookie=0 priority=0,reg0=0x2
4529 OpenFlow actions=drop
4530
4531 Final flow: <cleared>
4532 Megaflow: <cleared>
4533 Datapath actions: drop
4534 ])
4535
4536 OVS_VSWITCHD_STOP
4537 AT_CLEANUP
4538
4539 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
4540 OVS_VSWITCHD_START
4541 ADD_OF_PORTS([br0], 1, 2, 3)
4542
4543 AT_DATA([flows.txt], [dnl
4544 in_port=1 actions=output:2
4545 in_port=2 actions=output:1
4546 ])
4547 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4548
4549 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
4550 AT_CHECK([tail -1 stdout], [0], [dnl
4551 Datapath actions: push_vlan(vid=123,pcp=0),2
4552 ])
4553
4554 OVS_VSWITCHD_STOP
4555 AT_CLEANUP
4556
4557
4558 m4_define([OFPROTO_TRACE],
4559   [flow="$2"
4560    AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
4561    actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4562    expected="$4"
4563    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
4564      [0], [stdout])
4565    mv stdout expout
4566    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
4567      [0], [expout])])
4568
4569 AT_SETUP([ofproto-dpif - MAC learning])
4570 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
4571 ADD_OF_PORTS([br0], 1, 2, 3)
4572
4573 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)'
4574
4575 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
4576 OFPROTO_TRACE(
4577   [ovs-dummy],
4578   [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
4579   [-generate],
4580   [1,2,100])
4581
4582 # Check for the MAC learning entry.
4583 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4584  port  VLAN  MAC                Age
4585     3     0  50:54:00:00:00:05    ?
4586 ])
4587
4588 # Trace a packet arrival destined for the learned MAC.
4589 # (This will also learn a MAC.)
4590 OFPROTO_TRACE(
4591   [ovs-dummy],
4592   [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
4593   [-generate],
4594   [3])
4595
4596 # Check for both MAC learning entries.
4597 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4598  port  VLAN  MAC                Age
4599     3     0  50:54:00:00:00:05    ?
4600     1     0  50:54:00:00:00:06    ?
4601 ])
4602
4603 # Trace a packet arrival that updates the first learned MAC entry.
4604 OFPROTO_TRACE(
4605   [ovs-dummy],
4606   [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
4607   [-generate],
4608   [1,3,100])
4609
4610 # Check that the MAC learning entry was updated.
4611 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4612  port  VLAN  MAC                Age
4613     1     0  50:54:00:00:00:06    ?
4614     2     0  50:54:00:00:00:05    ?
4615 ])
4616
4617 # Add another bridge.
4618 AT_CHECK(
4619   [ovs-vsctl \
4620      -- add-br br1 \
4621      -- set bridge br1 datapath-type=dummy])
4622 ADD_OF_PORTS([br1], 4, 5)
4623
4624 # Trace some packet arrivals in br1 to create MAC learning entries there too.
4625 OFPROTO_TRACE(
4626   [ovs-dummy],
4627   [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
4628   [-generate],
4629   [5,101])
4630 OFPROTO_TRACE(
4631   [ovs-dummy],
4632   [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
4633   [-generate],
4634   [4,101])
4635
4636 # Check that the MAC learning entries were added.
4637 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4638  port  VLAN  MAC                Age
4639     4     0  50:54:00:00:00:06    ?
4640     5     0  50:54:00:00:00:07    ?
4641 ])
4642
4643 # Delete port p1 and see that its MAC learning entry disappeared, and
4644 # that the MAC learning entry for the same MAC was also deleted from br1.
4645 AT_CHECK([ovs-vsctl del-port p1])
4646 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4647  port  VLAN  MAC                Age
4648     2     0  50:54:00:00:00:05    ?
4649 ])
4650 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4651  port  VLAN  MAC                Age
4652     5     0  50:54:00:00:00:07    ?
4653 ])
4654
4655 OVS_VSWITCHD_STOP
4656 AT_CLEANUP
4657
4658 AT_SETUP([ofproto-dpif - MAC table overflow])
4659 OVS_VSWITCHD_START(
4660   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
4661 ADD_OF_PORTS([br0], 1, 2, 3)
4662
4663 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)'
4664
4665 AT_CHECK([ovs-appctl time/stop])
4666
4667 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
4668 for i in 0 1 2 3 4 5 6 7 8 9; do
4669     OFPROTO_TRACE(
4670       [ovs-dummy],
4671       [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
4672       [-generate],
4673       [1,2,100])
4674     ovs-appctl time/warp 1000
4675 done
4676
4677 # Check for the MAC learning entries.
4678 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4679   [0], [dnl
4680     3     0  50:54:00:00:00:00
4681     3     0  50:54:00:00:00:01
4682     3     0  50:54:00:00:00:02
4683     3     0  50:54:00:00:00:03
4684     3     0  50:54:00:00:00:04
4685     3     0  50:54:00:00:00:05
4686     3     0  50:54:00:00:00:06
4687     3     0  50:54:00:00:00:07
4688     3     0  50:54:00:00:00:08
4689     3     0  50:54:00:00:00:09
4690  port  VLAN  MAC                Age
4691 ])
4692
4693 # Trace another ARP packet on another MAC.
4694 OFPROTO_TRACE(
4695   [ovs-dummy],
4696   [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
4697   [-generate],
4698   [1,2,100])
4699
4700 # Check that the new one chased the oldest one out of the table.
4701 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
4702   [0], [dnl
4703     3     0  50:54:00:00:00:01    ?
4704     3     0  50:54:00:00:00:02    ?
4705     3     0  50:54:00:00:00:03    ?
4706     3     0  50:54:00:00:00:04    ?
4707     3     0  50:54:00:00:00:05    ?
4708     3     0  50:54:00:00:00:06    ?
4709     3     0  50:54:00:00:00:07    ?
4710     3     0  50:54:00:00:00:08    ?
4711     3     0  50:54:00:00:00:09    ?
4712     3     0  50:54:00:00:00:10    ?
4713  port  VLAN  MAC                Age
4714 ])
4715 OVS_VSWITCHD_STOP
4716 AT_CLEANUP
4717
4718 AT_SETUP([ofproto-dpif - MAC table overflow fairness])
4719 OVS_VSWITCHD_START(
4720   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
4721 ADD_OF_PORTS([br0], 1, 2, 3, 4, 5, 6)
4722
4723 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)'
4724
4725 AT_CHECK([ovs-appctl time/stop])
4726
4727 # Trace packets with 2 different source MACs arriving on each of the 5
4728 # ports, filling up the 10-entry learning table.
4729 for i in 0 1 2 3 4 5 6 7 8 9; do
4730     p=`expr $i / 2 + 1`
4731     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
4732     ovs-appctl time/warp 1000
4733 done
4734
4735 # Check for the MAC learning entries.
4736 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4737   [0], [dnl
4738     1     0  50:54:00:00:00:00
4739     1     0  50:54:00:00:00:01
4740     2     0  50:54:00:00:00:02
4741     2     0  50:54:00:00:00:03
4742     3     0  50:54:00:00:00:04
4743     3     0  50:54:00:00:00:05
4744     4     0  50:54:00:00:00:06
4745     4     0  50:54:00:00:00:07
4746     5     0  50:54:00:00:00:08
4747     5     0  50:54:00:00:00:09
4748  port  VLAN  MAC                Age
4749 ])
4750
4751 # Now trace 16 new MACs on another port.
4752 for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
4753     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
4754     ovs-appctl time/warp 1000
4755 done
4756
4757 # Check the results.
4758 #
4759 # Our eviction algorithm on overflow is that an arbitrary (but deterministic)
4760 # one of the ports with the most learned MACs loses the least recently used
4761 # one.  Thus, the new port will end up with 3 MACs, 3 of the old ports with 1
4762 # MAC each, and the other 2 of the old ports with 2 MACs each.
4763 #
4764 # (If someone changes lib/heap.c to do something different with equal-priority
4765 # nodes, then the output below could change, but it would still follow the
4766 # rules explained above.)
4767 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4768   [0], [dnl
4769     1     0  50:54:00:00:00:01
4770     2     0  50:54:00:00:00:03
4771     3     0  50:54:00:00:00:04
4772     3     0  50:54:00:00:00:05
4773     4     0  50:54:00:00:00:07
4774     5     0  50:54:00:00:00:08
4775     5     0  50:54:00:00:00:09
4776     6     0  50:54:00:00:0d:ff
4777     6     0  50:54:00:00:0e:ff
4778     6     0  50:54:00:00:0f:ff
4779  port  VLAN  MAC                Age
4780 ])
4781 OVS_VSWITCHD_STOP
4782 AT_CLEANUP
4783
4784 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR)
4785 #
4786 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
4787 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
4788   [AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
4789   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4790
4791   on_exit 'kill `cat test-sflow.pid`'
4792   AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
4793   AT_CAPTURE_FILE([sflow.log])
4794   PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
4795   ovs-appctl time/stop
4796
4797   ADD_OF_PORTS([br0], 1, 2)
4798   ovs-vsctl \
4799      set Interface br0 options:ifindex=1002 -- \
4800      set Interface p1 options:ifindex=1004 -- \
4801      set Interface p2 options:ifindex=1003 -- \
4802      set Bridge br0 sflow=@sf -- \
4803      --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
4804        header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
4805
4806   dnl open with ARP packets to seed the bridge-learning.  The output
4807   dnl ifIndex numbers should be reported predictably after that.
4808   dnl Since we set sampling=1 we should see all of these packets
4809   dnl reported. Sorting the output by data-source and seqNo makes
4810   dnl it deterministic. Ensuring that we send at least two packets
4811   dnl into each port means we get to check the seq nos are
4812   dnl incrementing correctly.
4813   dnl because packets from different ports can be handled by separate
4814   dnl threads, put some sleeps
4815
4816   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)'
4817   sleep 1
4818   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)'
4819   sleep 1
4820   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)'
4821   sleep 1
4822   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)'
4823   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)'
4824
4825   dnl sleep long enough to get more than one counter sample
4826   dnl from each datasource so we can check sequence numbers
4827   ovs-appctl time/warp 3000 100
4828   OVS_VSWITCHD_STOP
4829   ovs-appctl -t test-sflow exit
4830
4831   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
4832         /g']], [0], [dnl
4833 HEADER
4834         dgramSeqNo=1
4835         ds=127.0.0.1>2:1000
4836         fsSeqNo=1
4837         in_vlan=0
4838         in_priority=0
4839         out_vlan=0
4840         out_priority=0
4841         meanSkip=1
4842         samplePool=1
4843         dropEvents=0
4844         in_ifindex=1004
4845         in_format=0
4846         out_ifindex=2
4847         out_format=2
4848         hdr_prot=1
4849         pkt_len=64
4850         stripped=4
4851         hdr_len=60
4852         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
4853 HEADER
4854         dgramSeqNo=1
4855         ds=127.0.0.1>2:1000
4856         fsSeqNo=2
4857         in_vlan=0
4858         in_priority=0
4859         out_vlan=0
4860         out_priority=0
4861         meanSkip=1
4862         samplePool=2
4863         dropEvents=0
4864         in_ifindex=1003
4865         in_format=0
4866         out_ifindex=2
4867         out_format=2
4868         hdr_prot=1
4869         pkt_len=64
4870         stripped=4
4871         hdr_len=60
4872         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
4873 HEADER
4874         dgramSeqNo=1
4875         ds=127.0.0.1>2:1000
4876         fsSeqNo=3
4877         in_vlan=0
4878         in_priority=0
4879         out_vlan=0
4880         out_priority=0
4881         meanSkip=1
4882         samplePool=3
4883         dropEvents=0
4884         in_ifindex=1004
4885         in_format=0
4886         out_ifindex=1003
4887         out_format=0
4888         hdr_prot=1
4889         pkt_len=64
4890         stripped=4
4891         hdr_len=60
4892         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
4893 HEADER
4894         dgramSeqNo=1
4895         ds=127.0.0.1>2:1000
4896         fsSeqNo=4
4897         in_vlan=0
4898         in_priority=0
4899         out_vlan=0
4900         out_priority=0
4901         meanSkip=1
4902         samplePool=4
4903         dropEvents=0
4904         in_ifindex=1003
4905         in_format=0
4906         out_ifindex=1004
4907         out_format=0
4908         hdr_prot=1
4909         pkt_len=64
4910         stripped=4
4911         hdr_len=60
4912         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
4913 HEADER
4914         dgramSeqNo=1
4915         ds=127.0.0.1>2:1000
4916         fsSeqNo=5
4917         in_vlan=0
4918         in_priority=0
4919         out_vlan=0
4920         out_priority=0
4921         meanSkip=1
4922         samplePool=5
4923         dropEvents=0
4924         in_ifindex=1003
4925         in_format=0
4926         out_ifindex=1004
4927         out_format=0
4928         hdr_prot=1
4929         pkt_len=64
4930         stripped=4
4931         hdr_len=60
4932         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
4933 ])
4934
4935   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR|PORTNAME|OPENFLOWPORT' | head -18 | sed 's/ /\
4936         /g']], [0], [dnl
4937 IFCOUNTERS
4938         dgramSeqNo=2
4939         ds=127.0.0.1>0:1002
4940         csSeqNo=1
4941         ifindex=1002
4942         type=6
4943         ifspeed=100000000
4944         direction=0
4945         status=0
4946         in_octets=0
4947         in_unicasts=0
4948         in_multicasts=0
4949         in_broadcasts=4294967295
4950         in_discards=0
4951         in_errors=0
4952         in_unknownprotos=4294967295
4953         out_octets=120
4954         out_unicasts=2
4955         out_multicasts=4294967295
4956         out_broadcasts=4294967295
4957         out_discards=0
4958         out_errors=0
4959         promiscuous=0
4960 IFCOUNTERS
4961         dgramSeqNo=2
4962         ds=127.0.0.1>0:1003
4963         csSeqNo=1
4964         ifindex=1003
4965         type=6
4966         ifspeed=100000000
4967         direction=0
4968         status=0
4969         in_octets=138
4970         in_unicasts=3
4971         in_multicasts=0
4972         in_broadcasts=4294967295
4973         in_discards=0
4974         in_errors=0
4975         in_unknownprotos=4294967295
4976         out_octets=120
4977         out_unicasts=2
4978         out_multicasts=4294967295
4979         out_broadcasts=4294967295
4980         out_discards=0
4981         out_errors=0
4982         promiscuous=0
4983 IFCOUNTERS
4984         dgramSeqNo=2
4985         ds=127.0.0.1>0:1004
4986         csSeqNo=1
4987         ifindex=1004
4988         type=6
4989         ifspeed=100000000
4990         direction=0
4991         status=0
4992         in_octets=84
4993         in_unicasts=2
4994         in_multicasts=0
4995         in_broadcasts=4294967295
4996         in_discards=0
4997         in_errors=0
4998         in_unknownprotos=4294967295
4999         out_octets=180
5000         out_unicasts=3
5001         out_multicasts=4294967295
5002         out_broadcasts=4294967295
5003         out_discards=0
5004         out_errors=0
5005         promiscuous=0
5006 IFCOUNTERS
5007         dgramSeqNo=3
5008         ds=127.0.0.1>0:1002
5009         csSeqNo=2
5010         ifindex=1002
5011         type=6
5012         ifspeed=100000000
5013         direction=0
5014         status=0
5015         in_octets=0
5016         in_unicasts=0
5017         in_multicasts=0
5018         in_broadcasts=4294967295
5019         in_discards=0
5020         in_errors=0
5021         in_unknownprotos=4294967295
5022         out_octets=120
5023         out_unicasts=2
5024         out_multicasts=4294967295
5025         out_broadcasts=4294967295
5026         out_discards=0
5027         out_errors=0
5028         promiscuous=0
5029 IFCOUNTERS
5030         dgramSeqNo=3
5031         ds=127.0.0.1>0:1003
5032         csSeqNo=2
5033         ifindex=1003
5034         type=6
5035         ifspeed=100000000
5036         direction=0
5037         status=0
5038         in_octets=138
5039         in_unicasts=3
5040         in_multicasts=0
5041         in_broadcasts=4294967295
5042         in_discards=0
5043         in_errors=0
5044         in_unknownprotos=4294967295
5045         out_octets=120
5046         out_unicasts=2
5047         out_multicasts=4294967295
5048         out_broadcasts=4294967295
5049         out_discards=0
5050         out_errors=0
5051         promiscuous=0
5052 IFCOUNTERS
5053         dgramSeqNo=3
5054         ds=127.0.0.1>0:1004
5055         csSeqNo=2
5056         ifindex=1004
5057         type=6
5058         ifspeed=100000000
5059         direction=0
5060         status=0
5061         in_octets=84
5062         in_unicasts=2
5063         in_multicasts=0
5064         in_broadcasts=4294967295
5065         in_discards=0
5066         in_errors=0
5067         in_unknownprotos=4294967295
5068         out_octets=180
5069         out_unicasts=3
5070         out_multicasts=4294967295
5071         out_broadcasts=4294967295
5072         out_discards=0
5073         out_errors=0
5074         promiscuous=0
5075 OPENFLOWPORT
5076         datapath_id=18364758544493064720
5077         port_no=1
5078 OPENFLOWPORT
5079         datapath_id=18364758544493064720
5080         port_no=1
5081 OPENFLOWPORT
5082         datapath_id=18364758544493064720
5083         port_no=2
5084 OPENFLOWPORT
5085         datapath_id=18364758544493064720
5086         port_no=2
5087 OPENFLOWPORT
5088         datapath_id=18364758544493064720
5089         port_no=65534
5090 OPENFLOWPORT
5091         datapath_id=18364758544493064720
5092         port_no=65534
5093 PORTNAME
5094         portName=br0
5095 PORTNAME
5096         portName=br0
5097 PORTNAME
5098         portName=p1
5099 PORTNAME
5100         portName=p1
5101 PORTNAME
5102         portName=p2
5103 PORTNAME
5104         portName=p2
5105 ])])
5106
5107 AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv4 collector])
5108 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1])
5109 AT_CLEANUP
5110
5111 AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv6 collector])
5112 AT_SKIP_IF([test $HAVE_IPV6 = no])
5113 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]])
5114 AT_CLEANUP
5115
5116 dnl Test sFlow LAG structures
5117 AT_SETUP([ofproto-dpif - sFlow packet sampling - LACP structures])
5118 AT_SKIP_IF([test "$IS_WIN32" = "yes"])
5119 OVS_VSWITCHD_START([dnl
5120                     add-bond br0 bond p1 p2 --                          \
5121                     set Port bond lacp=active bond-mode=active-backup   \
5122                     other_config:lacp-time="fast"                       \
5123                     other_config:lacp-system-id=11:22:33:44:55:66       \
5124                     other_config:lacp-system-priority=54321 --          \
5125                     set Interface p1 type=dummy                         \
5126                     other_config:lacp-port-id=11                        \
5127                     other_config:lacp-port-priority=111                 \
5128                     other_config:lacp-aggregation-key=3333 --           \
5129                     set Interface p2 type=dummy                         \
5130                     other_config:lacp-port-id=22                        \
5131                     other_config:lacp-port-priority=222                 \
5132                     other_config:lacp-aggregation-key=3333 ])
5133
5134 on_exit 'kill `cat test-sflow.pid`'
5135 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5136 AT_CAPTURE_FILE([sflow.log])
5137 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
5138
5139 ovs-appctl time/stop
5140
5141 ovs-vsctl \
5142       set Interface p1 options:ifindex=1003 --                  \
5143       set Bridge br0 sflow=@sf --                               \
5144       --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\"   \
5145       header=128 sampling=1 polling=1
5146
5147 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5148 AT_CHECK([ovs-appctl time/warp 2000 100], [0], [ignore])
5149 AT_CHECK([ovs-appctl revalidator/purge], [0])
5150 OVS_VSWITCHD_STOP
5151 ovs-appctl -t test-sflow exit
5152 AT_CHECK([[sort sflow.log | $EGREP 'LACPCOUNTERS|ERROR' | head -n 1 | sed 's/ /\
5153         /g']], [0], [dnl
5154 LACPCOUNTERS
5155         sysID=11:22:33:44:55:66
5156         partnerID=00:00:00:00:00:00
5157         aggID=3333
5158         actorAdmin=0x7
5159         actorOper=0xbf
5160         partnerAdmin=0x0
5161         partnerOper=0x2
5162         LACPDUsRx=0
5163         markerPDUsRx=4294967295
5164         markerRespPDUsRx=4294967295
5165         unknownRx=4294967295
5166         illegalRx=0
5167         LACPDUsTx=1
5168         markerPDUsTx=4294967295
5169         markerRespPDUsTx=4294967295
5170 ])
5171
5172 AT_CLEANUP
5173
5174 AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel set])
5175 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5176 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5177
5178 dnl set up sFlow logging
5179 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5180 AT_CAPTURE_FILE([sflow.log])
5181 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
5182 ovs-appctl time/stop
5183
5184 OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
5185 AT_CHECK([ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre \
5186                     options:remote_ip=1.1.1.1 options:key=456 ofport_request=3])
5187 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy ofport_request=4])
5188
5189 AT_CHECK([ovs-ofctl add-flow br0 action=3])
5190
5191 dnl enable sflow
5192 ovs-vsctl \
5193    set Bridge br0 sflow=@sf -- \
5194    --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5195      header=128 sampling=1 polling=0
5196
5197 dnl introduce a packet that will be flooded to the tunnel
5198 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)'])
5199
5200 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5201 for i in `seq 1 30`; do
5202     ovs-appctl time/warp 100
5203 done
5204
5205 ovs-appctl -t test-sflow exit
5206
5207 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5208         /g']], [0], [dnl
5209 HEADER
5210         dgramSeqNo=1
5211         ds=127.0.0.1>2:1000
5212         fsSeqNo=1
5213         tunnel4_out_length=0
5214         tunnel4_out_protocol=47
5215         tunnel4_out_src=0.0.0.0
5216         tunnel4_out_dst=1.1.1.1
5217         tunnel4_out_src_port=0
5218         tunnel4_out_dst_port=0
5219         tunnel4_out_tcp_flags=0
5220         tunnel4_out_tos=1
5221         tunnel_out_vni=456
5222         in_vlan=0
5223         in_priority=0
5224         out_vlan=0
5225         out_priority=0
5226         meanSkip=1
5227         samplePool=1
5228         dropEvents=0
5229         in_ifindex=0
5230         in_format=0
5231         out_ifindex=1
5232         out_format=2
5233         hdr_prot=1
5234         pkt_len=64
5235         stripped=4
5236         hdr_len=60
5237         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
5238 ])
5239
5240 OVS_VSWITCHD_STOP
5241 AT_CLEANUP
5242
5243 AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel push])
5244 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5245
5246 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 options:ifindex=1010])
5247
5248 dnl set up sFlow logging
5249 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5250 AT_CAPTURE_FILE([sflow.log])
5251 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
5252 ovs-appctl time/stop
5253
5254 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5255 AT_CHECK([ovs-vsctl add-br int-br -- set bridge int-br datapath_type=dummy], [0])
5256 AT_CHECK([ovs-vsctl -- add-port int-br t1 -- set Interface t1 type=gre \
5257                        options:remote_ip=1.1.2.92 options:key=456 ofport_request=4\
5258                     -- add-port int-br vm1 -- set Interface vm1 type=dummy \
5259                        options:ifindex=2011 ofport_request=5
5260                        ], [0])
5261
5262 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5263 dummy@ovs-dummy: hit:0 missed:0
5264         br0:
5265                 br0 65534/100: (dummy)
5266                 p0 1/1: (dummy: ifindex=1010)
5267         int-br:
5268                 int-br 65534/2: (dummy)
5269                 t1 4/4: (gre: key=456, remote_ip=1.1.2.92)
5270                 vm1 5/3: (dummy: ifindex=2011)
5271 ])
5272
5273 dnl set up route to 1.1.2.92 via br0 and action=normal
5274 AT_CHECK([ovs-appctl ovs/route/add 1.1.2.92/24 br0], [0], [OK
5275 ])
5276 AT_CHECK([ovs-appctl ovs/route/add 192.168.0.0/16 br0], [0], [OK
5277 ])
5278 AT_CHECK([ovs-appctl netdev-dummy/ip4addr br0 1.1.2.88/24], [0], [OK
5279 ])
5280 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
5281
5282 dnl Prime ARP Cache for 1.1.2.92
5283 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)'])
5284
5285 dnl configure sflow on int-br only
5286 ovs-vsctl \
5287    set Bridge int-br sflow=@sf -- \
5288    --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5289      header=128 sampling=1 polling=0
5290
5291 dnl add rule for int-br to force packet onto tunnel. There is no ifindex
5292 dnl for this port so the sFlow output will just report that it went to
5293 dnl 1 output (out_format=2, out_ifindex=1)
5294 AT_CHECK([ovs-ofctl add-flow int-br "actions=4"])
5295
5296 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)'])
5297
5298 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5299 for i in `seq 1 30`; do
5300     ovs-appctl time/warp 100
5301 done
5302
5303 ovs-appctl -t test-sflow exit
5304
5305 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5306         /g']], [0], [dnl
5307 HEADER
5308         dgramSeqNo=1
5309         ds=127.0.0.1>2:1000
5310         fsSeqNo=1
5311         tunnel4_out_length=0
5312         tunnel4_out_protocol=47
5313         tunnel4_out_src=1.1.2.88
5314         tunnel4_out_dst=1.1.2.92
5315         tunnel4_out_src_port=0
5316         tunnel4_out_dst_port=0
5317         tunnel4_out_tcp_flags=0
5318         tunnel4_out_tos=0
5319         tunnel_out_vni=456
5320         in_vlan=0
5321         in_priority=0
5322         out_vlan=0
5323         out_priority=0
5324         meanSkip=1
5325         samplePool=1
5326         dropEvents=0
5327         in_ifindex=2011
5328         in_format=0
5329         out_ifindex=1
5330         out_format=2
5331         hdr_prot=1
5332         pkt_len=64
5333         stripped=4
5334         hdr_len=60
5335         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
5336 ])
5337
5338 OVS_VSWITCHD_STOP
5339 AT_CLEANUP
5340
5341 AT_SETUP([ofproto-dpif - sFlow packet sampling - MPLS])
5342 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5343 OVS_VSWITCHD_START
5344 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5345 ADD_OF_PORTS([br0], [1], [2])
5346 AT_DATA([flows.txt], [dnl
5347 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
5348 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
5349 ])
5350 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5351
5352 dnl set up sFlow logging
5353 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5354 AT_CAPTURE_FILE([sflow.log])
5355 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
5356 ovs-appctl time/stop
5357
5358 dnl configure sflow
5359 ovs-vsctl \
5360    set Bridge br0 sflow=@sf -- \
5361    --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5362      header=128 sampling=1 polling=0
5363
5364 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)'])
5365 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)'])
5366
5367 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5368 for i in `seq 1 30`; do
5369     ovs-appctl time/warp 100
5370 done
5371
5372 ovs-appctl -t test-sflow exit
5373
5374 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5375         /g']], [0], [dnl
5376 HEADER
5377         dgramSeqNo=1
5378         ds=127.0.0.1>2:1000
5379         fsSeqNo=1
5380         mpls_label_0=789
5381         mpls_tc_0=4
5382         mpls_ttl_0=32
5383         mpls_bos_0=0
5384         mpls_label_1=11
5385         mpls_tc_1=3
5386         mpls_ttl_1=64
5387         mpls_bos_1=1
5388         in_vlan=0
5389         in_priority=0
5390         out_vlan=0
5391         out_priority=0
5392         meanSkip=1
5393         samplePool=1
5394         dropEvents=0
5395         in_ifindex=0
5396         in_format=0
5397         out_ifindex=1
5398         out_format=2
5399         hdr_prot=1
5400         pkt_len=64
5401         stripped=4
5402         hdr_len=60
5403         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
5404 HEADER
5405         dgramSeqNo=1
5406         ds=127.0.0.1>2:1000
5407         fsSeqNo=2
5408         mpls_label_0=789
5409         mpls_tc_0=4
5410         mpls_ttl_0=32
5411         mpls_bos_0=1
5412         in_vlan=0
5413         in_priority=0
5414         out_vlan=0
5415         out_priority=0
5416         meanSkip=1
5417         samplePool=2
5418         dropEvents=0
5419         in_ifindex=0
5420         in_format=0
5421         out_ifindex=1
5422         out_format=2
5423         hdr_prot=1
5424         pkt_len=64
5425         stripped=4
5426         hdr_len=60
5427         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
5428 ])
5429
5430 OVS_VSWITCHD_STOP
5431 AT_CLEANUP
5432
5433
5434 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR)
5435 #
5436 # Test that basic NetFlow reports flow statistics correctly:
5437 # The initial packet of a flow are correctly accounted.
5438 # Later packets within a flow are correctly accounted.
5439 # Flow actions changing (in this case, due to MAC learning)
5440 # cause a record to be sent.
5441 m4_define([CHECK_NETFLOW_EXPIRATION],
5442   [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5443   ADD_OF_PORTS([br0], 1, 2)
5444
5445   ovs-appctl time/stop
5446   on_exit 'kill `cat test-netflow.pid`'
5447   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
5448   AT_CAPTURE_FILE([netflow.log])
5449   PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
5450
5451   ovs-vsctl \
5452      set Bridge br0 netflow=@nf -- \
5453      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
5454        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
5455
5456   for delay in 1000 30000; do
5457       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)'
5458       sleep 1  # ensure the order in which these two packets are processed
5459       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)'
5460
5461       ovs-appctl time/warp $delay
5462   done
5463
5464   ovs-appctl time/warp 6000
5465   ovs-appctl revalidator/wait
5466   OVS_VSWITCHD_STOP
5467   ovs-appctl -t test-netflow exit
5468
5469   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])
5470
5471   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])
5472
5473   combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
5474   separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
5475   AT_CHECK([test $separate = 2 || test $combined = 1], [0])])
5476
5477 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv4 collector])
5478 CHECK_NETFLOW_EXPIRATION([127.0.0.1])
5479 AT_CLEANUP
5480
5481 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv6 collector])
5482 AT_SKIP_IF([test $HAVE_IPV6 = no])
5483 CHECK_NETFLOW_EXPIRATION([[[::1]]])
5484 AT_CLEANUP
5485
5486 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR)
5487 #
5488 # Test that basic NetFlow reports active expirations correctly.
5489 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
5490   [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5491   ADD_OF_PORTS([br0], 1, 2)
5492
5493   on_exit 'kill `cat test-netflow.pid`'
5494   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
5495   AT_CAPTURE_FILE([netflow.log])
5496   PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
5497
5498   ovs-vsctl \
5499      set Bridge br0 netflow=@nf -- \
5500      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
5501        engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
5502
5503   AT_CHECK([ovs-appctl time/stop])
5504   n=1
5505   while test $n -le 60; do
5506       n=`expr $n + 1`
5507
5508       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)'
5509       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)'
5510
5511       ovs-appctl time/warp 1000
5512   done
5513
5514   ovs-appctl time/warp 10000
5515
5516   ovs-appctl revalidator/wait
5517   OVS_VSWITCHD_STOP
5518   ovs-appctl -t test-netflow exit
5519
5520   # Count the number of reported packets:
5521   # - From source to destination before MAC learning kicks in (just one).
5522   # - From source to destination after that.
5523   # - From destination to source.
5524   n_learn=0
5525   n_in=0
5526   n_out=0
5527   n_other=0
5528   n_recs=0
5529   none=0
5530   while read line; do
5531       pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
5532       case $pkts in
5533            [[0-9]]*) ;;
5534        *) continue ;;
5535       esac
5536
5537       case $line in
5538           "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
5539               counter=n_learn
5540           ;;
5541       "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
5542           counter=n_in
5543           ;;
5544       "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
5545           counter=n_out
5546           ;;
5547       *)
5548           counter=n_other
5549           ;;
5550       esac
5551       eval $counter=\`expr \$$counter + \$pkts\`
5552       n_recs=`expr $n_recs + 1`
5553   done < netflow.log
5554
5555   # There should be exactly 1 MAC learning packet,
5556   # exactly 59 other packets in that direction,
5557   # and exactly 60 packets in the other direction.
5558   AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
5559 ])])
5560
5561 AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv4 collector])
5562 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1])
5563 AT_CLEANUP
5564
5565 AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv6 collector])
5566 AT_SKIP_IF([test $HAVE_IPV6 = no])
5567 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]])
5568 AT_CLEANUP
5569
5570 dnl In the absence of an IPFIX collector to verify protocol correctness, simply
5571 dnl configure IPFIX and ensure that sample action generation works at the
5572 dnl datapath level.
5573 AT_SETUP([ofproto-dpif - Basic IPFIX sanity check])
5574 OVS_VSWITCHD_START
5575 ADD_OF_PORTS([br0], 1, 2)
5576
5577 dnl Sample every packet using bridge-based sampling
5578 AT_CHECK([ovs-vsctl -- set bridge br0 ipfix=@fix -- \
5579                     --id=@fix create ipfix targets=\"127.0.0.1:4739\" \
5580                               sampling=1], [0], [ignore])
5581
5582 dnl Send some packets that should be sampled
5583 for i in `seq 1 3`; do
5584     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)'])
5585 done
5586 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
5587 flow-dump from non-dpdk interfaces:
5588 packets:2, bytes:120, used:0.001s, actions:sample(sample=100.0%,actions(userspace(pid=0,ipfix(output_port=4294967295))))
5589 ])
5590
5591 dnl Remove the IPFIX configuration
5592 AT_CHECK([ovs-vsctl clear bridge br0 ipfix])
5593 AT_CHECK([ovs-appctl revalidator/purge])
5594
5595 dnl Send some more packets, to ensure that these are not sampled.
5596 for i in `seq 1 3`; do
5597     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)'])
5598 done
5599 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
5600 flow-dump from non-dpdk interfaces:
5601 packets:2, bytes:120, used:0.001s, actions:drop
5602 ])
5603
5604 OVS_VSWITCHD_STOP(["/sending to collector failed/d"])
5605 AT_CLEANUP
5606
5607 AT_SETUP([ofproto-dpif - flow stats])
5608 OVS_VSWITCHD_START
5609 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
5610 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
5611
5612 ovs-appctl time/stop
5613
5614 for i in `seq 1 10`; do
5615     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)'
5616 done
5617
5618 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
5619 AT_CHECK([ovs-appctl revalidator/purge], [0])
5620 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
5621 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
5622  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
5623  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
5624 ])
5625 OVS_VSWITCHD_STOP
5626 AT_CLEANUP
5627
5628 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
5629 OVS_VSWITCHD_START
5630 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
5631 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
5632
5633 ovs-appctl time/stop
5634
5635 for i in `seq 1 10`; do
5636     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)'
5637 done
5638
5639 ovs-appctl time/warp 100
5640 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
5641 ovs-appctl time/warp 1000
5642
5643 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
5644 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
5645  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
5646  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
5647 ])
5648 OVS_VSWITCHD_STOP
5649 AT_CLEANUP
5650
5651 AT_SETUP([ofproto-dpif - idle_age and hard_age increase over time])
5652 OVS_VSWITCHD_START
5653
5654 # get_ages DURATION HARD IDLE
5655 #
5656 # Fetch the flow duration, hard age, and idle age into the variables
5657 # whose names are given as arguments.  Rounds DURATION down to the
5658 # nearest integer.  If hard_age doesn't appear in the output, sets
5659 # HARD to "none".  If idle_age doesn't appear in the output, sets IDLE
5660 # to 0.
5661 get_ages () {
5662     AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
5663
5664     duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
5665     AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
5666     AS_VAR_COPY([$1], [duration])
5667
5668     hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
5669     if test X"$hard" = X; then
5670         hard=none
5671     else
5672         AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
5673     fi
5674     AS_VAR_COPY([$2], [hard])
5675
5676     idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
5677     if test X"$idle" = X; then
5678         idle=0
5679     else
5680         AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
5681     fi
5682     AS_VAR_COPY([$3], [idle])
5683 }
5684
5685 # Add a flow and get its initial hard and idle age.
5686 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
5687 get_ages duration1 hard1 idle1
5688
5689 ovs-appctl time/stop
5690 # Warp time forward by 10 seconds, then modify the flow's actions.
5691 ovs-appctl time/warp 10000
5692 get_ages duration2 hard2 idle2
5693 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
5694
5695 # Warp time forward by 10 seconds.
5696 ovs-appctl time/warp 10000
5697 get_ages duration3 hard3 idle3
5698
5699 # Warp time forward 10 more seconds, then pass some packets through the flow,
5700 # then warp forward a few more times because idle times are only updated
5701 # occasionally.
5702 ovs-appctl time/warp 10000
5703 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)'
5704 ovs-appctl time/warp 3000 1000
5705 sleep 1
5706 get_ages duration4 hard4 idle4
5707
5708 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
5709 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
5710 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
5711
5712 # Duration should increase steadily over time.
5713 AT_CHECK([test $duration1 -lt $duration2])
5714 AT_CHECK([test $duration2 -lt $duration3])
5715 AT_CHECK([test $duration3 -lt $duration4])
5716
5717 # Hard age should be "none" initially because it's the same as flow_duration,
5718 # then it should increase.
5719 AT_CHECK([test $hard1 = none])
5720 AT_CHECK([test $hard2 = none])
5721 AT_CHECK([test $hard3 != none])
5722 AT_CHECK([test $hard4 != none])
5723 AT_CHECK([test $hard3 -lt $hard4])
5724
5725 # Idle age should increase from 1 to 2 to 3, then decrease.
5726 AT_CHECK([test $idle1 -lt $idle2])
5727 AT_CHECK([test $idle2 -lt $idle3])
5728 AT_CHECK([test $idle3 -gt $idle4])
5729
5730 # Check some invariant relationships.
5731 AT_CHECK([test $duration1 = $idle1])
5732 AT_CHECK([test $duration2 = $idle2])
5733 AT_CHECK([test $duration3 = $idle3])
5734 AT_CHECK([test $idle3 -gt $hard3])
5735 AT_CHECK([test $idle4 -lt $hard4])
5736 AT_CHECK([test $hard4 -lt $duration4])
5737
5738 OVS_VSWITCHD_STOP
5739 AT_CLEANUP
5740
5741 AT_SETUP([ofproto-dpif - fin_timeout])
5742 OVS_VSWITCHD_START
5743 ovs-appctl time/stop
5744 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
5745 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5746 [NXST_FLOW reply:
5747  idle_timeout=60, actions=fin_timeout(idle_timeout=5)
5748 ])
5749
5750 # Check that a TCP SYN packet does not change the timeout.  (Because
5751 # flow stats updates are mainly what implements the fin_timeout
5752 # feature, we warp forward a couple of times to ensure that flow stats
5753 # run before re-checking the flow table.)
5754 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
5755 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
5756 warped
5757 ])
5758 AT_CHECK([ovs-appctl revalidator/purge], [0])
5759 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5760 [NXST_FLOW reply:
5761  n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
5762 ])
5763 # Check that a TCP FIN packet does change the timeout.
5764 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
5765 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
5766 warped
5767 ])
5768 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5769 [NXST_FLOW reply:
5770  n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
5771 ])
5772 OVS_VSWITCHD_STOP
5773 AT_CLEANUP
5774
5775 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
5776 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
5777 ADD_OF_PORTS([br0], [1], [2])
5778 ADD_OF_PORTS([br1], [3])
5779
5780 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
5781 dummy@br0
5782 dummy@br1
5783 ])
5784 OVS_VSWITCHD_STOP
5785 AT_CLEANUP
5786
5787 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
5788 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
5789 ADD_OF_PORTS([br0], [1], [2])
5790 ADD_OF_PORTS([br1], [3])
5791
5792 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5793 dummy@ovs-dummy: hit:0 missed:0
5794         br0:
5795                 br0 65534/100: (dummy)
5796                 p1 1/1: (dummy)
5797                 p2 2/2: (dummy)
5798         br1:
5799                 br1 65534/101: (dummy)
5800                 p3 3/3: (dummy)
5801 ])
5802 OVS_VSWITCHD_STOP
5803 AT_CLEANUP
5804
5805 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
5806 # bump max-idle to avoid the flows being reclaimed behind us
5807 OVS_VSWITCHD_START([add-br br1 -- \
5808                     set bridge br1 datapath-type=dummy fail-mode=secure -- \
5809                     set Open_vSwitch . other_config:max-idle=10000])
5810 ADD_OF_PORTS([br0], [1], [2])
5811 ADD_OF_PORTS([br1], [3])
5812
5813 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)'])
5814 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)'])
5815 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)'])
5816 ovs-appctl revalidator/wait
5817 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5818 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5819 recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5820 ])
5821
5822 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5823 recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5824 ])
5825
5826 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5827 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
5828 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
5829 ])
5830
5831 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5832 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
5833 ])
5834
5835 OVS_VSWITCHD_STOP
5836 AT_CLEANUP
5837
5838 AT_SETUP([ofproto-dpif - ovs-appctl dpif/get-flow])
5839
5840 OVS_VSWITCHD_START([add-br br1 -- \
5841                     set bridge br1 datapath-type=dummy fail-mode=secure -- \
5842                     set Open_vSwitch . other_config:max-idle=10000])
5843 ADD_OF_PORTS([br0], [1], [2])
5844
5845 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)'])
5846 ovs-appctl revalidator/wait
5847 AT_CHECK([ovs-appctl dpif/dump-flows -m br0], [0], [stdout])
5848
5849 UFID=`sed -n 's/\(ufid:[[-0-9a-fA-F]]*\).*/\1/p' stdout`
5850 AT_CHECK([ovs-appctl dpctl/get-flow $UFID], [0], [dnl
5851 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5852 ])
5853
5854 OVS_VSWITCHD_STOP
5855 AT_CLEANUP
5856
5857 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
5858 OVS_VSWITCHD_START([dnl
5859    add-port br0 p1 -- set Interface p1 type=dummy
5860 ])
5861 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5862 on_exit 'kill `cat ovs-ofctl.pid`'
5863
5864 AT_CAPTURE_FILE([ofctl_monitor.log])
5865 AT_DATA([flows.txt], [dnl
5866 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
5867 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
5868 ])
5869 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5870
5871 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
5872 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
5873 dnl
5874 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
5875 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)
5876 dnl         (label 20, exp 0, [S], ttl 32)
5877 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
5878 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
5879
5880 for dl_src in 00 01; do
5881     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"])
5882 done
5883 sleep 1  # wait for the datapath flow installed
5884 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5885 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))
5886 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))
5887 ])
5888
5889 OVS_VSWITCHD_STOP
5890 AT_CLEANUP
5891
5892
5893 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
5894 OVS_VSWITCHD_START([dnl
5895    add-port br0 p1 -- set Interface p1 type=dummy
5896 ])
5897 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5898 on_exit 'kill `cat ovs-ofctl.pid`'
5899
5900 AT_CAPTURE_FILE([ofctl_monitor.log])
5901 AT_DATA([flows.txt], [dnl
5902 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
5903 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
5904 ])
5905 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5906
5907 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
5908 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
5909 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
5910 dnl
5911 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
5912 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)
5913 dnl         (label 20, exp 0, ttl 32)
5914 dnl         (label 20, exp 0, ttl 32)
5915 dnl         (label 20, exp 0, [S], ttl 32)
5916 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
5917 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
5918
5919 for dl_src in 00 01; do
5920     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"])
5921 done
5922 sleep 1  # wait for the datapath flow installed
5923 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5924 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))
5925 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))
5926 ])
5927
5928 OVS_VSWITCHD_STOP
5929 AT_CLEANUP
5930
5931 AT_SETUP([ofproto-dpif - patch ports])
5932 OVS_VSWITCHD_START([add-br br1 \
5933 -- set bridge br1 datapath-type=dummy fail-mode=secure \
5934 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
5935 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
5936
5937 ADD_OF_PORTS([br0], [2])
5938 ADD_OF_PORTS([br1], [3])
5939
5940 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
5941 ], [])
5942 AT_CHECK([ovs-appctl time/stop])
5943 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5944
5945 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
5946 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
5947
5948 for i in $(seq 1 10); do
5949     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)'
5950     if [[ $i -eq 1 ]]; then
5951         sleep 1
5952     fi
5953 done
5954
5955 for i in $(seq 1 5); do
5956     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)'
5957     if [[ $i -eq 1 ]]; then
5958         sleep 1
5959     fi
5960 done
5961
5962 AT_CHECK([ovs-appctl time/warp 500], [0],
5963 [warped
5964 ])
5965 sleep 1  # wait for log writer
5966
5967 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5968 dummy@ovs-dummy: hit:13 missed:2
5969         br0:
5970                 br0 65534/100: (dummy)
5971                 p2 2/2: (dummy)
5972                 pbr0 1/none: (patch: peer=pbr1)
5973         br1:
5974                 br1 65534/101: (dummy)
5975                 p3 3/3: (dummy)
5976                 pbr1 1/none: (patch: peer=pbr0)
5977 ])
5978
5979 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5980 recirc_id=0,ip,in_port=100,vlan_tci=0x0000,nw_frag=no, actions:101,3,2
5981 recirc_id=0,ip,in_port=101,vlan_tci=0x0000,nw_frag=no, actions:100,2,3
5982 ])
5983
5984 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
5985 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
5986 ])
5987 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
5988 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
5989 ])
5990
5991 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
5992 OFPST_PORT reply (xid=0x4): 1 ports
5993   port  1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
5994            tx pkts=10, bytes=600, drop=0, errs=0, coll=0
5995 ])
5996
5997 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
5998 OFPST_PORT reply (xid=0x4): 1 ports
5999   port  1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
6000            tx pkts=5, bytes=300, drop=0, errs=0, coll=0
6001 ])
6002
6003 OVS_VSWITCHD_STOP
6004 AT_CLEANUP
6005
6006 AT_SETUP([ofproto-dpif - patch ports - stack])
6007 OVS_VSWITCHD_START([add-br br1 \
6008 -- set bridge br1 datapath-type=dummy fail-mode=secure \
6009 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
6010 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
6011
6012 ADD_OF_PORTS([br0], [2])
6013 ADD_OF_PORTS([br1], [3])
6014
6015 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
6016 ], [])
6017 AT_CHECK([ovs-appctl time/stop])
6018 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6019
6020 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"])
6021 # Try to pop from empty stack, and push and leave data to stack.
6022 AT_CHECK([ovs-ofctl add-flow br1 "ip actions=pop:OXM_OF_IPV4_DST[[0..31]],push:NXM_NX_REG1[[0..31]],LOCAL"])
6023
6024 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)'
6025
6026 AT_CHECK([ovs-appctl time/warp 500], [0],
6027 [warped
6028 ])
6029
6030 OVS_WAIT_UNTIL([test `grep flow_add ovs-vswitchd.log | wc -l` -ge 1])
6031
6032 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
6033 dummy@ovs-dummy: hit:0 missed:1
6034         br0:
6035                 br0 65534/100: (dummy)
6036                 p2 2/2: (dummy)
6037                 pbr0 1/none: (patch: peer=pbr1)
6038         br1:
6039                 br1 65534/101: (dummy)
6040                 p3 3/3: (dummy)
6041                 pbr1 1/none: (patch: peer=pbr0)
6042 ])
6043
6044 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
6045 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
6046 ])
6047
6048 AT_CHECK([cat ovs-vswitchd.log | grep -e '|nx_match|WARN|' | sed "s/^.*|WARN|//"], [0], [dnl
6049 Failed to pop from an empty stack. On flow
6050 ])
6051
6052 OVS_VSWITCHD_STOP(["/Failed to pop from an empty stack/d"])
6053 AT_CLEANUP
6054
6055 AT_SETUP([ofproto-dpif - port duration])
6056 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
6057 ADD_OF_PORTS([br0], 1, 2)
6058
6059 ovs-appctl time/stop
6060 ovs-appctl time/warp 10000
6061
6062 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
6063 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
6064 [dnl
6065            duration=?s
6066            duration=?s
6067            duration=?s
6068 ])
6069 OVS_VSWITCHD_STOP
6070 AT_CLEANUP
6071
6072 dnl ----------------------------------------------------------------------
6073 AT_BANNER([ofproto-dpif -- megaflows])
6074
6075 AT_SETUP([ofproto-dpif megaflow - port classification])
6076 OVS_VSWITCHD_START
6077 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6078 ADD_OF_PORTS([br0], [1], [2])
6079 AT_DATA([flows.txt], [dnl
6080 table=0 in_port=1 actions=output(2)
6081 ])
6082 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6083 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
6084 sleep 1
6085 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)'])
6086 sleep 1
6087 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6088 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_frag=no, actions: <del>
6089 ])
6090 OVS_VSWITCHD_STOP
6091 AT_CLEANUP
6092
6093 AT_SETUP([ofproto-dpif megaflow - L2 classification])
6094 OVS_VSWITCHD_START
6095 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6096 ADD_OF_PORTS([br0], [1], [2])
6097 AT_DATA([flows.txt], [dnl
6098 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
6099 ])
6100 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6101 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)'])
6102 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)'])
6103 sleep 1
6104 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6105 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6106 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>
6107 ])
6108 OVS_VSWITCHD_STOP
6109 AT_CLEANUP
6110
6111 AT_SETUP([ofproto-dpif megaflow - L3 classification])
6112 OVS_VSWITCHD_START
6113 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6114 ADD_OF_PORTS([br0], [1], [2])
6115 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], [])
6116 AT_DATA([flows.txt], [dnl
6117 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
6118 ])
6119 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6120 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)'])
6121 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)'])
6122 sleep 1
6123 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6124 recirc_id=0,icmp,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_frag=no, actions: <del>
6125 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>
6126 ])
6127 OVS_VSWITCHD_STOP
6128 AT_CLEANUP
6129
6130 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
6131 OVS_VSWITCHD_START
6132 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6133 ADD_OF_PORTS([br0], [1], [2])
6134 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], [])
6135 AT_DATA([flows.txt], [dnl
6136 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
6137 ])
6138 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6139 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)'])
6140 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)'])
6141 sleep 1
6142 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6143 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>
6144 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>
6145 ])
6146 OVS_VSWITCHD_STOP
6147 AT_CLEANUP
6148
6149 AT_SETUP([ofproto-dpif megaflow - L4 classification])
6150 OVS_VSWITCHD_START
6151 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6152 ADD_OF_PORTS([br0], [1], [2])
6153 AT_DATA([flows.txt], [dnl
6154 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
6155 ])
6156 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6157 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)'])
6158 sleep 1
6159 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
6160 sleep 1
6161 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6162 recirc_id=0,icmp,in_port=1,vlan_tci=0x0000,nw_frag=no,icmp_type=0x8/0xff, actions: <del>
6163 ])
6164 OVS_VSWITCHD_STOP
6165 AT_CLEANUP
6166
6167 AT_SETUP([ofproto-dpif megaflow - normal])
6168 OVS_VSWITCHD_START
6169 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6170 ADD_OF_PORTS([br0], [1], [2])
6171 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6172 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)'])
6173 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)'])
6174 sleep 1
6175 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6176 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>
6177 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>
6178 ])
6179 OVS_VSWITCHD_STOP
6180 AT_CLEANUP
6181
6182 AT_SETUP([ofproto-dpif megaflow - mpls])
6183 OVS_VSWITCHD_START
6184 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6185 ADD_OF_PORTS([br0], [1], [2])
6186 AT_DATA([flows.txt], [dnl
6187 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
6188 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
6189 ])
6190 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6191 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)'])
6192 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)'])
6193 sleep 1
6194 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6195 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>
6196 recirc_id=0,mpls,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,mpls_bos=1, actions: <del>
6197 ])
6198 OVS_VSWITCHD_STOP
6199 AT_CLEANUP
6200
6201 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR)
6202 m4_define([CHECK_MEGAFLOW_NETFLOW],
6203   [OVS_VSWITCHD_START
6204   AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6205   ADD_OF_PORTS([br0], [1], [2])
6206
6207   dnl NetFlow configuration disables wildcarding relevant fields
6208   on_exit 'kill `cat test-netflow.pid`'
6209   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
6210   AT_CAPTURE_FILE([netflow.log])
6211   PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
6212   ovs-vsctl \
6213      set Bridge br0 netflow=@nf -- \
6214      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
6215        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
6216
6217   AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6218   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)'])
6219   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)'])
6220   sleep 1
6221   AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6222 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>
6223 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>
6224 ])
6225   OVS_VSWITCHD_STOP])
6226
6227 AT_SETUP([ofproto-dpif megaflow - netflow - IPv4 collector])
6228 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
6229 AT_CLEANUP
6230
6231 AT_SETUP([ofproto-dpif megaflow - netflow - IPv6 collector])
6232 AT_SKIP_IF([test $HAVE_IPV6 = no])
6233 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
6234 AT_CLEANUP
6235
6236 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
6237 OVS_VSWITCHD_START(
6238   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
6239    add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
6240    set interface p2 type=dummy ofport_request=2 -- \
6241    set interface p3 type=dummy ofport_request=3])
6242 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6243 ])
6244 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6245
6246 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6247 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)'])
6248 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)'])
6249 sleep 1
6250 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6251 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>
6252 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>
6253 ])
6254 OVS_VSWITCHD_STOP
6255 AT_CLEANUP
6256
6257 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
6258 OVS_VSWITCHD_START(
6259   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
6260    add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
6261    set interface p2 type=dummy ofport_request=2 -- \
6262    set interface p3 type=dummy ofport_request=3])
6263 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6264 ])
6265 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6266
6267 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6268 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)'])
6269 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)'])
6270 sleep 1
6271 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6272 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>
6273 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>
6274 ])
6275 OVS_VSWITCHD_STOP
6276 AT_CLEANUP
6277
6278 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
6279 # Create bond0 on br0 with interfaces p0 and p1
6280 #    and bond1 on br1 with interfaces p2 and p3
6281 # with p0 patched to p2 and p1 patched to p3.
6282 OVS_VSWITCHD_START(
6283   [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
6284                             other-config:lacp-time=fast \
6285                             other-config:bond-rebalance-interval=0 -- \
6286    set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
6287    set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
6288    add-br br1 -- \
6289    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
6290    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
6291                   fail-mode=secure -- \
6292    add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
6293                             other-config:lacp-time=fast \
6294                             other-config:bond-rebalance-interval=0 -- \
6295    set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
6296    set interface p3 type=patch options:peer=p1 ofport_request=4 --])
6297
6298 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6299 ])
6300 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6301 ADD_OF_PORTS([br0], [7])
6302 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6303 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
6304 ovs-appctl time/stop
6305 ovs-appctl time/warp 5000
6306 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)'])
6307 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)'])
6308 sleep 1
6309 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6310 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>
6311 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>
6312 ])
6313 OVS_VSWITCHD_STOP
6314 AT_CLEANUP
6315
6316 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
6317 OVS_VSWITCHD_START
6318 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6319 ADD_OF_PORTS([br0], [1], [2])
6320 AT_DATA([flows.txt], [dnl
6321 table=0 in_port=1,ip actions=resubmit(90)
6322 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
6323 ])
6324 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6325 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)'])
6326 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)'])
6327 sleep 1
6328 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6329 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6330 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>
6331 ])
6332 OVS_VSWITCHD_STOP
6333 AT_CLEANUP
6334
6335 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
6336 OVS_VSWITCHD_START
6337 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6338 ADD_OF_PORTS([br0], [1], [2])
6339 AT_DATA([flows.txt], [dnl
6340 table=0 in_port=1,ip actions=resubmit(,1)
6341 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
6342 ])
6343 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6344 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)'])
6345 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=
6346 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
6347 sleep 1
6348 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6349 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6350 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
6351 ])
6352 OVS_VSWITCHD_STOP
6353 AT_CLEANUP
6354
6355 AT_SETUP([ofproto-dpif megaflow - goto_table action])
6356 OVS_VSWITCHD_START
6357 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6358 ADD_OF_PORTS([br0], [1], [2])
6359 AT_DATA([flows.txt], [dnl
6360 table=0 in_port=1,ip actions=goto_table(1)
6361 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
6362 ])
6363 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
6364 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)'])
6365 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)'])
6366 sleep 1
6367 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6368 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6369 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
6370 ])
6371 OVS_VSWITCHD_STOP
6372 AT_CLEANUP
6373
6374 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
6375 OVS_VSWITCHD_START
6376 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6377 ADD_OF_PORTS([br0], [1], [2], [3])
6378 ovs-vsctl \
6379         set Bridge br0 mirrors=@m --\
6380         --id=@p3 get Port p3 --\
6381         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
6382
6383 AT_DATA([flows.txt], [dnl
6384 in_port=1 actions=output:2
6385 ])
6386 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6387 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)'])
6388 sleep 1
6389 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)'])
6390 sleep 1
6391 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6392 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_frag=no, actions: <del>
6393 ])
6394 OVS_VSWITCHD_STOP
6395 AT_CLEANUP
6396
6397 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
6398 OVS_VSWITCHD_START
6399 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6400 ADD_OF_PORTS([br0], [1], [2], [3])
6401 ovs-vsctl \
6402         set Bridge br0 mirrors=@m --\
6403         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
6404         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
6405
6406 AT_DATA([flows.txt], [dnl
6407 in_port=1 actions=output:2
6408 ])
6409 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6410 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))'])
6411 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)'])
6412 sleep 1
6413 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6414 recirc_id=0,ip,in_port=1,dl_vlan=11,nw_frag=no, actions: <del>
6415 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, actions: <del>
6416 ])
6417 OVS_VSWITCHD_STOP
6418 AT_CLEANUP
6419
6420 AT_SETUP([ofproto-dpif megaflow - move action])
6421 OVS_VSWITCHD_START
6422 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6423 ADD_OF_PORTS([br0], [1], [2])
6424 AT_DATA([flows.txt], [dnl
6425 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
6426 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
6427 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
6428 ])
6429 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6430 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)'])
6431 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)'])
6432 sleep 1
6433 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6434 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.2,nw_frag=no, actions: <del>
6435 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_frag=no, actions: <del>
6436 ])
6437 OVS_VSWITCHD_STOP
6438 AT_CLEANUP
6439
6440 AT_SETUP([ofproto-dpif megaflow - push action])
6441 OVS_VSWITCHD_START
6442 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6443 ADD_OF_PORTS([br0], [1], [2])
6444 AT_DATA([flows.txt], [dnl
6445 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
6446 ])
6447 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6448 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)'])
6449 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)'])
6450 sleep 1
6451 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6452 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.2,nw_frag=no, actions: <del>
6453 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_frag=no, actions: <del>
6454 ])
6455 OVS_VSWITCHD_STOP
6456 AT_CLEANUP
6457
6458 AT_SETUP([ofproto-dpif megaflow - learning])
6459 OVS_VSWITCHD_START
6460 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6461 ADD_OF_PORTS([br0], [1], [2])
6462 AT_DATA([flows.txt], [dnl
6463 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
6464 ])
6465 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6466 ovs-appctl time/stop
6467 # We send each packet twice because the first packet in each flow causes the
6468 # flow table to change and thus revalidations, which (depending on timing)
6469 # can keep a megaflow from being installed.  The revalidations are done by
6470 # the second iteration, allowing the flows to be installed.
6471 for i in 1 2; do
6472     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)'])
6473     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)'])
6474     ovs-appctl time/warp 100
6475 done
6476 sleep 1
6477 dnl The original flow is missing due to a revalidation.
6478 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6479 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6480 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
6481 ])
6482 OVS_VSWITCHD_STOP
6483 AT_CLEANUP
6484
6485 AT_SETUP([ofproto-dpif megaflow - tunnels])
6486 OVS_VSWITCHD_START(
6487   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
6488 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6489 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
6490      options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
6491 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
6492           ofport_request=3])
6493 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
6494      options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
6495      ofport_request=4 options:key=flow])
6496 AT_DATA([flows.txt], [dnl
6497 in_port=1,actions=output(2)
6498 in_port=3,actions=output(4)
6499 ])
6500 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6501 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
6502 dnl will cause the packet to be dropped.
6503 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)'])
6504 sleep 1
6505 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)'])
6506 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)'])
6507 sleep 1
6508 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)'])
6509 sleep 1
6510 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6511 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_ecn=1,nw_frag=no, actions: <del>
6512 recirc_id=0,ip,in_port=3,vlan_tci=0x0000,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no, actions: <del>
6513 recirc_id=0,ip,in_port=3,vlan_tci=0x0000,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no, actions: <del>
6514 ])
6515 OVS_VSWITCHD_STOP
6516 AT_CLEANUP
6517
6518 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
6519 OVS_VSWITCHD_START
6520 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6521 ADD_OF_PORTS([br0], [1], [2])
6522 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], [])
6523 AT_DATA([flows.txt], [dnl
6524 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
6525 ])
6526 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6527 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)'])
6528 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)'])
6529 sleep 1
6530 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6531 recirc_id=0,icmp,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_ttl=64,nw_frag=no, actions: <del>
6532 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>
6533 ])
6534 OVS_VSWITCHD_STOP
6535 AT_CLEANUP
6536
6537 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
6538 OVS_VSWITCHD_START
6539 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6540 ADD_OF_PORTS([br0], [1], [2])
6541 AT_DATA([flows.txt], [dnl
6542 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
6543 ])
6544 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6545 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)'])
6546 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)'])
6547 sleep 1
6548 dnl The first packet is essentially a no-op, as the new destination MAC is the
6549 dnl same as the original.  The second entry actually updates the destination
6550 dnl MAC.
6551 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
6552 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions:2
6553 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
6554 ])
6555 OVS_VSWITCHD_STOP
6556 AT_CLEANUP
6557
6558 AT_SETUP([ofproto-dpif megaflow - disabled])
6559 OVS_VSWITCHD_START
6560 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6561 ADD_OF_PORTS([br0], [1], [2])
6562 AT_DATA([flows.txt], [dnl
6563 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
6564 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
6565 ])
6566 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
6567 ], [])
6568 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
6569 ], [])
6570 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
6571 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6572 for i in 1 2 3 4; do
6573     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)'])
6574     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)'])
6575     if [[ $i -eq 1 ]]; then
6576         sleep 1
6577     fi
6578 done
6579 sleep 1
6580 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
6581 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
6582 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
6583 ])
6584 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
6585 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
6586 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
6587 ])
6588 OVS_VSWITCHD_STOP
6589 AT_CLEANUP
6590
6591 AT_SETUP([ofproto-dpif - datapath port number change])
6592 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
6593 ADD_OF_PORTS([br0], 1)
6594
6595 # Trace a flow that should output to p1.
6596 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
6597   [0], [stdout])
6598 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
6599 ])
6600
6601 # Change p1's port number to 5.
6602 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
6603
6604 # Trace a flow that should output to p1 in its new location.
6605 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
6606   [0], [stdout])
6607 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
6608 ])
6609 OVS_VSWITCHD_STOP
6610 AT_CLEANUP
6611
6612 # Tests the bundling with various bfd and cfm configurations.
6613 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
6614 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
6615                     add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
6616                     add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
6617                     set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
6618                     set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
6619                     set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
6620                     set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
6621                     set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
6622                     set Interface p0 cfm_mpid=1 -- \
6623                     set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
6624
6625 ovs-appctl time/stop
6626 # advance the clock to stablize everything.
6627 ovs-appctl time/warp 5000 100
6628 # cfm/show should show 'recv' fault.
6629 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6630         fault: recv
6631 ])
6632 # bfd/show should show 'up'.
6633 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6634         Local Session State: up
6635         Remote Session State: up
6636         Local Session State: up
6637         Remote Session State: up
6638 ])
6639 # bond/show should show 'may-enable: true' for all slaves.
6640 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6641         may_enable: true
6642         may_enable: true
6643         may_enable: true
6644         may_enable: true
6645 ])
6646
6647 # now disable the bfd on p1.
6648 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
6649 # advance the clock to stablize everything.
6650 ovs-appctl time/warp 5000 100
6651 # cfm/show should show 'recv' fault.
6652 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6653         fault: recv
6654 ])
6655 # bfd/show should show 'down'.
6656 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6657         Local Session State: down
6658         Remote Session State: down
6659 ])
6660 # bond/show should show 'may-enable: false' for p0.
6661 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6662         may_enable: false
6663         may_enable: true
6664 ])
6665
6666 # now enable the bfd on p1 and disable bfd on p0.
6667 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
6668 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
6669 # advance the clock to stablize everything.
6670 ovs-appctl time/warp 5000 100
6671 # cfm/show should show 'recv' fault.
6672 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6673         fault: recv
6674 ])
6675 # bfd/show should show 'down'.
6676 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6677         Local Session State: down
6678         Remote Session State: down
6679 ])
6680 # bond/show should show 'may-enable: false' for p0 and p1.
6681 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6682         may_enable: false
6683         may_enable: true
6684         may_enable: false
6685         may_enable: true
6686 ])
6687
6688 OVS_VSWITCHD_STOP
6689 AT_CLEANUP
6690
6691 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
6692 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
6693
6694 # enable bfd on p0.
6695 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
6696 # check log.
6697 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
6698 # disable bfd on p0.
6699 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
6700 # check log.
6701 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
6702 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
6703
6704 # enable cfm on p0.
6705 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
6706 # check log.
6707 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
6708 # disable cfm on p0.
6709 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
6710 # check log.
6711 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
6712 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
6713
6714 # enable both bfd and cfm on p0.
6715 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
6716 # check log.
6717 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
6718 # disable bfd on p0.
6719 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
6720 # check log, there should not be the log of thread terminated.
6721 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
6722 ])
6723 # reenable bfd on p0.
6724 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
6725 # check log, should still be on log of thread created.
6726 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
6727 monitor thread created
6728 ])
6729 # disable bfd and cfm together.
6730 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
6731 # check log.
6732 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
6733
6734 OVS_VSWITCHD_STOP
6735 AT_CLEANUP
6736
6737 # this test helps avoid the deadlock between the main thread and monitor thread.
6738 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
6739 OVS_VSWITCHD_START
6740
6741 for i in `seq 1 199`
6742 do
6743     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])
6744 done
6745
6746 OVS_VSWITCHD_STOP
6747 AT_CLEANUP
6748 \f
6749 AT_BANNER([ofproto-dpif - flow translation resource limits])
6750
6751 AT_SETUP([ofproto-dpif - infinite resubmit])
6752 OVS_VSWITCHD_START
6753 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
6754 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
6755   [0], [stdout])
6756 AT_CHECK([tail -1 stdout], [0],
6757   [Translation failed (Recursion too deep), packet is dropped.
6758 ])
6759 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' stdout],
6760   [0], [1
6761 ])
6762 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
6763 AT_CLEANUP
6764
6765 AT_SETUP([ofproto-dpif - exponential resubmit chain])
6766 OVS_VSWITCHD_START
6767 ADD_OF_PORTS([br0], 1)
6768 (for i in `seq 1 64`; do
6769      j=`expr $i + 1`
6770      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6771  done
6772  echo "in_port=65, actions=local") > flows
6773  AT_CHECK([ovs-ofctl add-flows br0 flows])
6774 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
6775 AT_CHECK([tail -1 stdout], [0],
6776   [Translation failed (Too many resubmits), packet is dropped.
6777 ])
6778 AT_CHECK([grep -c 'over 4096 resubmit actions' stdout], [0], [1
6779 ])
6780 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
6781 AT_CLEANUP
6782
6783 AT_SETUP([ofproto-dpif - too many output actions])
6784 OVS_VSWITCHD_START
6785 ADD_OF_PORTS([br0], 1)
6786 (for i in `seq 1 12`; do
6787      j=`expr $i + 1`
6788      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6789  done
6790  echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
6791 AT_CHECK([ovs-ofctl add-flows br0 flows])
6792 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
6793 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
6794   [0], [1
6795 ])
6796 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' stdout], [0], [1
6797 ])
6798 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
6799 AT_CLEANUP
6800
6801 AT_SETUP([ofproto-dpif - stack too deep])
6802 OVS_VSWITCHD_START
6803 ADD_OF_PORTS([br0], 1)
6804 (for i in `seq 1 12`; do
6805      j=`expr $i + 1`
6806      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6807  done
6808  push="push:NXM_NX_REG0[[]]"
6809  echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
6810  AT_CHECK([ovs-ofctl add-flows br0 flows])
6811 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
6812 AT_CHECK([tail -1 stdout], [0],
6813   [Translation failed (Stack too deep), packet is dropped.
6814 ])
6815 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' stdout], [0], [1
6816 ])
6817 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
6818 AT_CLEANUP
6819
6820
6821 AT_SETUP([ofproto-dpif packet-out controller])
6822 OVS_VSWITCHD_START
6823 ADD_OF_PORTS([br0], 1, 2)
6824
6825 AT_CHECK([ovs-ofctl add-flow br0 'dl_dst=50:54:00:00:00:0a actions=controller'])
6826
6827 AT_CAPTURE_FILE([ofctl_monitor.log])
6828 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6829
6830 for i in 1 2 3; do
6831         AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER controller '50540000000a5054000000091234'])
6832 done
6833
6834 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6835 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6836 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6837 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6838 dnl
6839 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6840 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6841 dnl
6842 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6843 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6844 ])
6845
6846 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
6847  dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6848 NXST_FLOW reply:
6849 ])
6850
6851 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6852   table 0:
6853     active=1, lookup=0, matched=0
6854
6855   table 1:
6856     active=0, lookup=0, matched=0
6857 "
6858  for i in `seq 2 253`; do
6859      printf '  table %d: ditto\n' $i
6860  done) > expout
6861 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6862
6863 OVS_VSWITCHD_STOP
6864 AT_CLEANUP
6865
6866 AT_SETUP([ofproto-dpif packet-out controller (patch port)])
6867 OVS_VSWITCHD_START(
6868   [-- \
6869    add-port br0 p1 -- \
6870    set interface p1 type=patch options:peer=p2 -- \
6871    add-br br1 -- \
6872    set bridge br1 datapath-type=dummy -- \
6873    set bridge br1 fail-mode=secure -- \
6874    set bridge br1 protocols='[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13]' -- \
6875    add-port br1 p2 -- \
6876    set interface p2 type=patch options:peer=p1 --])
6877
6878 AT_CAPTURE_FILE([ofctl_monitor.log])
6879 AT_CHECK([ovs-ofctl monitor br1 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6880
6881 for i in 1 2 3; do
6882         AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER output:1 '50540000000a5054000000091234'])
6883 done
6884
6885 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6886 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6887 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
6888 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6889 dnl
6890 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
6891 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6892 dnl
6893 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
6894 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6895 ])
6896
6897 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6898   table 0:
6899     active=0, lookup=0, matched=0
6900 "
6901  for i in `seq 1 253`; do
6902      printf '  table %d: ditto\n' $i
6903  done) > expout
6904 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6905
6906 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6907   table 0:
6908     active=0, lookup=3, matched=0
6909
6910   table 1:
6911     active=0, lookup=0, matched=0
6912 "
6913  for i in `seq 2 253`; do
6914      printf '  table %d: ditto\n' $i
6915  done) > expout
6916 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br1 ], [0], [expout])
6917
6918 OVS_VSWITCHD_STOP
6919 AT_CLEANUP
6920
6921
6922 AT_SETUP([ofproto-dpif packet-out goto_table])
6923 OVS_VSWITCHD_START
6924 ADD_OF_PORTS([br0], 1, 2)
6925
6926 AT_DATA([flows.txt], [dnl
6927 table=0 dl_dst=50:54:00:00:00:0a actions=goto_table(1)
6928 table=1 dl_dst=50:54:00:00:00:0a actions=controller
6929 ])
6930 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
6931
6932 AT_CAPTURE_FILE([ofctl_monitor.log])
6933 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6934
6935 for i in 1 2 3; do
6936     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)'
6937 done
6938
6939 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6940 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6941 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6942 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6943 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6944 dnl
6945 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6946 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6947 dnl
6948 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6949 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6950 ])
6951
6952 AT_CHECK([ovs-appctl revalidator/purge], [0])
6953 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
6954  n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=goto_table:1
6955  table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6956 OFPST_FLOW reply (OF1.3):
6957 ])
6958
6959 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6960   table 0:
6961     active=1, lookup=3, matched=3
6962
6963   table 1: ditto
6964   table 2:
6965     active=0, lookup=0, matched=0
6966 "
6967  for i in `seq 3 253`; do
6968      printf '  table %d: ditto\n' $i
6969  done) > expout
6970 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6971
6972 OVS_VSWITCHD_STOP
6973 AT_CLEANUP
6974
6975
6976 AT_SETUP([ofproto-dpif packet-out table-miss (continue)])
6977 OVS_VSWITCHD_START
6978 ADD_OF_PORTS([br0], 1, 2)
6979
6980 AT_CHECK([ovs-ofctl -O OpenFlow11 add-flow br0 'table=1 dl_dst=50:54:00:00:00:0a actions=controller'])
6981 AT_CHECK([ovs-ofctl -O OpenFlow11 mod-table br0 all continue])
6982
6983 AT_CAPTURE_FILE([ofctl_monitor.log])
6984 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6985
6986 for i in 1 2 3; do
6987     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)'
6988 done
6989
6990 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6991 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6992 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6993 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6994 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6995 dnl
6996 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6997 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6998 dnl
6999 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
7000 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
7001 ])
7002
7003 AT_CHECK([ovs-appctl revalidator/purge], [0])
7004 AT_CHECK([ovs-ofctl -O OpenFlow11 dump-flows br0 | ofctl_strip | sort], [0], [dnl
7005  table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
7006 OFPST_FLOW reply (OF1.1):
7007 ])
7008
7009 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
7010   table 0:
7011     active=0, lookup=3, matched=0
7012
7013   table 1:
7014     active=1, lookup=3, matched=3
7015
7016   table 2:
7017     active=0, lookup=0, matched=0
7018 "
7019  for i in `seq 3 253`; do
7020      printf '  table %d: ditto\n' $i
7021  done) > expout
7022 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
7023
7024 OVS_VSWITCHD_STOP
7025 AT_CLEANUP
7026
7027 AT_SETUP([ofproto-dpif - ICMPv6])
7028 OVS_VSWITCHD_START
7029 ADD_OF_PORTS([br0], 1)
7030
7031 AT_CAPTURE_FILE([ofctl_monitor.log])
7032
7033 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
7034
7035 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
7036
7037 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
7038
7039 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
7040 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
7041 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
7042 ])
7043
7044 OVS_VSWITCHD_STOP
7045 AT_CLEANUP
7046
7047 AT_SETUP([ofproto-dpif - Neighbor Discovery set-field with checksum update])
7048 OVS_VSWITCHD_START
7049 ADD_OF_PORTS([br0], 1)
7050 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])
7051
7052 AT_CAPTURE_FILE([ofctl_monitor.log])
7053
7054 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
7055
7056 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
7057
7058 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
7059
7060 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
7061 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via action) data_len=86 (unbuffered)
7062 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
7063 ])
7064
7065 OVS_VSWITCHD_STOP
7066 AT_CLEANUP
7067
7068 # Tests the exact match of CFI bit in installed datapath flows matching VLAN.
7069 AT_SETUP([ofproto-dpif - vlan matching])
7070 OVS_VSWITCHD_START(
7071   [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
7072 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7073
7074 AT_CHECK([ovs-ofctl del-flows br0])
7075 AT_CHECK([ovs-ofctl add-flow br0 "vlan_tci=0x000a/0x0fff,action=output:local"])
7076
7077 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))'])
7078
7079 OVS_WAIT_UNTIL([grep flow_add: ovs-vswitchd.log])
7080 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port=[[1]]' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
7081 recirc_id=0,ip,in_port=1,dl_vlan=10,nw_frag=no, actions: <del>
7082 ])
7083 OVS_VSWITCHD_STOP
7084 AT_CLEANUP
7085
7086 # Tests in place modification of installed datapath flows.
7087 AT_SETUP([ofproto-dpif - in place modification])
7088 OVS_VSWITCHD_START(
7089   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
7090 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7091
7092 AT_CHECK([ovs-ofctl del-flows br0])
7093 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=mod_vlan_vid:3,output:local])
7094
7095 ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
7096
7097 ovs-appctl time/stop
7098
7099 for i in 1 2 3; do
7100     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)'
7101 done
7102
7103 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7104 recirc_id(0),in_port(1),eth_type(0x1234), packets:2, bytes:120, used:0.0s, actions:push_vlan(vid=3,pcp=0),100
7105 ])
7106
7107 AT_CHECK([ovs-ofctl add-flow br0 priority=60000,in_port=1,actions=mod_vlan_vid:4,output:local])
7108
7109 ovs-appctl time/warp 500
7110 ovs-appctl time/warp 500
7111
7112 for i in 1 2 3; do
7113     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)'
7114 done
7115
7116 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7117 recirc_id(0),in_port(1),eth_type(0x1234), packets:5, bytes:300, used:0.0s, actions:push_vlan(vid=4,pcp=0),100
7118 ])
7119
7120 AT_CHECK([cat ovs-vswitchd.log | grep 'modify' | STRIP_UFID ], [0], [dnl
7121 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
7122 ])
7123 OVS_VSWITCHD_STOP
7124 AT_CLEANUP
7125
7126 # Tests in place modification of installed datapath flows with vlans.
7127 AT_SETUP([ofproto-dpif - in place modification (vlan)])
7128 OVS_VSWITCHD_START(
7129   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
7130 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7131
7132 AT_CHECK([ovs-ofctl del-flows br0])
7133 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=output:local])
7134
7135 ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
7136
7137 ovs-appctl time/stop
7138
7139 # Check that a correct datapath flow is created.
7140 for i in 1 2 3; do
7141     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)'
7142 done
7143
7144 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7145 recirc_id(0),in_port(1),eth_type(0x1234), packets:2, bytes:120, used:0.0s, actions:100
7146 ])
7147
7148 # Delete the flow.  Then check that the datapath flow is modified to
7149 # drop the packets.  A modified flow inherits the stats, a new
7150 # datapath flow would start from sero.
7151 AT_CHECK([ovs-ofctl del-flows br0])
7152
7153 ovs-appctl time/warp 500
7154 ovs-appctl time/warp 500
7155
7156 for i in 1 2 3; do
7157     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)'
7158 done
7159
7160 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7161 recirc_id(0),in_port(1),eth_type(0x1234), packets:5, bytes:300, used:0.0s, actions:drop
7162 ])
7163
7164 # Add a flow that matches the non-presence of a vlan tag, and check
7165 # that the datapath flow is modified accordingly.
7166 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,vlan_tci=0x0000/0x1fff,actions=output:local])
7167
7168 ovs-appctl time/warp 500
7169 ovs-appctl time/warp 500
7170
7171 for i in 1 2 3; do
7172     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)'
7173 done
7174
7175 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7176 recirc_id(0),in_port(1),eth_type(0x1234), packets:8, bytes:480, used:0.0s, actions:100
7177 ])
7178
7179 # Check that VLAN packets will not hit the same datapath megaflow.
7180 for i in 1 2 3; do
7181     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))'
7182 done
7183
7184 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7185 recirc_id(0),in_port(1),eth_type(0x1234), packets:8, bytes:480, used:0.0s, actions:100
7186 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
7187 ])
7188
7189 # Check that the new flow matches the CFI bit, while both vid and pcp
7190 # are wildcarded.
7191 AT_CHECK([cat ovs-vswitchd.log | grep '\(modify\)\|\(flow_add\)' | STRIP_UFID ], [0], [dnl
7192 dpif_netdev|DBG|flow_add: recirc_id=0,in_port=1,vlan_tci=0x0000,dl_type=0x1234, actions:100
7193 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)
7194 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
7195 dpif_netdev|DBG|flow_add: recirc_id=0,in_port=1,vlan_tci=0xf063/0x1000,dl_type=0x1234, actions:drop
7196 ])
7197 OVS_VSWITCHD_STOP
7198 AT_CLEANUP