ofp-print: Decode and print all async config messages the same way.
[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 # Two testcases below are for the ofproto/trace command
4182 # The first one tests all correct syntax:
4183 # ofproto/trace [dp_name] odp_flow [-generate|packet]
4184 # ofproto/trace br_name br_flow [-generate|packet]
4185 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
4186 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
4187 ADD_OF_PORTS([br0], 1, 2, 3)
4188
4189 AT_DATA([flows.txt], [dnl
4190 in_port=1 actions=output:2
4191 in_port=2 actions=output:1
4192 ])
4193 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4194
4195 odp_flow="in_port(p1)"
4196 br_flow="in_port=1"
4197 # Test command: ofproto/trace odp_flow with in_port as a name.
4198 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4199 AT_CHECK([tail -1 stdout], [0], [dnl
4200 Datapath actions: 2
4201 ])
4202
4203 odp_flow="in_port(1)"
4204 # Test command: ofproto/trace odp_flow
4205 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4206 AT_CHECK([tail -1 stdout], [0], [dnl
4207 Datapath actions: 2
4208 ])
4209
4210 # Test command: ofproto/trace dp_name odp_flow
4211 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
4212 AT_CHECK([tail -1 stdout], [0], [dnl
4213 Datapath actions: 2
4214 ])
4215 # Test commmand: ofproto/trace br_name br_flow
4216 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
4217 AT_CHECK([tail -1 stdout], [0], [dnl
4218 Datapath actions: 2
4219 ])
4220
4221 # Delete the inserted flows
4222 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
4223 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
4224
4225 # This section below tests the [-generate] option
4226 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
4227 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"
4228
4229 # Test command: ofproto/trace odp_flow
4230 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4231 # Check for no MAC learning entry
4232 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4233  port  VLAN  MAC                Age
4234 ])
4235
4236 # Test command: ofproto/trace br_name br_flow
4237 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
4238 # Check for no MAC learning entry
4239 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4240  port  VLAN  MAC                Age
4241 ])
4242
4243 # Test command: ofproto/trace odp_flow -generate
4244 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
4245 # Check for the MAC learning entry
4246 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4247  port  VLAN  MAC                Age
4248     3     0  50:54:00:00:00:05    ?
4249 ])
4250
4251 # Test command: ofproto/trace dp_name odp_flow -generate
4252 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4253   "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
4254   -generate], [0], [stdout])
4255 # Check for both MAC learning entries
4256 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4257  port  VLAN  MAC                Age
4258     3     0  50:54:00:00:00:05    ?
4259     1     0  50:54:00:00:00:06    ?
4260 ])
4261
4262 # Test command: ofproto/trace br_name br_flow -generate
4263 AT_CHECK([ovs-appctl ofproto/trace br0 \
4264   "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
4265   -generate], [0], [stdout])
4266 # Check for both MAC learning entries.
4267 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4268  port  VLAN  MAC                Age
4269     3     0  50:54:00:00:00:05    ?
4270     1     0  50:54:00:00:00:06    ?
4271     2     0  50:54:00:00:00:07    ?
4272 ])
4273
4274 # This section beflow tests the [packet] option
4275 # The ovs-tcpundump of packets between port1 and port2
4276 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
4277 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
4278
4279 # Construct the MAC learning table
4280 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4281   "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
4282   -generate], [0], [stdout])
4283
4284 # Construct the MAC learning table
4285 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4286   "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
4287   -generate], [0], [stdout])
4288
4289 # Test command: ofproto/trace odp_flow packet
4290 AT_CHECK([ovs-appctl ofproto/trace \
4291   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
4292 AT_CHECK([tail -1 stdout], [0], [dnl
4293 Datapath actions: 2
4294 ])
4295 AT_CHECK([head -n 2 stdout], [0], [dnl
4296 Bridge: br0
4297 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
4298 ])
4299
4300 # Test command: ofproto/trace dp_name odp_flow packet
4301 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4302   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
4303 AT_CHECK([tail -1 stdout], [0], [dnl
4304 Datapath actions: 2
4305 ])
4306 AT_CHECK([head -n 2 stdout], [0], [dnl
4307 Bridge: br0
4308 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
4309 ])
4310
4311 # Test command: ofproto/trace br_name br_flow packet
4312 AT_CHECK([ovs-appctl ofproto/trace br0 \
4313   "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
4314 AT_CHECK([tail -1 stdout], [0], [dnl
4315 Datapath actions: 1
4316 ])
4317 AT_CHECK([head -n 2 stdout], [0], [dnl
4318 Bridge: br0
4319 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
4320 ])
4321
4322 OVS_VSWITCHD_STOP
4323 AT_CLEANUP
4324
4325 # The second test tests the corner cases
4326 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
4327 OVS_VSWITCHD_START
4328 ADD_OF_PORTS([br0], 1, 2)
4329
4330 # Define flows
4331 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
4332 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
4333 # Define options
4334 generate="-generate"
4335 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
4336
4337 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
4338 m4_foreach(
4339 [option],
4340 [[],
4341 ["$generate"],
4342 ["$pkt"]],
4343 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
4344   [2], [], [stderr])
4345 AT_CHECK([tail -2 stderr], [0], [dnl
4346 Cannot find the datapath
4347 ovs-appctl: ovs-vswitchd: server returned an error
4348 ])])
4349
4350 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
4351 m4_foreach(
4352 [option],
4353 [[],
4354 ["$generate"],
4355 ["$pkt"]],
4356 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
4357   [2], [], [stderr])
4358 AT_CHECK([tail -2 stderr], [0], [dnl
4359 Cannot find the datapath
4360 ovs-appctl: ovs-vswitchd: server returned an error
4361 ])])
4362
4363 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
4364 m4_foreach(
4365 [option],
4366 [[],
4367 ["$generate"],
4368 ["$pkt"]],
4369 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
4370   [2], [], [stderr])
4371 AT_CHECK([tail -2 stderr], [0], [dnl
4372 Cannot find the datapath
4373 ovs-appctl: ovs-vswitchd: server returned an error
4374 ])])
4375
4376 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
4377 m4_foreach(
4378 [option],
4379 [[],
4380 ["$generate"],
4381 ["$pkt"]],
4382 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
4383   [2], [], [stderr])
4384 AT_CHECK([tail -2 stderr], [0], [dnl
4385 Cannot find the datapath
4386 ovs-appctl: ovs-vswitchd: server returned an error
4387 ])])
4388
4389 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
4390 m4_foreach(
4391 [option],
4392 [[],
4393 ["$generate"],
4394 ["$pkt"]],
4395 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
4396   [2], [], [stderr])
4397 AT_CHECK([tail -2 stderr], [0], [dnl
4398 Unknown bridge name
4399 ovs-appctl: ovs-vswitchd: server returned an error
4400 ])])
4401
4402 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
4403 m4_foreach(
4404 [option],
4405 [[],
4406 ["$generate"],
4407 ["$pkt"]],
4408 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
4409   [2], [], [stderr])
4410 AT_CHECK([tail -2 stderr], [0], [dnl
4411 Must specify bridge name
4412 ovs-appctl: ovs-vswitchd: server returned an error
4413 ])])
4414
4415 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
4416 AT_CHECK([ovs-appctl ofproto/trace \
4417   ovs-dummy "$odp_flow" garbage_option],
4418   [2], [stdout],[stderr])
4419 AT_CHECK([tail -2 stderr], [0], [dnl
4420 Trailing garbage in packet data
4421 ovs-appctl: ovs-vswitchd: server returned an error
4422 ])
4423
4424 # Test incorrect command: ofproto/trace with 4 arguments
4425 AT_CHECK([ovs-appctl ofproto/trace \
4426   arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
4427 AT_CHECK([tail -2 stderr], [0], [dnl
4428 "ofproto/trace" command takes at most 3 arguments
4429 ovs-appctl: ovs-vswitchd: server returned an error
4430 ])
4431
4432 # Test incorrect command: ofproto/trace with 0 argument
4433 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
4434 AT_CHECK([tail -2 stderr], [0], [dnl
4435 "ofproto/trace" command requires at least 1 arguments
4436 ovs-appctl: ovs-vswitchd: server returned an error
4437 ])
4438
4439 OVS_VSWITCHD_STOP
4440 AT_CLEANUP
4441
4442 # The third test checks that the output of "ovs-dpctl -m" is valid to trace.
4443 AT_SETUP([ofproto-dpif - ofproto/trace from dpctl output])
4444 OVS_VSWITCHD_START([dnl
4445     set Open_vSwitch . other_config:max-idle=10000 \
4446     -- add-port br0 p1 -- set Interface p1 type=dummy])
4447
4448 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)'])
4449 ovs-appctl revalidator/wait
4450 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows1.txt])
4451
4452 odp_flow=`cat dp_flows1.txt`
4453 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
4454 Bridge: br0
4455 Flow: <cleared>
4456 No match, packets dropped because OFPPC_NO_PACKET_IN is set on in_port.
4457
4458 Rule: table=254 cookie=0 priority=0,reg0=0x2
4459 OpenFlow actions=drop
4460
4461 Final flow: <cleared>
4462 Megaflow: <cleared>
4463 Datapath actions: drop
4464 ])
4465
4466 dnl Now, try again without megaflows:
4467 ovs-appctl upcall/disable-megaflows
4468
4469 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)'])
4470 ovs-appctl revalidator/wait
4471 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows2.txt])
4472
4473 odp_flow=`cat dp_flows2.txt`
4474 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
4475 Bridge: br0
4476 Flow: <cleared>
4477 No match, packets dropped because OFPPC_NO_PACKET_IN is set on in_port.
4478
4479 Rule: table=254 cookie=0 priority=0,reg0=0x2
4480 OpenFlow actions=drop
4481
4482 Final flow: <cleared>
4483 Megaflow: <cleared>
4484 Datapath actions: drop
4485 ])
4486
4487 OVS_VSWITCHD_STOP
4488 AT_CLEANUP
4489
4490 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
4491 OVS_VSWITCHD_START
4492 ADD_OF_PORTS([br0], 1, 2, 3)
4493
4494 AT_DATA([flows.txt], [dnl
4495 in_port=1 actions=output:2
4496 in_port=2 actions=output:1
4497 ])
4498 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4499
4500 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
4501 AT_CHECK([tail -1 stdout], [0], [dnl
4502 Datapath actions: push_vlan(vid=123,pcp=0),2
4503 ])
4504
4505 OVS_VSWITCHD_STOP
4506 AT_CLEANUP
4507
4508
4509 m4_define([OFPROTO_TRACE],
4510   [flow="$2"
4511    AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
4512    actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4513    expected="$4"
4514    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
4515      [0], [stdout])
4516    mv stdout expout
4517    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
4518      [0], [expout])])
4519
4520 AT_SETUP([ofproto-dpif - MAC learning])
4521 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
4522 ADD_OF_PORTS([br0], 1, 2, 3)
4523
4524 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)'
4525
4526 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
4527 OFPROTO_TRACE(
4528   [ovs-dummy],
4529   [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
4530   [-generate],
4531   [1,2,100])
4532
4533 # Check for the MAC learning entry.
4534 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4535  port  VLAN  MAC                Age
4536     3     0  50:54:00:00:00:05    ?
4537 ])
4538
4539 # Trace a packet arrival destined for the learned MAC.
4540 # (This will also learn a MAC.)
4541 OFPROTO_TRACE(
4542   [ovs-dummy],
4543   [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
4544   [-generate],
4545   [3])
4546
4547 # Check for both MAC learning entries.
4548 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4549  port  VLAN  MAC                Age
4550     3     0  50:54:00:00:00:05    ?
4551     1     0  50:54:00:00:00:06    ?
4552 ])
4553
4554 # Trace a packet arrival that updates the first learned MAC entry.
4555 OFPROTO_TRACE(
4556   [ovs-dummy],
4557   [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
4558   [-generate],
4559   [1,3,100])
4560
4561 # Check that the MAC learning entry was updated.
4562 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4563  port  VLAN  MAC                Age
4564     1     0  50:54:00:00:00:06    ?
4565     2     0  50:54:00:00:00:05    ?
4566 ])
4567
4568 # Add another bridge.
4569 AT_CHECK(
4570   [ovs-vsctl \
4571      -- add-br br1 \
4572      -- set bridge br1 datapath-type=dummy])
4573 ADD_OF_PORTS([br1], 4, 5)
4574
4575 # Trace some packet arrivals in br1 to create MAC learning entries there too.
4576 OFPROTO_TRACE(
4577   [ovs-dummy],
4578   [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
4579   [-generate],
4580   [5,101])
4581 OFPROTO_TRACE(
4582   [ovs-dummy],
4583   [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
4584   [-generate],
4585   [4,101])
4586
4587 # Check that the MAC learning entries were added.
4588 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4589  port  VLAN  MAC                Age
4590     4     0  50:54:00:00:00:06    ?
4591     5     0  50:54:00:00:00:07    ?
4592 ])
4593
4594 # Delete port p1 and see that its MAC learning entry disappeared, and
4595 # that the MAC learning entry for the same MAC was also deleted from br1.
4596 AT_CHECK([ovs-vsctl del-port p1])
4597 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4598  port  VLAN  MAC                Age
4599     2     0  50:54:00:00:00:05    ?
4600 ])
4601 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4602  port  VLAN  MAC                Age
4603     5     0  50:54:00:00:00:07    ?
4604 ])
4605
4606 OVS_VSWITCHD_STOP
4607 AT_CLEANUP
4608
4609 AT_SETUP([ofproto-dpif - MAC table overflow])
4610 OVS_VSWITCHD_START(
4611   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
4612 ADD_OF_PORTS([br0], 1, 2, 3)
4613
4614 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)'
4615
4616 AT_CHECK([ovs-appctl time/stop])
4617
4618 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
4619 for i in 0 1 2 3 4 5 6 7 8 9; do
4620     OFPROTO_TRACE(
4621       [ovs-dummy],
4622       [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
4623       [-generate],
4624       [1,2,100])
4625     ovs-appctl time/warp 1000
4626 done
4627
4628 # Check for the MAC learning entries.
4629 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4630   [0], [dnl
4631     3     0  50:54:00:00:00:00
4632     3     0  50:54:00:00:00:01
4633     3     0  50:54:00:00:00:02
4634     3     0  50:54:00:00:00:03
4635     3     0  50:54:00:00:00:04
4636     3     0  50:54:00:00:00:05
4637     3     0  50:54:00:00:00:06
4638     3     0  50:54:00:00:00:07
4639     3     0  50:54:00:00:00:08
4640     3     0  50:54:00:00:00:09
4641  port  VLAN  MAC                Age
4642 ])
4643
4644 # Trace another ARP packet on another MAC.
4645 OFPROTO_TRACE(
4646   [ovs-dummy],
4647   [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
4648   [-generate],
4649   [1,2,100])
4650
4651 # Check that the new one chased the oldest one out of the table.
4652 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
4653   [0], [dnl
4654     3     0  50:54:00:00:00:01    ?
4655     3     0  50:54:00:00:00:02    ?
4656     3     0  50:54:00:00:00:03    ?
4657     3     0  50:54:00:00:00:04    ?
4658     3     0  50:54:00:00:00:05    ?
4659     3     0  50:54:00:00:00:06    ?
4660     3     0  50:54:00:00:00:07    ?
4661     3     0  50:54:00:00:00:08    ?
4662     3     0  50:54:00:00:00:09    ?
4663     3     0  50:54:00:00:00:10    ?
4664  port  VLAN  MAC                Age
4665 ])
4666 OVS_VSWITCHD_STOP
4667 AT_CLEANUP
4668
4669 AT_SETUP([ofproto-dpif - MAC table overflow fairness])
4670 OVS_VSWITCHD_START(
4671   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
4672 ADD_OF_PORTS([br0], 1, 2, 3, 4, 5, 6)
4673
4674 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)'
4675
4676 AT_CHECK([ovs-appctl time/stop])
4677
4678 # Trace packets with 2 different source MACs arriving on each of the 5
4679 # ports, filling up the 10-entry learning table.
4680 for i in 0 1 2 3 4 5 6 7 8 9; do
4681     p=`expr $i / 2 + 1`
4682     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
4683     ovs-appctl time/warp 1000
4684 done
4685
4686 # Check for the MAC learning entries.
4687 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4688   [0], [dnl
4689     1     0  50:54:00:00:00:00
4690     1     0  50:54:00:00:00:01
4691     2     0  50:54:00:00:00:02
4692     2     0  50:54:00:00:00:03
4693     3     0  50:54:00:00:00:04
4694     3     0  50:54:00:00:00:05
4695     4     0  50:54:00:00:00:06
4696     4     0  50:54:00:00:00:07
4697     5     0  50:54:00:00:00:08
4698     5     0  50:54:00:00:00:09
4699  port  VLAN  MAC                Age
4700 ])
4701
4702 # Now trace 16 new MACs on another port.
4703 for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
4704     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
4705     ovs-appctl time/warp 1000
4706 done
4707
4708 # Check the results.
4709 #
4710 # Our eviction algorithm on overflow is that an arbitrary (but deterministic)
4711 # one of the ports with the most learned MACs loses the least recently used
4712 # one.  Thus, the new port will end up with 3 MACs, 3 of the old ports with 1
4713 # MAC each, and the other 2 of the old ports with 2 MACs each.
4714 #
4715 # (If someone changes lib/heap.c to do something different with equal-priority
4716 # nodes, then the output below could change, but it would still follow the
4717 # rules explained above.)
4718 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4719   [0], [dnl
4720     1     0  50:54:00:00:00:01
4721     2     0  50:54:00:00:00:03
4722     3     0  50:54:00:00:00:04
4723     3     0  50:54:00:00:00:05
4724     4     0  50:54:00:00:00:07
4725     5     0  50:54:00:00:00:08
4726     5     0  50:54:00:00:00:09
4727     6     0  50:54:00:00:0d:ff
4728     6     0  50:54:00:00:0e:ff
4729     6     0  50:54:00:00:0f:ff
4730  port  VLAN  MAC                Age
4731 ])
4732 OVS_VSWITCHD_STOP
4733 AT_CLEANUP
4734
4735 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR)
4736 #
4737 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
4738 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
4739   [AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
4740   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4741
4742   on_exit 'kill `cat test-sflow.pid`'
4743   AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
4744   AT_CAPTURE_FILE([sflow.log])
4745   PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
4746   ovs-appctl time/stop
4747
4748   ADD_OF_PORTS([br0], 1, 2)
4749   ovs-vsctl \
4750      set Interface br0 options:ifindex=1002 -- \
4751      set Interface p1 options:ifindex=1004 -- \
4752      set Interface p2 options:ifindex=1003 -- \
4753      set Bridge br0 sflow=@sf -- \
4754      --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
4755        header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
4756
4757   dnl open with ARP packets to seed the bridge-learning.  The output
4758   dnl ifIndex numbers should be reported predictably after that.
4759   dnl Since we set sampling=1 we should see all of these packets
4760   dnl reported. Sorting the output by data-source and seqNo makes
4761   dnl it deterministic. Ensuring that we send at least two packets
4762   dnl into each port means we get to check the seq nos are
4763   dnl incrementing correctly.
4764   dnl because packets from different ports can be handled by separate
4765   dnl threads, put some sleeps
4766
4767   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)'
4768   sleep 1
4769   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)'
4770   sleep 1
4771   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)'
4772   sleep 1
4773   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)'
4774   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)'
4775
4776   dnl sleep long enough to get more than one counter sample
4777   dnl from each datasource so we can check sequence numbers
4778   ovs-appctl time/warp 3000 100
4779   OVS_VSWITCHD_STOP
4780   ovs-appctl -t test-sflow exit
4781
4782   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
4783         /g']], [0], [dnl
4784 HEADER
4785         dgramSeqNo=1
4786         ds=127.0.0.1>2:1000
4787         fsSeqNo=1
4788         in_vlan=0
4789         in_priority=0
4790         out_vlan=0
4791         out_priority=0
4792         meanSkip=1
4793         samplePool=1
4794         dropEvents=0
4795         in_ifindex=1004
4796         in_format=0
4797         out_ifindex=2
4798         out_format=2
4799         hdr_prot=1
4800         pkt_len=64
4801         stripped=4
4802         hdr_len=60
4803         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
4804 HEADER
4805         dgramSeqNo=1
4806         ds=127.0.0.1>2:1000
4807         fsSeqNo=2
4808         in_vlan=0
4809         in_priority=0
4810         out_vlan=0
4811         out_priority=0
4812         meanSkip=1
4813         samplePool=2
4814         dropEvents=0
4815         in_ifindex=1003
4816         in_format=0
4817         out_ifindex=2
4818         out_format=2
4819         hdr_prot=1
4820         pkt_len=64
4821         stripped=4
4822         hdr_len=60
4823         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
4824 HEADER
4825         dgramSeqNo=1
4826         ds=127.0.0.1>2:1000
4827         fsSeqNo=3
4828         in_vlan=0
4829         in_priority=0
4830         out_vlan=0
4831         out_priority=0
4832         meanSkip=1
4833         samplePool=3
4834         dropEvents=0
4835         in_ifindex=1004
4836         in_format=0
4837         out_ifindex=1003
4838         out_format=0
4839         hdr_prot=1
4840         pkt_len=64
4841         stripped=4
4842         hdr_len=60
4843         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
4844 HEADER
4845         dgramSeqNo=1
4846         ds=127.0.0.1>2:1000
4847         fsSeqNo=4
4848         in_vlan=0
4849         in_priority=0
4850         out_vlan=0
4851         out_priority=0
4852         meanSkip=1
4853         samplePool=4
4854         dropEvents=0
4855         in_ifindex=1003
4856         in_format=0
4857         out_ifindex=1004
4858         out_format=0
4859         hdr_prot=1
4860         pkt_len=64
4861         stripped=4
4862         hdr_len=60
4863         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
4864 HEADER
4865         dgramSeqNo=1
4866         ds=127.0.0.1>2:1000
4867         fsSeqNo=5
4868         in_vlan=0
4869         in_priority=0
4870         out_vlan=0
4871         out_priority=0
4872         meanSkip=1
4873         samplePool=5
4874         dropEvents=0
4875         in_ifindex=1003
4876         in_format=0
4877         out_ifindex=1004
4878         out_format=0
4879         hdr_prot=1
4880         pkt_len=64
4881         stripped=4
4882         hdr_len=60
4883         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
4884 ])
4885
4886   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR|PORTNAME|OPENFLOWPORT' | head -18 | sed 's/ /\
4887         /g']], [0], [dnl
4888 IFCOUNTERS
4889         dgramSeqNo=2
4890         ds=127.0.0.1>0:1002
4891         csSeqNo=1
4892         ifindex=1002
4893         type=6
4894         ifspeed=100000000
4895         direction=0
4896         status=0
4897         in_octets=0
4898         in_unicasts=0
4899         in_multicasts=0
4900         in_broadcasts=4294967295
4901         in_discards=0
4902         in_errors=0
4903         in_unknownprotos=4294967295
4904         out_octets=120
4905         out_unicasts=2
4906         out_multicasts=4294967295
4907         out_broadcasts=4294967295
4908         out_discards=0
4909         out_errors=0
4910         promiscuous=0
4911 IFCOUNTERS
4912         dgramSeqNo=2
4913         ds=127.0.0.1>0:1003
4914         csSeqNo=1
4915         ifindex=1003
4916         type=6
4917         ifspeed=100000000
4918         direction=0
4919         status=0
4920         in_octets=138
4921         in_unicasts=3
4922         in_multicasts=0
4923         in_broadcasts=4294967295
4924         in_discards=0
4925         in_errors=0
4926         in_unknownprotos=4294967295
4927         out_octets=120
4928         out_unicasts=2
4929         out_multicasts=4294967295
4930         out_broadcasts=4294967295
4931         out_discards=0
4932         out_errors=0
4933         promiscuous=0
4934 IFCOUNTERS
4935         dgramSeqNo=2
4936         ds=127.0.0.1>0:1004
4937         csSeqNo=1
4938         ifindex=1004
4939         type=6
4940         ifspeed=100000000
4941         direction=0
4942         status=0
4943         in_octets=84
4944         in_unicasts=2
4945         in_multicasts=0
4946         in_broadcasts=4294967295
4947         in_discards=0
4948         in_errors=0
4949         in_unknownprotos=4294967295
4950         out_octets=180
4951         out_unicasts=3
4952         out_multicasts=4294967295
4953         out_broadcasts=4294967295
4954         out_discards=0
4955         out_errors=0
4956         promiscuous=0
4957 IFCOUNTERS
4958         dgramSeqNo=3
4959         ds=127.0.0.1>0:1002
4960         csSeqNo=2
4961         ifindex=1002
4962         type=6
4963         ifspeed=100000000
4964         direction=0
4965         status=0
4966         in_octets=0
4967         in_unicasts=0
4968         in_multicasts=0
4969         in_broadcasts=4294967295
4970         in_discards=0
4971         in_errors=0
4972         in_unknownprotos=4294967295
4973         out_octets=120
4974         out_unicasts=2
4975         out_multicasts=4294967295
4976         out_broadcasts=4294967295
4977         out_discards=0
4978         out_errors=0
4979         promiscuous=0
4980 IFCOUNTERS
4981         dgramSeqNo=3
4982         ds=127.0.0.1>0:1003
4983         csSeqNo=2
4984         ifindex=1003
4985         type=6
4986         ifspeed=100000000
4987         direction=0
4988         status=0
4989         in_octets=138
4990         in_unicasts=3
4991         in_multicasts=0
4992         in_broadcasts=4294967295
4993         in_discards=0
4994         in_errors=0
4995         in_unknownprotos=4294967295
4996         out_octets=120
4997         out_unicasts=2
4998         out_multicasts=4294967295
4999         out_broadcasts=4294967295
5000         out_discards=0
5001         out_errors=0
5002         promiscuous=0
5003 IFCOUNTERS
5004         dgramSeqNo=3
5005         ds=127.0.0.1>0:1004
5006         csSeqNo=2
5007         ifindex=1004
5008         type=6
5009         ifspeed=100000000
5010         direction=0
5011         status=0
5012         in_octets=84
5013         in_unicasts=2
5014         in_multicasts=0
5015         in_broadcasts=4294967295
5016         in_discards=0
5017         in_errors=0
5018         in_unknownprotos=4294967295
5019         out_octets=180
5020         out_unicasts=3
5021         out_multicasts=4294967295
5022         out_broadcasts=4294967295
5023         out_discards=0
5024         out_errors=0
5025         promiscuous=0
5026 OPENFLOWPORT
5027         datapath_id=18364758544493064720
5028         port_no=1
5029 OPENFLOWPORT
5030         datapath_id=18364758544493064720
5031         port_no=1
5032 OPENFLOWPORT
5033         datapath_id=18364758544493064720
5034         port_no=2
5035 OPENFLOWPORT
5036         datapath_id=18364758544493064720
5037         port_no=2
5038 OPENFLOWPORT
5039         datapath_id=18364758544493064720
5040         port_no=65534
5041 OPENFLOWPORT
5042         datapath_id=18364758544493064720
5043         port_no=65534
5044 PORTNAME
5045         portName=br0
5046 PORTNAME
5047         portName=br0
5048 PORTNAME
5049         portName=p1
5050 PORTNAME
5051         portName=p1
5052 PORTNAME
5053         portName=p2
5054 PORTNAME
5055         portName=p2
5056 ])])
5057
5058 AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv4 collector])
5059 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1])
5060 AT_CLEANUP
5061
5062 AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv6 collector])
5063 AT_SKIP_IF([test $HAVE_IPV6 = no])
5064 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]])
5065 AT_CLEANUP
5066
5067 dnl Test sFlow LAG structures
5068 AT_SETUP([ofproto-dpif - sFlow packet sampling - LACP structures])
5069 AT_SKIP_IF([test "$IS_WIN32" = "yes"])
5070 OVS_VSWITCHD_START([dnl
5071                     add-bond br0 bond p1 p2 --                          \
5072                     set Port bond lacp=active bond-mode=active-backup   \
5073                     other_config:lacp-time="fast"                       \
5074                     other_config:lacp-system-id=11:22:33:44:55:66       \
5075                     other_config:lacp-system-priority=54321 --          \
5076                     set Interface p1 type=dummy                         \
5077                     other_config:lacp-port-id=11                        \
5078                     other_config:lacp-port-priority=111                 \
5079                     other_config:lacp-aggregation-key=3333 --           \
5080                     set Interface p2 type=dummy                         \
5081                     other_config:lacp-port-id=22                        \
5082                     other_config:lacp-port-priority=222                 \
5083                     other_config:lacp-aggregation-key=3333 ])
5084
5085 on_exit 'kill `cat test-sflow.pid`'
5086 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5087 AT_CAPTURE_FILE([sflow.log])
5088 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
5089
5090 ovs-appctl time/stop
5091
5092 ovs-vsctl \
5093       set Interface p1 options:ifindex=1003 --                  \
5094       set Bridge br0 sflow=@sf --                               \
5095       --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\"   \
5096       header=128 sampling=1 polling=1
5097
5098 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5099 AT_CHECK([ovs-appctl time/warp 2000 100], [0], [ignore])
5100 AT_CHECK([ovs-appctl revalidator/purge], [0])
5101 OVS_VSWITCHD_STOP
5102 ovs-appctl -t test-sflow exit
5103 AT_CHECK([[sort sflow.log | $EGREP 'LACPCOUNTERS|ERROR' | head -n 1 | sed 's/ /\
5104         /g']], [0], [dnl
5105 LACPCOUNTERS
5106         sysID=11:22:33:44:55:66
5107         partnerID=00:00:00:00:00:00
5108         aggID=3333
5109         actorAdmin=0x7
5110         actorOper=0xbf
5111         partnerAdmin=0x0
5112         partnerOper=0x2
5113         LACPUDsRx=0
5114         markerPDUsRx=4294967295
5115         markerRespPDUsRx=4294967295
5116         unknownRx=4294967295
5117         illegalRx=0
5118         LACPUDsTx=1
5119         markerPDUsTx=4294967295
5120         markerRespPDUsTx=4294967295
5121 ])
5122
5123 AT_CLEANUP
5124
5125 AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel set])
5126 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5127 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5128
5129 dnl set up sFlow logging
5130 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5131 AT_CAPTURE_FILE([sflow.log])
5132 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
5133 ovs-appctl time/stop
5134
5135 OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
5136 AT_CHECK([ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre \
5137                     options:remote_ip=1.1.1.1 options:key=456 ofport_request=3])
5138 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy ofport_request=4])
5139
5140 AT_CHECK([ovs-ofctl add-flow br0 action=3])
5141
5142 dnl enable sflow
5143 ovs-vsctl \
5144    set Bridge br0 sflow=@sf -- \
5145    --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5146      header=128 sampling=1 polling=0
5147
5148 dnl introduce a packet that will be flooded to the tunnel
5149 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)'])
5150
5151 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5152 for i in `seq 1 30`; do
5153     ovs-appctl time/warp 100
5154 done
5155
5156 ovs-appctl -t test-sflow exit
5157
5158 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5159         /g']], [0], [dnl
5160 HEADER
5161         dgramSeqNo=1
5162         ds=127.0.0.1>2:1000
5163         fsSeqNo=1
5164         tunnel4_out_length=0
5165         tunnel4_out_protocol=47
5166         tunnel4_out_src=0.0.0.0
5167         tunnel4_out_dst=1.1.1.1
5168         tunnel4_out_src_port=0
5169         tunnel4_out_dst_port=0
5170         tunnel4_out_tcp_flags=0
5171         tunnel4_out_tos=1
5172         tunnel_out_vni=456
5173         in_vlan=0
5174         in_priority=0
5175         out_vlan=0
5176         out_priority=0
5177         meanSkip=1
5178         samplePool=1
5179         dropEvents=0
5180         in_ifindex=0
5181         in_format=0
5182         out_ifindex=1
5183         out_format=2
5184         hdr_prot=1
5185         pkt_len=64
5186         stripped=4
5187         hdr_len=60
5188         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
5189 ])
5190
5191 OVS_VSWITCHD_STOP
5192 AT_CLEANUP
5193
5194 AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel push])
5195 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5196
5197 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 options:ifindex=1010])
5198
5199 dnl set up sFlow logging
5200 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5201 AT_CAPTURE_FILE([sflow.log])
5202 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
5203 ovs-appctl time/stop
5204
5205 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5206 AT_CHECK([ovs-vsctl add-br int-br -- set bridge int-br datapath_type=dummy], [0])
5207 AT_CHECK([ovs-vsctl -- add-port int-br t1 -- set Interface t1 type=gre \
5208                        options:remote_ip=1.1.2.92 options:key=456 ofport_request=4\
5209                     -- add-port int-br vm1 -- set Interface vm1 type=dummy \
5210                        options:ifindex=2011 ofport_request=5
5211                        ], [0])
5212
5213 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5214 dummy@ovs-dummy: hit:0 missed:0
5215         br0:
5216                 br0 65534/100: (dummy)
5217                 p0 1/1: (dummy: ifindex=1010)
5218         int-br:
5219                 int-br 65534/2: (dummy)
5220                 t1 4/4: (gre: key=456, remote_ip=1.1.2.92)
5221                 vm1 5/3: (dummy: ifindex=2011)
5222 ])
5223
5224 dnl set up route to 1.1.2.92 via br0 and action=normal
5225 AT_CHECK([ovs-appctl ovs/route/add 1.1.2.92/24 br0], [0], [OK
5226 ])
5227 AT_CHECK([ovs-appctl ovs/route/add 192.168.0.0/16 br0], [0], [OK
5228 ])
5229 AT_CHECK([ovs-appctl netdev-dummy/ip4addr br0 1.1.2.88/24], [0], [OK
5230 ])
5231 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
5232
5233 dnl Prime ARP Cache for 1.1.2.92
5234 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)'])
5235
5236 dnl configure sflow on int-br only
5237 ovs-vsctl \
5238    set Bridge int-br sflow=@sf -- \
5239    --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5240      header=128 sampling=1 polling=0
5241
5242 dnl add rule for int-br to force packet onto tunnel. There is no ifindex
5243 dnl for this port so the sFlow output will just report that it went to
5244 dnl 1 output (out_format=2, out_ifindex=1)
5245 AT_CHECK([ovs-ofctl add-flow int-br "actions=4"])
5246
5247 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)'])
5248
5249 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5250 for i in `seq 1 30`; do
5251     ovs-appctl time/warp 100
5252 done
5253
5254 ovs-appctl -t test-sflow exit
5255
5256 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5257         /g']], [0], [dnl
5258 HEADER
5259         dgramSeqNo=1
5260         ds=127.0.0.1>2:1000
5261         fsSeqNo=1
5262         tunnel4_out_length=0
5263         tunnel4_out_protocol=47
5264         tunnel4_out_src=1.1.2.88
5265         tunnel4_out_dst=1.1.2.92
5266         tunnel4_out_src_port=0
5267         tunnel4_out_dst_port=0
5268         tunnel4_out_tcp_flags=0
5269         tunnel4_out_tos=0
5270         tunnel_out_vni=456
5271         in_vlan=0
5272         in_priority=0
5273         out_vlan=0
5274         out_priority=0
5275         meanSkip=1
5276         samplePool=1
5277         dropEvents=0
5278         in_ifindex=2011
5279         in_format=0
5280         out_ifindex=1
5281         out_format=2
5282         hdr_prot=1
5283         pkt_len=64
5284         stripped=4
5285         hdr_len=60
5286         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
5287 ])
5288
5289 OVS_VSWITCHD_STOP
5290 AT_CLEANUP
5291
5292 AT_SETUP([ofproto-dpif - sFlow packet sampling - MPLS])
5293 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5294 OVS_VSWITCHD_START
5295 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5296 ADD_OF_PORTS([br0], [1], [2])
5297 AT_DATA([flows.txt], [dnl
5298 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
5299 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
5300 ])
5301 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5302
5303 dnl set up sFlow logging
5304 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5305 AT_CAPTURE_FILE([sflow.log])
5306 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
5307 ovs-appctl time/stop
5308
5309 dnl configure sflow
5310 ovs-vsctl \
5311    set Bridge br0 sflow=@sf -- \
5312    --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5313      header=128 sampling=1 polling=0
5314
5315 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)'])
5316 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)'])
5317
5318 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5319 for i in `seq 1 30`; do
5320     ovs-appctl time/warp 100
5321 done
5322
5323 ovs-appctl -t test-sflow exit
5324
5325 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5326         /g']], [0], [dnl
5327 HEADER
5328         dgramSeqNo=1
5329         ds=127.0.0.1>2:1000
5330         fsSeqNo=1
5331         mpls_label_0=789
5332         mpls_tc_0=4
5333         mpls_ttl_0=32
5334         mpls_bos_0=0
5335         mpls_label_1=11
5336         mpls_tc_1=3
5337         mpls_ttl_1=64
5338         mpls_bos_1=1
5339         in_vlan=0
5340         in_priority=0
5341         out_vlan=0
5342         out_priority=0
5343         meanSkip=1
5344         samplePool=1
5345         dropEvents=0
5346         in_ifindex=0
5347         in_format=0
5348         out_ifindex=1
5349         out_format=2
5350         hdr_prot=1
5351         pkt_len=64
5352         stripped=4
5353         hdr_len=60
5354         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
5355 HEADER
5356         dgramSeqNo=1
5357         ds=127.0.0.1>2:1000
5358         fsSeqNo=2
5359         mpls_label_0=789
5360         mpls_tc_0=4
5361         mpls_ttl_0=32
5362         mpls_bos_0=1
5363         in_vlan=0
5364         in_priority=0
5365         out_vlan=0
5366         out_priority=0
5367         meanSkip=1
5368         samplePool=2
5369         dropEvents=0
5370         in_ifindex=0
5371         in_format=0
5372         out_ifindex=1
5373         out_format=2
5374         hdr_prot=1
5375         pkt_len=64
5376         stripped=4
5377         hdr_len=60
5378         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
5379 ])
5380
5381 OVS_VSWITCHD_STOP
5382 AT_CLEANUP
5383
5384
5385 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR)
5386 #
5387 # Test that basic NetFlow reports flow statistics correctly:
5388 # The initial packet of a flow are correctly accounted.
5389 # Later packets within a flow are correctly accounted.
5390 # Flow actions changing (in this case, due to MAC learning)
5391 # cause a record to be sent.
5392 m4_define([CHECK_NETFLOW_EXPIRATION],
5393   [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5394   ADD_OF_PORTS([br0], 1, 2)
5395
5396   ovs-appctl time/stop
5397   on_exit 'kill `cat test-netflow.pid`'
5398   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
5399   AT_CAPTURE_FILE([netflow.log])
5400   PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
5401
5402   ovs-vsctl \
5403      set Bridge br0 netflow=@nf -- \
5404      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
5405        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
5406
5407   for delay in 1000 30000; do
5408       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)'
5409       sleep 1  # ensure the order in which these two packets are processed
5410       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)'
5411
5412       ovs-appctl time/warp $delay
5413   done
5414
5415   ovs-appctl time/warp 6000
5416   ovs-appctl revalidator/wait
5417   OVS_VSWITCHD_STOP
5418   ovs-appctl -t test-netflow exit
5419
5420   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])
5421
5422   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])
5423
5424   combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
5425   separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
5426   AT_CHECK([test $separate = 2 || test $combined = 1], [0])])
5427
5428 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv4 collector])
5429 CHECK_NETFLOW_EXPIRATION([127.0.0.1])
5430 AT_CLEANUP
5431
5432 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv6 collector])
5433 AT_SKIP_IF([test $HAVE_IPV6 = no])
5434 CHECK_NETFLOW_EXPIRATION([[[::1]]])
5435 AT_CLEANUP
5436
5437 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR)
5438 #
5439 # Test that basic NetFlow reports active expirations correctly.
5440 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
5441   [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5442   ADD_OF_PORTS([br0], 1, 2)
5443
5444   on_exit 'kill `cat test-netflow.pid`'
5445   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
5446   AT_CAPTURE_FILE([netflow.log])
5447   PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
5448
5449   ovs-vsctl \
5450      set Bridge br0 netflow=@nf -- \
5451      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
5452        engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
5453
5454   AT_CHECK([ovs-appctl time/stop])
5455   n=1
5456   while test $n -le 60; do
5457       n=`expr $n + 1`
5458
5459       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)'
5460       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)'
5461
5462       ovs-appctl time/warp 1000
5463   done
5464
5465   ovs-appctl time/warp 10000
5466
5467   ovs-appctl revalidator/wait
5468   OVS_VSWITCHD_STOP
5469   ovs-appctl -t test-netflow exit
5470
5471   # Count the number of reported packets:
5472   # - From source to destination before MAC learning kicks in (just one).
5473   # - From source to destination after that.
5474   # - From destination to source.
5475   n_learn=0
5476   n_in=0
5477   n_out=0
5478   n_other=0
5479   n_recs=0
5480   none=0
5481   while read line; do
5482       pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
5483       case $pkts in
5484            [[0-9]]*) ;;
5485        *) continue ;;
5486       esac
5487
5488       case $line in
5489           "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
5490               counter=n_learn
5491           ;;
5492       "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
5493           counter=n_in
5494           ;;
5495       "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
5496           counter=n_out
5497           ;;
5498       *)
5499           counter=n_other
5500           ;;
5501       esac
5502       eval $counter=\`expr \$$counter + \$pkts\`
5503       n_recs=`expr $n_recs + 1`
5504   done < netflow.log
5505
5506   # There should be exactly 1 MAC learning packet,
5507   # exactly 59 other packets in that direction,
5508   # and exactly 60 packets in the other direction.
5509   AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
5510 ])])
5511
5512 AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv4 collector])
5513 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1])
5514 AT_CLEANUP
5515
5516 AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv6 collector])
5517 AT_SKIP_IF([test $HAVE_IPV6 = no])
5518 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]])
5519 AT_CLEANUP
5520
5521 dnl In the absence of an IPFIX collector to verify protocol correctness, simply
5522 dnl configure IPFIX and ensure that sample action generation works at the
5523 dnl datapath level.
5524 AT_SETUP([ofproto-dpif - Basic IPFIX sanity check])
5525 OVS_VSWITCHD_START
5526 ADD_OF_PORTS([br0], 1, 2)
5527
5528 dnl Sample every packet using bridge-based sampling
5529 AT_CHECK([ovs-vsctl -- set bridge br0 ipfix=@fix -- \
5530                     --id=@fix create ipfix targets=\"127.0.0.1:4739\" \
5531                               sampling=1], [0], [ignore])
5532
5533 dnl Send some packets that should be sampled
5534 for i in `seq 1 3`; do
5535     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)'])
5536 done
5537 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
5538 flow-dump from non-dpdk interfaces:
5539 packets:2, bytes:120, used:0.001s, actions:sample(sample=100.0%,actions(userspace(pid=0,ipfix(output_port=4294967295))))
5540 ])
5541
5542 dnl Remove the IPFIX configuration
5543 AT_CHECK([ovs-vsctl clear bridge br0 ipfix])
5544 AT_CHECK([ovs-appctl revalidator/purge])
5545
5546 dnl Send some more packets, to ensure that these are not sampled.
5547 for i in `seq 1 3`; do
5548     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)'])
5549 done
5550 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
5551 flow-dump from non-dpdk interfaces:
5552 packets:2, bytes:120, used:0.001s, actions:drop
5553 ])
5554
5555 OVS_VSWITCHD_STOP(["/sending to collector failed/d"])
5556 AT_CLEANUP
5557
5558 AT_SETUP([ofproto-dpif - flow stats])
5559 OVS_VSWITCHD_START
5560 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
5561 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
5562
5563 ovs-appctl time/stop
5564
5565 for i in `seq 1 10`; do
5566     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)'
5567 done
5568
5569 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
5570 AT_CHECK([ovs-appctl revalidator/purge], [0])
5571 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
5572 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
5573  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
5574  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
5575 ])
5576 OVS_VSWITCHD_STOP
5577 AT_CLEANUP
5578
5579 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
5580 OVS_VSWITCHD_START
5581 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
5582 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
5583
5584 ovs-appctl time/stop
5585
5586 for i in `seq 1 10`; do
5587     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)'
5588 done
5589
5590 ovs-appctl time/warp 100
5591 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
5592 ovs-appctl time/warp 1000
5593
5594 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
5595 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
5596  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
5597  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
5598 ])
5599 OVS_VSWITCHD_STOP
5600 AT_CLEANUP
5601
5602 AT_SETUP([ofproto-dpif - idle_age and hard_age increase over time])
5603 OVS_VSWITCHD_START
5604
5605 # get_ages DURATION HARD IDLE
5606 #
5607 # Fetch the flow duration, hard age, and idle age into the variables
5608 # whose names are given as arguments.  Rounds DURATION down to the
5609 # nearest integer.  If hard_age doesn't appear in the output, sets
5610 # HARD to "none".  If idle_age doesn't appear in the output, sets IDLE
5611 # to 0.
5612 get_ages () {
5613     AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
5614
5615     duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
5616     AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
5617     AS_VAR_COPY([$1], [duration])
5618
5619     hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
5620     if test X"$hard" = X; then
5621         hard=none
5622     else
5623         AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
5624     fi
5625     AS_VAR_COPY([$2], [hard])
5626
5627     idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
5628     if test X"$idle" = X; then
5629         idle=0
5630     else
5631         AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
5632     fi
5633     AS_VAR_COPY([$3], [idle])
5634 }
5635
5636 # Add a flow and get its initial hard and idle age.
5637 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
5638 get_ages duration1 hard1 idle1
5639
5640 ovs-appctl time/stop
5641 # Warp time forward by 10 seconds, then modify the flow's actions.
5642 ovs-appctl time/warp 10000
5643 get_ages duration2 hard2 idle2
5644 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
5645
5646 # Warp time forward by 10 seconds.
5647 ovs-appctl time/warp 10000
5648 get_ages duration3 hard3 idle3
5649
5650 # Warp time forward 10 more seconds, then pass some packets through the flow,
5651 # then warp forward a few more times because idle times are only updated
5652 # occasionally.
5653 ovs-appctl time/warp 10000
5654 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)'
5655 ovs-appctl time/warp 3000 1000
5656 sleep 1
5657 get_ages duration4 hard4 idle4
5658
5659 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
5660 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
5661 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
5662
5663 # Duration should increase steadily over time.
5664 AT_CHECK([test $duration1 -lt $duration2])
5665 AT_CHECK([test $duration2 -lt $duration3])
5666 AT_CHECK([test $duration3 -lt $duration4])
5667
5668 # Hard age should be "none" initially because it's the same as flow_duration,
5669 # then it should increase.
5670 AT_CHECK([test $hard1 = none])
5671 AT_CHECK([test $hard2 = none])
5672 AT_CHECK([test $hard3 != none])
5673 AT_CHECK([test $hard4 != none])
5674 AT_CHECK([test $hard3 -lt $hard4])
5675
5676 # Idle age should increase from 1 to 2 to 3, then decrease.
5677 AT_CHECK([test $idle1 -lt $idle2])
5678 AT_CHECK([test $idle2 -lt $idle3])
5679 AT_CHECK([test $idle3 -gt $idle4])
5680
5681 # Check some invariant relationships.
5682 AT_CHECK([test $duration1 = $idle1])
5683 AT_CHECK([test $duration2 = $idle2])
5684 AT_CHECK([test $duration3 = $idle3])
5685 AT_CHECK([test $idle3 -gt $hard3])
5686 AT_CHECK([test $idle4 -lt $hard4])
5687 AT_CHECK([test $hard4 -lt $duration4])
5688
5689 OVS_VSWITCHD_STOP
5690 AT_CLEANUP
5691
5692 AT_SETUP([ofproto-dpif - fin_timeout])
5693 OVS_VSWITCHD_START
5694 ovs-appctl time/stop
5695 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
5696 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5697 [NXST_FLOW reply:
5698  idle_timeout=60, actions=fin_timeout(idle_timeout=5)
5699 ])
5700
5701 # Check that a TCP SYN packet does not change the timeout.  (Because
5702 # flow stats updates are mainly what implements the fin_timeout
5703 # feature, we warp forward a couple of times to ensure that flow stats
5704 # run before re-checking the flow table.)
5705 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
5706 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
5707 warped
5708 ])
5709 AT_CHECK([ovs-appctl revalidator/purge], [0])
5710 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5711 [NXST_FLOW reply:
5712  n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
5713 ])
5714 # Check that a TCP FIN packet does change the timeout.
5715 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
5716 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
5717 warped
5718 ])
5719 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5720 [NXST_FLOW reply:
5721  n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
5722 ])
5723 OVS_VSWITCHD_STOP
5724 AT_CLEANUP
5725
5726 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
5727 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
5728 ADD_OF_PORTS([br0], [1], [2])
5729 ADD_OF_PORTS([br1], [3])
5730
5731 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
5732 dummy@br0
5733 dummy@br1
5734 ])
5735 OVS_VSWITCHD_STOP
5736 AT_CLEANUP
5737
5738 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
5739 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
5740 ADD_OF_PORTS([br0], [1], [2])
5741 ADD_OF_PORTS([br1], [3])
5742
5743 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5744 dummy@ovs-dummy: hit:0 missed:0
5745         br0:
5746                 br0 65534/100: (dummy)
5747                 p1 1/1: (dummy)
5748                 p2 2/2: (dummy)
5749         br1:
5750                 br1 65534/101: (dummy)
5751                 p3 3/3: (dummy)
5752 ])
5753 OVS_VSWITCHD_STOP
5754 AT_CLEANUP
5755
5756 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
5757 # bump max-idle to avoid the flows being reclaimed behind us
5758 OVS_VSWITCHD_START([add-br br1 -- \
5759                     set bridge br1 datapath-type=dummy fail-mode=secure -- \
5760                     set Open_vSwitch . other_config:max-idle=10000])
5761 ADD_OF_PORTS([br0], [1], [2])
5762 ADD_OF_PORTS([br1], [3])
5763
5764 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)'])
5765 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)'])
5766 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)'])
5767 ovs-appctl revalidator/wait
5768 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5769 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5770 recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5771 ])
5772
5773 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5774 recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5775 ])
5776
5777 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5778 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
5779 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
5780 ])
5781
5782 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
5783 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
5784 ])
5785
5786 OVS_VSWITCHD_STOP
5787 AT_CLEANUP
5788
5789 AT_SETUP([ofproto-dpif - ovs-appctl dpif/get-flow])
5790
5791 OVS_VSWITCHD_START([add-br br1 -- \
5792                     set bridge br1 datapath-type=dummy fail-mode=secure -- \
5793                     set Open_vSwitch . other_config:max-idle=10000])
5794 ADD_OF_PORTS([br0], [1], [2])
5795
5796 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)'])
5797 ovs-appctl revalidator/wait
5798 AT_CHECK([ovs-appctl dpif/dump-flows -m br0], [0], [stdout])
5799
5800 UFID=`sed -n 's/\(ufid:[[-0-9a-fA-F]]*\).*/\1/p' stdout`
5801 AT_CHECK([ovs-appctl dpctl/get-flow $UFID], [0], [dnl
5802 recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5803 ])
5804
5805 OVS_VSWITCHD_STOP
5806 AT_CLEANUP
5807
5808 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
5809 OVS_VSWITCHD_START([dnl
5810    add-port br0 p1 -- set Interface p1 type=dummy
5811 ])
5812 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5813 on_exit 'kill `cat ovs-ofctl.pid`'
5814
5815 AT_CAPTURE_FILE([ofctl_monitor.log])
5816 AT_DATA([flows.txt], [dnl
5817 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
5818 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
5819 ])
5820 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5821
5822 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
5823 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
5824 dnl
5825 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
5826 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)
5827 dnl         (label 20, exp 0, [S], ttl 32)
5828 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
5829 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
5830
5831 for dl_src in 00 01; do
5832     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"])
5833 done
5834 sleep 1  # wait for the datapath flow installed
5835 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5836 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))
5837 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))
5838 ])
5839
5840 OVS_VSWITCHD_STOP
5841 AT_CLEANUP
5842
5843
5844 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
5845 OVS_VSWITCHD_START([dnl
5846    add-port br0 p1 -- set Interface p1 type=dummy
5847 ])
5848 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5849 on_exit 'kill `cat ovs-ofctl.pid`'
5850
5851 AT_CAPTURE_FILE([ofctl_monitor.log])
5852 AT_DATA([flows.txt], [dnl
5853 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
5854 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
5855 ])
5856 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5857
5858 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
5859 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
5860 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
5861 dnl
5862 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
5863 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)
5864 dnl         (label 20, exp 0, ttl 32)
5865 dnl         (label 20, exp 0, ttl 32)
5866 dnl         (label 20, exp 0, [S], ttl 32)
5867 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
5868 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
5869
5870 for dl_src in 00 01; do
5871     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"])
5872 done
5873 sleep 1  # wait for the datapath flow installed
5874 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5875 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))
5876 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))
5877 ])
5878
5879 OVS_VSWITCHD_STOP
5880 AT_CLEANUP
5881
5882 AT_SETUP([ofproto-dpif - patch ports])
5883 OVS_VSWITCHD_START([add-br br1 \
5884 -- set bridge br1 datapath-type=dummy fail-mode=secure \
5885 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
5886 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
5887
5888 ADD_OF_PORTS([br0], [2])
5889 ADD_OF_PORTS([br1], [3])
5890
5891 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
5892 ], [])
5893 AT_CHECK([ovs-appctl time/stop])
5894 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5895
5896 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
5897 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
5898
5899 for i in $(seq 1 10); do
5900     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)'
5901     if [[ $i -eq 1 ]]; then
5902         sleep 1
5903     fi
5904 done
5905
5906 for i in $(seq 1 5); do
5907     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)'
5908     if [[ $i -eq 1 ]]; then
5909         sleep 1
5910     fi
5911 done
5912
5913 AT_CHECK([ovs-appctl time/warp 500], [0],
5914 [warped
5915 ])
5916 sleep 1  # wait for log writer
5917
5918 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5919 dummy@ovs-dummy: hit:13 missed:2
5920         br0:
5921                 br0 65534/100: (dummy)
5922                 p2 2/2: (dummy)
5923                 pbr0 1/none: (patch: peer=pbr1)
5924         br1:
5925                 br1 65534/101: (dummy)
5926                 p3 3/3: (dummy)
5927                 pbr1 1/none: (patch: peer=pbr0)
5928 ])
5929
5930 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5931 recirc_id=0,ip,in_port=100,vlan_tci=0x0000,nw_frag=no, actions:101,3,2
5932 recirc_id=0,ip,in_port=101,vlan_tci=0x0000,nw_frag=no, actions:100,2,3
5933 ])
5934
5935 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
5936 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
5937 ])
5938 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
5939 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
5940 ])
5941
5942 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
5943 OFPST_PORT reply (xid=0x4): 1 ports
5944   port  1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
5945            tx pkts=10, bytes=600, drop=0, errs=0, coll=0
5946 ])
5947
5948 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
5949 OFPST_PORT reply (xid=0x4): 1 ports
5950   port  1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
5951            tx pkts=5, bytes=300, drop=0, errs=0, coll=0
5952 ])
5953
5954 OVS_VSWITCHD_STOP
5955 AT_CLEANUP
5956
5957 AT_SETUP([ofproto-dpif - patch ports - stack])
5958 OVS_VSWITCHD_START([add-br br1 \
5959 -- set bridge br1 datapath-type=dummy fail-mode=secure \
5960 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
5961 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
5962
5963 ADD_OF_PORTS([br0], [2])
5964 ADD_OF_PORTS([br1], [3])
5965
5966 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
5967 ], [])
5968 AT_CHECK([ovs-appctl time/stop])
5969 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5970
5971 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"])
5972 # Try to pop from empty stack, and push and leave data to stack.
5973 AT_CHECK([ovs-ofctl add-flow br1 "ip actions=pop:OXM_OF_IPV4_DST[[0..31]],push:NXM_NX_REG1[[0..31]],LOCAL"])
5974
5975 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)'
5976
5977 AT_CHECK([ovs-appctl time/warp 500], [0],
5978 [warped
5979 ])
5980
5981 OVS_WAIT_UNTIL([test `grep flow_add ovs-vswitchd.log | wc -l` -ge 1])
5982
5983 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5984 dummy@ovs-dummy: hit:0 missed:1
5985         br0:
5986                 br0 65534/100: (dummy)
5987                 p2 2/2: (dummy)
5988                 pbr0 1/none: (patch: peer=pbr1)
5989         br1:
5990                 br1 65534/101: (dummy)
5991                 p3 3/3: (dummy)
5992                 pbr1 1/none: (patch: peer=pbr0)
5993 ])
5994
5995 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
5996 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
5997 ])
5998
5999 AT_CHECK([cat ovs-vswitchd.log | grep -e '|nx_match|WARN|' | sed "s/^.*|WARN|//"], [0], [dnl
6000 Failed to pop from an empty stack. On flow
6001 ])
6002
6003 OVS_VSWITCHD_STOP(["/Failed to pop from an empty stack/d"])
6004 AT_CLEANUP
6005
6006 AT_SETUP([ofproto-dpif - port duration])
6007 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
6008 ADD_OF_PORTS([br0], 1, 2)
6009
6010 ovs-appctl time/stop
6011 ovs-appctl time/warp 10000
6012
6013 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
6014 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
6015 [dnl
6016            duration=?s
6017            duration=?s
6018            duration=?s
6019 ])
6020 OVS_VSWITCHD_STOP
6021 AT_CLEANUP
6022
6023 dnl ----------------------------------------------------------------------
6024 AT_BANNER([ofproto-dpif -- megaflows])
6025
6026 AT_SETUP([ofproto-dpif megaflow - port classification])
6027 OVS_VSWITCHD_START
6028 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6029 ADD_OF_PORTS([br0], [1], [2])
6030 AT_DATA([flows.txt], [dnl
6031 table=0 in_port=1 actions=output(2)
6032 ])
6033 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6034 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)'])
6035 sleep 1
6036 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)'])
6037 sleep 1
6038 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6039 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_frag=no, actions: <del>
6040 ])
6041 OVS_VSWITCHD_STOP
6042 AT_CLEANUP
6043
6044 AT_SETUP([ofproto-dpif megaflow - L2 classification])
6045 OVS_VSWITCHD_START
6046 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6047 ADD_OF_PORTS([br0], [1], [2])
6048 AT_DATA([flows.txt], [dnl
6049 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
6050 ])
6051 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6052 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)'])
6053 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)'])
6054 sleep 1
6055 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6056 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6057 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>
6058 ])
6059 OVS_VSWITCHD_STOP
6060 AT_CLEANUP
6061
6062 AT_SETUP([ofproto-dpif megaflow - L3 classification])
6063 OVS_VSWITCHD_START
6064 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6065 ADD_OF_PORTS([br0], [1], [2])
6066 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], [])
6067 AT_DATA([flows.txt], [dnl
6068 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
6069 ])
6070 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6071 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)'])
6072 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)'])
6073 sleep 1
6074 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6075 recirc_id=0,icmp,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_frag=no, actions: <del>
6076 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>
6077 ])
6078 OVS_VSWITCHD_STOP
6079 AT_CLEANUP
6080
6081 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
6082 OVS_VSWITCHD_START
6083 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6084 ADD_OF_PORTS([br0], [1], [2])
6085 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], [])
6086 AT_DATA([flows.txt], [dnl
6087 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
6088 ])
6089 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6090 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)'])
6091 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)'])
6092 sleep 1
6093 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6094 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>
6095 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>
6096 ])
6097 OVS_VSWITCHD_STOP
6098 AT_CLEANUP
6099
6100 AT_SETUP([ofproto-dpif megaflow - L4 classification])
6101 OVS_VSWITCHD_START
6102 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6103 ADD_OF_PORTS([br0], [1], [2])
6104 AT_DATA([flows.txt], [dnl
6105 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
6106 ])
6107 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6108 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)'])
6109 sleep 1
6110 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)'])
6111 sleep 1
6112 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6113 recirc_id=0,icmp,in_port=1,vlan_tci=0x0000,nw_frag=no,icmp_type=0x8/0xff, actions: <del>
6114 ])
6115 OVS_VSWITCHD_STOP
6116 AT_CLEANUP
6117
6118 AT_SETUP([ofproto-dpif megaflow - normal])
6119 OVS_VSWITCHD_START
6120 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6121 ADD_OF_PORTS([br0], [1], [2])
6122 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6123 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)'])
6124 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)'])
6125 sleep 1
6126 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6127 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>
6128 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>
6129 ])
6130 OVS_VSWITCHD_STOP
6131 AT_CLEANUP
6132
6133 AT_SETUP([ofproto-dpif megaflow - mpls])
6134 OVS_VSWITCHD_START
6135 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6136 ADD_OF_PORTS([br0], [1], [2])
6137 AT_DATA([flows.txt], [dnl
6138 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
6139 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
6140 ])
6141 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6142 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)'])
6143 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)'])
6144 sleep 1
6145 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6146 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>
6147 recirc_id=0,mpls,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,mpls_bos=1, actions: <del>
6148 ])
6149 OVS_VSWITCHD_STOP
6150 AT_CLEANUP
6151
6152 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR)
6153 m4_define([CHECK_MEGAFLOW_NETFLOW],
6154   [OVS_VSWITCHD_START
6155   AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6156   ADD_OF_PORTS([br0], [1], [2])
6157
6158   dnl NetFlow configuration disables wildcarding relevant fields
6159   on_exit 'kill `cat test-netflow.pid`'
6160   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
6161   AT_CAPTURE_FILE([netflow.log])
6162   PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
6163   ovs-vsctl \
6164      set Bridge br0 netflow=@nf -- \
6165      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
6166        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
6167
6168   AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6169   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)'])
6170   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)'])
6171   sleep 1
6172   AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6173 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>
6174 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>
6175 ])
6176   OVS_VSWITCHD_STOP])
6177
6178 AT_SETUP([ofproto-dpif megaflow - netflow - IPv4 collector])
6179 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
6180 AT_CLEANUP
6181
6182 AT_SETUP([ofproto-dpif megaflow - netflow - IPv6 collector])
6183 AT_SKIP_IF([test $HAVE_IPV6 = no])
6184 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
6185 AT_CLEANUP
6186
6187 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
6188 OVS_VSWITCHD_START(
6189   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
6190    add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
6191    set interface p2 type=dummy ofport_request=2 -- \
6192    set interface p3 type=dummy ofport_request=3])
6193 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6194 ])
6195 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6196
6197 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6198 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)'])
6199 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)'])
6200 sleep 1
6201 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6202 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>
6203 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>
6204 ])
6205 OVS_VSWITCHD_STOP
6206 AT_CLEANUP
6207
6208 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
6209 OVS_VSWITCHD_START(
6210   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
6211    add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
6212    set interface p2 type=dummy ofport_request=2 -- \
6213    set interface p3 type=dummy ofport_request=3])
6214 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6215 ])
6216 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6217
6218 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6219 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)'])
6220 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)'])
6221 sleep 1
6222 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6223 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>
6224 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>
6225 ])
6226 OVS_VSWITCHD_STOP
6227 AT_CLEANUP
6228
6229 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
6230 # Create bond0 on br0 with interfaces p0 and p1
6231 #    and bond1 on br1 with interfaces p2 and p3
6232 # with p0 patched to p2 and p1 patched to p3.
6233 OVS_VSWITCHD_START(
6234   [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
6235                             other-config:lacp-time=fast \
6236                             other-config:bond-rebalance-interval=0 -- \
6237    set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
6238    set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
6239    add-br br1 -- \
6240    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
6241    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
6242                   fail-mode=secure -- \
6243    add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
6244                             other-config:lacp-time=fast \
6245                             other-config:bond-rebalance-interval=0 -- \
6246    set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
6247    set interface p3 type=patch options:peer=p1 ofport_request=4 --])
6248
6249 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6250 ])
6251 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6252 ADD_OF_PORTS([br0], [7])
6253 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6254 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
6255 ovs-appctl time/stop
6256 ovs-appctl time/warp 5000
6257 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)'])
6258 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)'])
6259 sleep 1
6260 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6261 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>
6262 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>
6263 ])
6264 OVS_VSWITCHD_STOP
6265 AT_CLEANUP
6266
6267 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
6268 OVS_VSWITCHD_START
6269 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6270 ADD_OF_PORTS([br0], [1], [2])
6271 AT_DATA([flows.txt], [dnl
6272 table=0 in_port=1,ip actions=resubmit(90)
6273 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
6274 ])
6275 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6276 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)'])
6277 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)'])
6278 sleep 1
6279 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6280 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6281 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>
6282 ])
6283 OVS_VSWITCHD_STOP
6284 AT_CLEANUP
6285
6286 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
6287 OVS_VSWITCHD_START
6288 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6289 ADD_OF_PORTS([br0], [1], [2])
6290 AT_DATA([flows.txt], [dnl
6291 table=0 in_port=1,ip actions=resubmit(,1)
6292 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
6293 ])
6294 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6295 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)'])
6296 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=
6297 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
6298 sleep 1
6299 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6300 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6301 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
6302 ])
6303 OVS_VSWITCHD_STOP
6304 AT_CLEANUP
6305
6306 AT_SETUP([ofproto-dpif megaflow - goto_table action])
6307 OVS_VSWITCHD_START
6308 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6309 ADD_OF_PORTS([br0], [1], [2])
6310 AT_DATA([flows.txt], [dnl
6311 table=0 in_port=1,ip actions=goto_table(1)
6312 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
6313 ])
6314 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
6315 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)'])
6316 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)'])
6317 sleep 1
6318 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6319 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6320 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
6321 ])
6322 OVS_VSWITCHD_STOP
6323 AT_CLEANUP
6324
6325 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
6326 OVS_VSWITCHD_START
6327 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6328 ADD_OF_PORTS([br0], [1], [2], [3])
6329 ovs-vsctl \
6330         set Bridge br0 mirrors=@m --\
6331         --id=@p3 get Port p3 --\
6332         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
6333
6334 AT_DATA([flows.txt], [dnl
6335 in_port=1 actions=output:2
6336 ])
6337 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6338 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)'])
6339 sleep 1
6340 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)'])
6341 sleep 1
6342 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6343 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_frag=no, actions: <del>
6344 ])
6345 OVS_VSWITCHD_STOP
6346 AT_CLEANUP
6347
6348 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
6349 OVS_VSWITCHD_START
6350 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6351 ADD_OF_PORTS([br0], [1], [2], [3])
6352 ovs-vsctl \
6353         set Bridge br0 mirrors=@m --\
6354         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
6355         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
6356
6357 AT_DATA([flows.txt], [dnl
6358 in_port=1 actions=output:2
6359 ])
6360 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6361 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))'])
6362 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)'])
6363 sleep 1
6364 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6365 recirc_id=0,ip,in_port=1,dl_vlan=11,nw_frag=no, actions: <del>
6366 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, actions: <del>
6367 ])
6368 OVS_VSWITCHD_STOP
6369 AT_CLEANUP
6370
6371 AT_SETUP([ofproto-dpif megaflow - move action])
6372 OVS_VSWITCHD_START
6373 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6374 ADD_OF_PORTS([br0], [1], [2])
6375 AT_DATA([flows.txt], [dnl
6376 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
6377 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
6378 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
6379 ])
6380 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6381 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)'])
6382 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)'])
6383 sleep 1
6384 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6385 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.2,nw_frag=no, actions: <del>
6386 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_frag=no, actions: <del>
6387 ])
6388 OVS_VSWITCHD_STOP
6389 AT_CLEANUP
6390
6391 AT_SETUP([ofproto-dpif megaflow - push action])
6392 OVS_VSWITCHD_START
6393 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6394 ADD_OF_PORTS([br0], [1], [2])
6395 AT_DATA([flows.txt], [dnl
6396 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
6397 ])
6398 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6399 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)'])
6400 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)'])
6401 sleep 1
6402 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6403 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.2,nw_frag=no, actions: <del>
6404 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_frag=no, actions: <del>
6405 ])
6406 OVS_VSWITCHD_STOP
6407 AT_CLEANUP
6408
6409 AT_SETUP([ofproto-dpif megaflow - learning])
6410 OVS_VSWITCHD_START
6411 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6412 ADD_OF_PORTS([br0], [1], [2])
6413 AT_DATA([flows.txt], [dnl
6414 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
6415 ])
6416 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6417 ovs-appctl time/stop
6418 # We send each packet twice because the first packet in each flow causes the
6419 # flow table to change and thus revalidations, which (depending on timing)
6420 # can keep a megaflow from being installed.  The revalidations are done by
6421 # the second iteration, allowing the flows to be installed.
6422 for i in 1 2; do
6423     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)'])
6424     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)'])
6425     ovs-appctl time/warp 100
6426 done
6427 sleep 1
6428 dnl The original flow is missing due to a revalidation.
6429 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6430 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6431 recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
6432 ])
6433 OVS_VSWITCHD_STOP
6434 AT_CLEANUP
6435
6436 AT_SETUP([ofproto-dpif megaflow - tunnels])
6437 OVS_VSWITCHD_START(
6438   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
6439 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6440 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
6441      options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
6442 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
6443           ofport_request=3])
6444 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
6445      options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
6446      ofport_request=4 options:key=flow])
6447 AT_DATA([flows.txt], [dnl
6448 in_port=1,actions=output(2)
6449 in_port=3,actions=output(4)
6450 ])
6451 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6452 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
6453 dnl will cause the packet to be dropped.
6454 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)'])
6455 sleep 1
6456 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)'])
6457 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)'])
6458 sleep 1
6459 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)'])
6460 sleep 1
6461 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6462 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_ecn=1,nw_frag=no, actions: <del>
6463 recirc_id=0,ip,in_port=3,vlan_tci=0x0000,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no, actions: <del>
6464 recirc_id=0,ip,in_port=3,vlan_tci=0x0000,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no, actions: <del>
6465 ])
6466 OVS_VSWITCHD_STOP
6467 AT_CLEANUP
6468
6469 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
6470 OVS_VSWITCHD_START
6471 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6472 ADD_OF_PORTS([br0], [1], [2])
6473 AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
6474 AT_DATA([flows.txt], [dnl
6475 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
6476 ])
6477 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6478 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)'])
6479 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)'])
6480 sleep 1
6481 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
6482 recirc_id=0,icmp,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_ttl=64,nw_frag=no, actions: <del>
6483 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>
6484 ])
6485 OVS_VSWITCHD_STOP
6486 AT_CLEANUP
6487
6488 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
6489 OVS_VSWITCHD_START
6490 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6491 ADD_OF_PORTS([br0], [1], [2])
6492 AT_DATA([flows.txt], [dnl
6493 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
6494 ])
6495 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6496 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)'])
6497 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)'])
6498 sleep 1
6499 dnl The first packet is essentially a no-op, as the new destination MAC is the
6500 dnl same as the original.  The second entry actually updates the destination
6501 dnl MAC.
6502 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
6503 recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions:2
6504 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
6505 ])
6506 OVS_VSWITCHD_STOP
6507 AT_CLEANUP
6508
6509 AT_SETUP([ofproto-dpif megaflow - disabled])
6510 OVS_VSWITCHD_START
6511 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6512 ADD_OF_PORTS([br0], [1], [2])
6513 AT_DATA([flows.txt], [dnl
6514 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
6515 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
6516 ])
6517 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
6518 ], [])
6519 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
6520 ], [])
6521 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
6522 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6523 for i in 1 2 3 4; do
6524     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)'])
6525     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)'])
6526     if [[ $i -eq 1 ]]; then
6527         sleep 1
6528     fi
6529 done
6530 sleep 1
6531 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
6532 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
6533 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
6534 ])
6535 AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
6536 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
6537 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
6538 ])
6539 OVS_VSWITCHD_STOP
6540 AT_CLEANUP
6541
6542 AT_SETUP([ofproto-dpif - datapath port number change])
6543 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
6544 ADD_OF_PORTS([br0], 1)
6545
6546 # Trace a flow that should output to p1.
6547 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
6548   [0], [stdout])
6549 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
6550 ])
6551
6552 # Change p1's port number to 5.
6553 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
6554
6555 # Trace a flow that should output to p1 in its new location.
6556 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
6557   [0], [stdout])
6558 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
6559 ])
6560 OVS_VSWITCHD_STOP
6561 AT_CLEANUP
6562
6563 # Tests the bundling with various bfd and cfm configurations.
6564 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
6565 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
6566                     add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
6567                     add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
6568                     set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
6569                     set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
6570                     set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
6571                     set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
6572                     set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
6573                     set Interface p0 cfm_mpid=1 -- \
6574                     set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
6575
6576 ovs-appctl time/stop
6577 # advance the clock to stablize everything.
6578 ovs-appctl time/warp 5000 100
6579 # cfm/show should show 'recv' fault.
6580 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6581         fault: recv
6582 ])
6583 # bfd/show should show 'up'.
6584 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6585         Local Session State: up
6586         Remote Session State: up
6587         Local Session State: up
6588         Remote Session State: up
6589 ])
6590 # bond/show should show 'may-enable: true' for all slaves.
6591 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6592         may_enable: true
6593         may_enable: true
6594         may_enable: true
6595         may_enable: true
6596 ])
6597
6598 # now disable the bfd on p1.
6599 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
6600 # advance the clock to stablize everything.
6601 ovs-appctl time/warp 5000 100
6602 # cfm/show should show 'recv' fault.
6603 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6604         fault: recv
6605 ])
6606 # bfd/show should show 'down'.
6607 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6608         Local Session State: down
6609         Remote Session State: down
6610 ])
6611 # bond/show should show 'may-enable: false' for p0.
6612 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6613         may_enable: false
6614         may_enable: true
6615 ])
6616
6617 # now enable the bfd on p1 and disable bfd on p0.
6618 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
6619 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
6620 # advance the clock to stablize everything.
6621 ovs-appctl time/warp 5000 100
6622 # cfm/show should show 'recv' fault.
6623 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6624         fault: recv
6625 ])
6626 # bfd/show should show 'down'.
6627 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6628         Local Session State: down
6629         Remote Session State: down
6630 ])
6631 # bond/show should show 'may-enable: false' for p0 and p1.
6632 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6633         may_enable: false
6634         may_enable: true
6635         may_enable: false
6636         may_enable: true
6637 ])
6638
6639 OVS_VSWITCHD_STOP
6640 AT_CLEANUP
6641
6642 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
6643 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
6644
6645 # enable bfd on p0.
6646 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
6647 # check log.
6648 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
6649 # disable bfd on p0.
6650 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
6651 # check log.
6652 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
6653 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
6654
6655 # enable cfm on p0.
6656 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
6657 # check log.
6658 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
6659 # disable cfm on p0.
6660 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
6661 # check log.
6662 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
6663 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
6664
6665 # enable both bfd and cfm on p0.
6666 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
6667 # check log.
6668 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
6669 # disable bfd on p0.
6670 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
6671 # check log, there should not be the log of thread terminated.
6672 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
6673 ])
6674 # reenable bfd on p0.
6675 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
6676 # check log, should still be on log of thread created.
6677 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
6678 monitor thread created
6679 ])
6680 # disable bfd and cfm together.
6681 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
6682 # check log.
6683 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
6684
6685 OVS_VSWITCHD_STOP
6686 AT_CLEANUP
6687
6688 # this test helps avoid the deadlock between the main thread and monitor thread.
6689 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
6690 OVS_VSWITCHD_START
6691
6692 for i in `seq 1 199`
6693 do
6694     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])
6695 done
6696
6697 OVS_VSWITCHD_STOP
6698 AT_CLEANUP
6699 \f
6700 AT_BANNER([ofproto-dpif - flow translation resource limits])
6701
6702 AT_SETUP([ofproto-dpif - infinite resubmit])
6703 OVS_VSWITCHD_START
6704 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
6705 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
6706   [0], [stdout])
6707 AT_CHECK([tail -1 stdout], [0],
6708   [Translation failed (Recursion too deep), packet is dropped.
6709 ])
6710 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' stdout],
6711   [0], [1
6712 ])
6713 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
6714 AT_CLEANUP
6715
6716 AT_SETUP([ofproto-dpif - exponential resubmit chain])
6717 OVS_VSWITCHD_START
6718 ADD_OF_PORTS([br0], 1)
6719 (for i in `seq 1 64`; do
6720      j=`expr $i + 1`
6721      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6722  done
6723  echo "in_port=65, actions=local") > flows
6724  AT_CHECK([ovs-ofctl add-flows br0 flows])
6725 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
6726 AT_CHECK([tail -1 stdout], [0],
6727   [Translation failed (Too many resubmits), packet is dropped.
6728 ])
6729 AT_CHECK([grep -c 'over 4096 resubmit actions' stdout], [0], [1
6730 ])
6731 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
6732 AT_CLEANUP
6733
6734 AT_SETUP([ofproto-dpif - too many output actions])
6735 OVS_VSWITCHD_START
6736 ADD_OF_PORTS([br0], 1)
6737 (for i in `seq 1 12`; do
6738      j=`expr $i + 1`
6739      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6740  done
6741  echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
6742 AT_CHECK([ovs-ofctl add-flows br0 flows])
6743 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
6744 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
6745   [0], [1
6746 ])
6747 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' stdout], [0], [1
6748 ])
6749 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
6750 AT_CLEANUP
6751
6752 AT_SETUP([ofproto-dpif - stack too deep])
6753 OVS_VSWITCHD_START
6754 ADD_OF_PORTS([br0], 1)
6755 (for i in `seq 1 12`; do
6756      j=`expr $i + 1`
6757      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6758  done
6759  push="push:NXM_NX_REG0[[]]"
6760  echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
6761  AT_CHECK([ovs-ofctl add-flows br0 flows])
6762 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
6763 AT_CHECK([tail -1 stdout], [0],
6764   [Translation failed (Stack too deep), packet is dropped.
6765 ])
6766 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' stdout], [0], [1
6767 ])
6768 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
6769 AT_CLEANUP
6770
6771
6772 AT_SETUP([ofproto-dpif packet-out controller])
6773 OVS_VSWITCHD_START
6774 ADD_OF_PORTS([br0], 1, 2)
6775
6776 AT_CHECK([ovs-ofctl add-flow br0 'dl_dst=50:54:00:00:00:0a actions=controller'])
6777
6778 AT_CAPTURE_FILE([ofctl_monitor.log])
6779 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6780
6781 for i in 1 2 3; do
6782         AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER controller '50540000000a5054000000091234'])
6783 done
6784
6785 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6786 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6787 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6788 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6789 dnl
6790 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6791 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6792 dnl
6793 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
6794 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6795 ])
6796
6797 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
6798  dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6799 NXST_FLOW reply:
6800 ])
6801
6802 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6803   table 0:
6804     active=1, lookup=0, matched=0
6805
6806   table 1:
6807     active=0, lookup=0, matched=0
6808 "
6809  for i in `seq 2 253`; do
6810      printf '  table %d: ditto\n' $i
6811  done) > expout
6812 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6813
6814 OVS_VSWITCHD_STOP
6815 AT_CLEANUP
6816
6817 AT_SETUP([ofproto-dpif packet-out controller (patch port)])
6818 OVS_VSWITCHD_START(
6819   [-- \
6820    add-port br0 p1 -- \
6821    set interface p1 type=patch options:peer=p2 -- \
6822    add-br br1 -- \
6823    set bridge br1 datapath-type=dummy -- \
6824    set bridge br1 fail-mode=secure -- \
6825    set bridge br1 protocols='[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13]' -- \
6826    add-port br1 p2 -- \
6827    set interface p2 type=patch options:peer=p1 --])
6828
6829 AT_CAPTURE_FILE([ofctl_monitor.log])
6830 AT_CHECK([ovs-ofctl monitor br1 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6831
6832 for i in 1 2 3; do
6833         AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER output:1 '50540000000a5054000000091234'])
6834 done
6835
6836 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6837 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6838 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
6839 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6840 dnl
6841 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
6842 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6843 dnl
6844 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
6845 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6846 ])
6847
6848 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6849   table 0:
6850     active=0, lookup=0, matched=0
6851 "
6852  for i in `seq 1 253`; do
6853      printf '  table %d: ditto\n' $i
6854  done) > expout
6855 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6856
6857 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6858   table 0:
6859     active=0, lookup=3, matched=0
6860
6861   table 1:
6862     active=0, lookup=0, matched=0
6863 "
6864  for i in `seq 2 253`; do
6865      printf '  table %d: ditto\n' $i
6866  done) > expout
6867 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br1 ], [0], [expout])
6868
6869 OVS_VSWITCHD_STOP
6870 AT_CLEANUP
6871
6872
6873 AT_SETUP([ofproto-dpif packet-out goto_table])
6874 OVS_VSWITCHD_START
6875 ADD_OF_PORTS([br0], 1, 2)
6876
6877 AT_DATA([flows.txt], [dnl
6878 table=0 dl_dst=50:54:00:00:00:0a actions=goto_table(1)
6879 table=1 dl_dst=50:54:00:00:00:0a actions=controller
6880 ])
6881 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
6882
6883 AT_CAPTURE_FILE([ofctl_monitor.log])
6884 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6885
6886 for i in 1 2 3; do
6887     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)'
6888 done
6889
6890 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6891 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6892 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6893 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (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 dnl
6896 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6897 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6898 dnl
6899 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6900 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6901 ])
6902
6903 AT_CHECK([ovs-appctl revalidator/purge], [0])
6904 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
6905  n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=goto_table:1
6906  table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6907 OFPST_FLOW reply (OF1.3):
6908 ])
6909
6910 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6911   table 0:
6912     active=1, lookup=3, matched=3
6913
6914   table 1: ditto
6915   table 2:
6916     active=0, lookup=0, matched=0
6917 "
6918  for i in `seq 3 253`; do
6919      printf '  table %d: ditto\n' $i
6920  done) > expout
6921 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6922
6923 OVS_VSWITCHD_STOP
6924 AT_CLEANUP
6925
6926
6927 AT_SETUP([ofproto-dpif packet-out table-miss (continue)])
6928 OVS_VSWITCHD_START
6929 ADD_OF_PORTS([br0], 1, 2)
6930
6931 AT_CHECK([ovs-ofctl -O OpenFlow11 add-flow br0 'table=1 dl_dst=50:54:00:00:00:0a actions=controller'])
6932 AT_CHECK([ovs-ofctl -O OpenFlow11 mod-table br0 all continue])
6933
6934 AT_CAPTURE_FILE([ofctl_monitor.log])
6935 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6936
6937 for i in 1 2 3; do
6938     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)'
6939 done
6940
6941 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6942 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6943 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6944 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6945 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6946 dnl
6947 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6948 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6949 dnl
6950 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
6951 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
6952 ])
6953
6954 AT_CHECK([ovs-appctl revalidator/purge], [0])
6955 AT_CHECK([ovs-ofctl -O OpenFlow11 dump-flows br0 | ofctl_strip | sort], [0], [dnl
6956  table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6957 OFPST_FLOW reply (OF1.1):
6958 ])
6959
6960 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6961   table 0:
6962     active=0, lookup=3, matched=0
6963
6964   table 1:
6965     active=1, lookup=3, matched=3
6966
6967   table 2:
6968     active=0, lookup=0, matched=0
6969 "
6970  for i in `seq 3 253`; do
6971      printf '  table %d: ditto\n' $i
6972  done) > expout
6973 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6974
6975 OVS_VSWITCHD_STOP
6976 AT_CLEANUP
6977
6978 AT_SETUP([ofproto-dpif - ICMPv6])
6979 OVS_VSWITCHD_START
6980 ADD_OF_PORTS([br0], 1)
6981
6982 AT_CAPTURE_FILE([ofctl_monitor.log])
6983
6984 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6985
6986 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
6987
6988 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6989
6990 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6991 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
6992 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
6993 ])
6994
6995 OVS_VSWITCHD_STOP
6996 AT_CLEANUP
6997
6998 AT_SETUP([ofproto-dpif - Neighbor Discovery set-field with checksum update])
6999 OVS_VSWITCHD_START
7000 ADD_OF_PORTS([br0], 1)
7001 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])
7002
7003 AT_CAPTURE_FILE([ofctl_monitor.log])
7004
7005 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
7006
7007 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
7008
7009 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
7010
7011 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
7012 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via action) data_len=86 (unbuffered)
7013 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
7014 ])
7015
7016 OVS_VSWITCHD_STOP
7017 AT_CLEANUP
7018
7019 # Tests the exact match of CFI bit in installed datapath flows matching VLAN.
7020 AT_SETUP([ofproto-dpif - vlan matching])
7021 OVS_VSWITCHD_START(
7022   [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
7023 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7024
7025 AT_CHECK([ovs-ofctl del-flows br0])
7026 AT_CHECK([ovs-ofctl add-flow br0 "vlan_tci=0x000a/0x0fff,action=output:local"])
7027
7028 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))'])
7029
7030 OVS_WAIT_UNTIL([grep flow_add: ovs-vswitchd.log])
7031 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port=[[1]]' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
7032 recirc_id=0,ip,in_port=1,dl_vlan=10,nw_frag=no, actions: <del>
7033 ])
7034 OVS_VSWITCHD_STOP
7035 AT_CLEANUP
7036
7037 # Tests in place modification of installed datapath flows.
7038 AT_SETUP([ofproto-dpif - in place modification])
7039 OVS_VSWITCHD_START(
7040   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
7041 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7042
7043 AT_CHECK([ovs-ofctl del-flows br0])
7044 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=mod_vlan_vid:3,output:local])
7045
7046 ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
7047
7048 ovs-appctl time/stop
7049
7050 for i in 1 2 3; do
7051     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)'
7052 done
7053
7054 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7055 recirc_id(0),in_port(1),eth_type(0x1234), packets:2, bytes:120, used:0.0s, actions:push_vlan(vid=3,pcp=0),100
7056 ])
7057
7058 AT_CHECK([ovs-ofctl add-flow br0 priority=60000,in_port=1,actions=mod_vlan_vid:4,output:local])
7059
7060 ovs-appctl time/warp 500
7061 ovs-appctl time/warp 500
7062
7063 for i in 1 2 3; do
7064     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)'
7065 done
7066
7067 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7068 recirc_id(0),in_port(1),eth_type(0x1234), packets:5, bytes:300, used:0.0s, actions:push_vlan(vid=4,pcp=0),100
7069 ])
7070
7071 AT_CHECK([cat ovs-vswitchd.log | grep 'modify' | STRIP_UFID ], [0], [dnl
7072 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
7073 ])
7074 OVS_VSWITCHD_STOP
7075 AT_CLEANUP
7076
7077 # Tests in place modification of installed datapath flows with vlans.
7078 AT_SETUP([ofproto-dpif - in place modification (vlan)])
7079 OVS_VSWITCHD_START(
7080   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
7081 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7082
7083 AT_CHECK([ovs-ofctl del-flows br0])
7084 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=output:local])
7085
7086 ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
7087
7088 ovs-appctl time/stop
7089
7090 # Check that a correct datapath flow is created.
7091 for i in 1 2 3; do
7092     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)'
7093 done
7094
7095 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7096 recirc_id(0),in_port(1),eth_type(0x1234), packets:2, bytes:120, used:0.0s, actions:100
7097 ])
7098
7099 # Delete the flow.  Then check that the datapath flow is modified to
7100 # drop the packets.  A modified flow inherits the stats, a new
7101 # datapath flow would start from sero.
7102 AT_CHECK([ovs-ofctl del-flows br0])
7103
7104 ovs-appctl time/warp 500
7105 ovs-appctl time/warp 500
7106
7107 for i in 1 2 3; do
7108     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)'
7109 done
7110
7111 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7112 recirc_id(0),in_port(1),eth_type(0x1234), packets:5, bytes:300, used:0.0s, actions:drop
7113 ])
7114
7115 # Add a flow that matches the non-presence of a vlan tag, and check
7116 # that the datapath flow is modified accordingly.
7117 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,vlan_tci=0x0000/0x1fff,actions=output:local])
7118
7119 ovs-appctl time/warp 500
7120 ovs-appctl time/warp 500
7121
7122 for i in 1 2 3; do
7123     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)'
7124 done
7125
7126 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7127 recirc_id(0),in_port(1),eth_type(0x1234), packets:8, bytes:480, used:0.0s, actions:100
7128 ])
7129
7130 # Check that VLAN packets will not hit the same datapath megaflow.
7131 for i in 1 2 3; do
7132     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))'
7133 done
7134
7135 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7136 recirc_id(0),in_port(1),eth_type(0x1234), packets:8, bytes:480, used:0.0s, actions:100
7137 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
7138 ])
7139
7140 # Check that the new flow matches the CFI bit, while both vid and pcp
7141 # are wildcarded.
7142 AT_CHECK([cat ovs-vswitchd.log | grep '\(modify\)\|\(flow_add\)' | STRIP_UFID ], [0], [dnl
7143 dpif_netdev|DBG|flow_add: recirc_id=0,in_port=1,vlan_tci=0x0000,dl_type=0x1234, actions:100
7144 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)
7145 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
7146 dpif_netdev|DBG|flow_add: recirc_id=0,in_port=1,vlan_tci=0xf063/0x1000,dl_type=0x1234, actions:drop
7147 ])
7148 OVS_VSWITCHD_STOP
7149 AT_CLEANUP