]> git.proxmox.com Git - ovs.git/blob - tests/ofproto-dpif.at
ofproto/trace: Add --ct-next option to ofproto/trace
[ovs.git] / tests / ofproto-dpif.at
1 AT_BANNER([ofproto-dpif])
2
3 AT_SETUP([ofproto-dpif - revalidator/wait])
4 OVS_VSWITCHD_START
5 AT_CHECK([ovs-appctl revalidator/wait])
6 OVS_VSWITCHD_STOP
7 AT_CLEANUP
8
9 AT_SETUP([ofproto-dpif - active-backup bonding])
10 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
11 # and br1 with interfaces p3, p4 and p8.
12 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
13 OVS_VSWITCHD_START(
14 [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
15 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
16 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
17 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
18 add-br br1 -- \
19 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
20 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
21 fail-mode=secure -- \
22 add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
23 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
24 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
25 WAIT_FOR_DUMMY_PORTS([p3], [p4])
26 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
27
28 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
29 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
30 ovs-appctl netdev-dummy/set-admin-state up
31 ovs-appctl time/warp 100
32 ovs-appctl netdev-dummy/set-admin-state p2 down
33 ovs-appctl time/stop
34 ovs-appctl time/warp 100
35 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
36 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
37 ovs-appctl time/warp 100
38 ovs-appctl netdev-dummy/set-admin-state p2 up
39 ovs-appctl netdev-dummy/set-admin-state p1 down
40 ovs-appctl time/warp 100
41 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
42 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
43 ovs-appctl time/warp 200 100
44 sleep 1
45 AT_CHECK([grep 'in_port([[348]])' ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl
46 recirc_id(0),in_port(3),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
47 recirc_id(0),in_port(3),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
48 recirc_id(0),in_port(4),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(frag=no), actions: <del>
49 recirc_id(0),in_port(4),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(frag=no), actions: <del>
50 recirc_id(0),in_port(4),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035), actions: <del>
51 recirc_id(0),in_port(4),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035), 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=38, 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=34, priority=1,in_port=5 actions=mod_vlan_vid:1,output:101
203 priority=2,in_port=5,dl_vlan=1 actions=drop
204 NXST_FLOW reply:
205 ])
206
207 OVS_VSWITCHD_STOP()
208 AT_CLEANUP
209
210 AT_SETUP([ofproto-dpif - resubmit])
211 OVS_VSWITCHD_START
212 add_of_ports br0 1 10 11 12 13 14 15 16 17 18 19 20 21
213 AT_DATA([flows.txt], [dnl
214 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
215 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
216 table=0 in_port=3 priority=2000 icmp actions=output(20)
217 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
218 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
219 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
220 ])
221 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
222 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=p1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
223 AT_CHECK([tail -1 stdout], [0],
224 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
225 ])
226 OVS_VSWITCHD_STOP
227 AT_CLEANUP
228
229 AT_SETUP([ofproto-dpif - goto table])
230 OVS_VSWITCHD_START
231 add_of_ports br0 1 10 11
232 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
233 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
234 echo "table=64 actions=output(11)" >> flows.txt
235 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
236 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
237 AT_CHECK([tail -1 stdout], [0],
238 [Datapath actions: 10,11
239 ])
240 OVS_VSWITCHD_STOP
241 AT_CLEANUP
242
243 AT_SETUP([ofproto-dpif - write actions])
244 OVS_VSWITCHD_START
245 add_of_ports br0 1 10 11 12 13
246 AT_DATA([flows.txt], [dnl
247 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
248 table=1 ip actions=write_actions(output(13)),goto_table(2)
249 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
250 ])
251 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
252 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
253 AT_CHECK([tail -2 stdout], [0],
254 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
255 Datapath actions: 10,set(ipv4(src=192.168.3.91)),11,set(ipv4(src=192.168.3.90)),13
256 ])
257 OVS_VSWITCHD_STOP
258 AT_CLEANUP
259
260 AT_SETUP([ofproto-dpif - modify IPv6 Neighbor Solitication (ND)])
261 OVS_VSWITCHD_START
262 add_of_ports br0 1 10 11 12 13
263 AT_DATA([flows.txt], [dnl
264 table=0 in_port=1,icmp6,icmpv6_type=135 actions=output(10),write_actions(set_field:fe80::3->nd_target,set_field:aa:aa:aa:aa:aa:aa->nd_sll,output(12)),goto_table(1)
265 table=1 icmp6 actions=write_actions(output(13)),goto_table(2)
266 table=2 in_port=1,icmp6,icmpv6_type=135 actions=set_field:fe80::4->nd_target,set_field:cc:cc:cc:cc:cc:cc->nd_sll,output(11)
267 ])
268 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
269 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,icmp6,ipv6_src=fe80::1,ipv6_dst=fe80::2,nw_tos=0,nw_ttl=128,icmpv6_type=135,nd_target=fe80::2020,nd_sll=66:55:44:33:22:11'], [0], [stdout])
270 AT_CHECK([tail -4 stdout], [0],
271 [Megaflow: recirc_id=0,icmp6,in_port=1,nw_frag=no,icmp_type=0x87/0xff,icmp_code=0x0/0xff,nd_target=fe80::2020,nd_sll=66:55:44:33:22:11
272 Datapath actions: 10,set(nd(target=fe80::4,sll=cc:cc:cc:cc:cc:cc)),11,set(nd(target=fe80::3,sll=aa:aa:aa:aa:aa:aa)),13
273 This flow is handled by the userspace slow path because it:
274 - Uses action(s) not supported by datapath.
275 ])
276 OVS_VSWITCHD_STOP
277 AT_CLEANUP
278
279 AT_SETUP([ofproto-dpif - clear actions])
280 OVS_VSWITCHD_START
281 add_of_ports br0 1 10 11 12
282 AT_DATA([flows.txt], [dnl
283 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
284 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
285 ])
286 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
287 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=9'], [0], [stdout])
288 AT_CHECK([tail -2 stdout], [0],
289 [Megaflow: recirc_id=0,tcp,in_port=1,nw_frag=no,tp_src=8
290 Datapath actions: 10,set(tcp(src=91)),11
291 ])
292 OVS_VSWITCHD_STOP
293 AT_CLEANUP
294
295 AT_SETUP([ofproto-dpif - group chaining])
296 OVS_VSWITCHD_START
297 add_of_ports br0 1 10 11
298 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=set_field:192.168.3.90->ip_src,group:123,bucket=output:11'])
299 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=123,type=all,bucket=output:10'])
300 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
301 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
302 AT_CHECK([tail -1 stdout], [0],
303 [Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
304 ])
305 OVS_VSWITCHD_STOP
306 AT_CLEANUP
307
308 AT_SETUP([ofproto-dpif - all group in action list])
309 OVS_VSWITCHD_START
310 add_of_ports br0 1 10 11
311 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
312 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
313 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
314 # Must match on the source address to be able to restore it's value for
315 # the second bucket
316 AT_CHECK([tail -2 stdout], [0],
317 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
318 Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
319 ])
320 OVS_VSWITCHD_STOP
321 AT_CLEANUP
322
323 AT_SETUP([ofproto-dpif - indirect group in action list])
324 OVS_VSWITCHD_START
325 add_of_ports br0 1 10
326 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
327 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
328 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
329 AT_CHECK([tail -1 stdout], [0],
330 [Datapath actions: 10
331 ])
332 OVS_VSWITCHD_STOP
333 AT_CLEANUP
334
335 AT_SETUP([ofproto-dpif - group actions have no effect afterwards])
336 OVS_VSWITCHD_START
337 add_of_ports br0 1 10
338 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=set_field:192.168.3.90->ip_src,output:10'])
339 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234,output:10'])
340 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
341 AT_CHECK([tail -1 stdout], [0],
342 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2)),10
343 ])
344 OVS_VSWITCHD_STOP
345 AT_CLEANUP
346
347 AT_SETUP([ofproto-dpif - all group in action set])
348 OVS_VSWITCHD_START
349 add_of_ports br0 1 10 11
350 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
351 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
352 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
353 # Must match on the source address to be able to restore it's value for
354 # the third bucket
355 AT_CHECK([tail -2 stdout], [0],
356 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
357 Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
358 ])
359 OVS_VSWITCHD_STOP
360 AT_CLEANUP
361
362 AT_SETUP([ofproto-dpif - indirect group in action set])
363 OVS_VSWITCHD_START
364 add_of_ports br0 1 10
365 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
366 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
367 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
368 AT_CHECK([tail -1 stdout], [0],
369 [Datapath actions: 10
370 ])
371 OVS_VSWITCHD_STOP
372 AT_CLEANUP
373
374 AT_SETUP([ofproto-dpif - select group])
375 OVS_VSWITCHD_START
376 add_of_ports br0 1 10 11
377 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
378 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
379
380 # Try a bunch of different flows and make sure that they get distributed
381 # at least somewhat.
382 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
383 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:0$d,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0"], [0], [stdout])
384 tail -1 stdout >> results
385 done
386 sort results | uniq -c
387 AT_CHECK([sort results | uniq], [0],
388 [Datapath actions: 10
389 Datapath actions: 11
390 ])
391 OVS_VSWITCHD_STOP
392 AT_CLEANUP
393
394 AT_SETUP([ofproto-dpif - select group with watch port])
395 OVS_VSWITCHD_START
396 add_of_ports br0 1 10 11
397 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
398 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
399 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
400 AT_CHECK([tail -1 stdout], [0],
401 [Datapath actions: 11
402 ])
403 OVS_VSWITCHD_STOP
404 AT_CLEANUP
405
406 AT_SETUP([ofproto-dpif - select group with weight])
407 OVS_VSWITCHD_START
408 add_of_ports br0 1 10 11 12
409 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2000,bucket=output:12,weight=0'])
410 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
411 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
412 AT_CHECK([tail -1 stdout], [0],
413 [Datapath actions: 11
414 ])
415 OVS_VSWITCHD_STOP
416 AT_CLEANUP
417
418 AT_SETUP([ofproto-dpif - select group with hash selection method])
419 OVS_VSWITCHD_START
420 add_of_ports br0 1 10 11
421 # Check that parse failures after 'fields' parsing work
422 AT_CHECK([ovs-ofctl -O OpenFlow10 add-group br0 'group_id=1,type=select,fields(eth_dst),bukket=output:10'], [1], ,[dnl
423 ovs-ofctl: unknown keyword bukket
424 ])
425 AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 'group_id=1234,type=select,selection_method=hash,fields(eth_dst,ip_dst,tcp_dst),bucket=output:10,bucket=output:11'])
426 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 'ip actions=write_actions(group:1234)'])
427
428 # Try a bunch of different flows and make sure that they get distributed
429 # at least somewhat.
430 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
431 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])
432 tail -1 stdout >> results
433 done
434 sort results | uniq -c
435 AT_CHECK([sort results | uniq], [0],
436 [Datapath actions: 10
437 Datapath actions: 11
438 ])
439
440 > results
441 # Try a bunch of different flows and make sure that they are not distributed
442 # as they only vary a field that is not hashed
443 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
444 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:0$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])
445 tail -1 stdout >> results
446 done
447 sort results | uniq -c
448 AT_CHECK([sort results | uniq | sed 's/1[[01]]/1?/'], [0],
449 [Datapath actions: 1?
450 ])
451
452 # Check that fields are rejected without "selection_method=hash".
453 AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 'group_id=1235,type=select,fields(eth_dst,ip_dst,tcp_dst),bucket=output:10,bucket=output:11'], 1, [], [dnl
454 ovs-ofctl: fields may only be specified with "selection_method=hash"
455 ])
456
457 # Check that selection_method_param without selection_method is rejected.
458 AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 'group_id=1235,type=select,selection_method_param=1,bucket=output:10,bucket=output:11'], 1, [], [dnl
459 ovs-ofctl: selection_method_param is only allowed with "selection_method"
460 ])
461
462 OVS_VSWITCHD_STOP
463 AT_CLEANUP
464
465 AT_SETUP([ofproto-dpif - select group with dp_hash selection method])
466 OVS_VSWITCHD_START
467 add_of_ports br0 1 10 11
468 AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 'group_id=1234,type=select,selection_method=dp_hash,bucket=output:10,bucket=output:11'])
469 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 'ip,nw_src=192.168.0.1 actions=group:1234'])
470
471 # Try a bunch of different flows and make sure that they get distributed
472 # at least somewhat.
473 for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
474 pkt="in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:01),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.1.$d,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
475 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
476 done
477
478 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/dp_hash(.*\/0x1)/dp_hash(0xXXXX\/0x1)/' | sed 's/packets.*actions:1/actions:1/' | strip_ufid | strip_used | sort], [0], [dnl
479 flow-dump from non-dpdk interfaces:
480 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:630, used:0.0s, actions:hash(hash_l4(0)),recirc(0x1)
481 recirc_id(0x1),dp_hash(0xXXXX/0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:10
482 recirc_id(0x1),dp_hash(0xXXXX/0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:11
483 ])
484
485 AT_CHECK([ovs-appctl revalidator/purge], [0])
486
487 # Try a bunch of different flows and make sure that they are not distributed
488 # as they only vary a field that is not hashed
489 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
490 pkt="in_port(1),eth(src=50:54:00:00:00:$d,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)"
491 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
492 done
493
494 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/dp_hash(.*\/0x1)/dp_hash(0xXXXX\/0x1)/' | strip_ufid | strip_used | sort], [0], [dnl
495 flow-dump from non-dpdk interfaces:
496 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.168.0.1,frag=no), packets:15, bytes:630, used:0.0s, actions:hash(hash_l4(0)),recirc(0x2)
497 recirc_id(0x2),dp_hash(0xXXXX/0x1),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:15, bytes:630, used:0.0s, actions:11
498 ])
499
500 OVS_VSWITCHD_STOP
501 AT_CLEANUP
502
503 AT_SETUP([ofproto-dpif - fast failover group])
504 OVS_VSWITCHD_START
505 add_of_ports br0 1 10 11
506 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'])
507 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
508 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])
509 AT_CHECK([tail -1 stdout], [0],
510 [Datapath actions: drop
511 ])
512 OVS_VSWITCHD_STOP
513 AT_CLEANUP
514
515 AT_SETUP([ofproto-dpif - group stats single bucket])
516 OVS_VSWITCHD_START
517 add_of_ports br0 1 10 11
518 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,weight=2000,bucket=output:11,weight=0'])
519 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
520 (
521 for i in `seq 0 2`;
522 do
523 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)"
524 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
525 done
526 )
527 AT_CHECK([ovs-appctl revalidator/purge], [0])
528 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
529 AT_CHECK([strip_xids < stdout | sort], [0], [dnl
530 group_id=1234,ref_count=1,packet_count=3,byte_count=126,bucket0:packet_count=3,byte_count=126,bucket1:packet_count=0,byte_count=0
531 OFPST_GROUP reply (OF1.2):
532 ])
533 OVS_VSWITCHD_STOP
534 AT_CLEANUP
535
536 AT_SETUP([ofproto-dpif - group stats all buckets])
537 OVS_VSWITCHD_START
538 add_of_ports br0 1 10 11
539 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:11'])
540 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
541 (
542 for i in `seq 0 2`;
543 do
544 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)"
545 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
546 done
547 )
548 AT_CHECK([ovs-appctl revalidator/purge], [0])
549 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
550 AT_CHECK([strip_xids < stdout | sort], [0], [dnl
551 group_id=1234,ref_count=1,packet_count=3,byte_count=126,bucket0:packet_count=3,byte_count=126,bucket1:packet_count=3,byte_count=126
552 OFPST_GROUP reply (OF1.2):
553 ])
554 OVS_VSWITCHD_STOP
555 AT_CLEANUP
556
557 AT_SETUP([ofproto-dpif - registers])
558 OVS_VSWITCHD_START
559 add_of_ports br0 20 21 22 33 90
560 AT_DATA([flows.txt], [dnl
561 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
562 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
563 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
564 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
565
566 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
567 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
568 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
569 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
570 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
571 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
572 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
573 in_port=9,reg0=0xdeadbeef actions=output:20
574 in_port=10,reg1=0xdeadbeef actions=output:21
575 in_port=11,reg2=0xeef22dea actions=output:22
576
577 dnl Sanilty check all registers
578 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
579 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
580 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
581 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
582
583 ])
584 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
585 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])
586 AT_CHECK([tail -1 stdout], [0],
587 [Datapath actions: 20,21,22,33
588 ])
589 OVS_VSWITCHD_STOP
590 AT_CLEANUP
591
592 dnl Tests that the standardized xregs are mapped onto the legacy OVS registers
593 dnl in the manner documented in ovs-ofctl(8).
594 AT_SETUP([ofproto-dpif - extended registers])
595 OVS_VSWITCHD_START
596 add_of_ports br0 1 2 3
597 AT_DATA([flows.txt], [dnl
598 table=0 actions=load:0xfedcba9876543210->OXM_OF_PKT_REG1[[]],resubmit(,1)
599 table=1,reg2=0xfedcba98,reg3=0x76543210 actions=2
600
601 # These low-priority rules shouldn't match. They're here only to make really
602 # sure that the test fails if either of the above rules fails to match.
603 table=0,priority=0 actions=3
604 table=1,priority=0 actions=3
605 ])
606 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
607 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])
608 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
609 ])
610 OVS_VSWITCHD_STOP
611 AT_CLEANUP
612
613 dnl Tests that the standardized xxregs are mapped onto the legacy OVS
614 dnl registers in the manner documented in ovs-ofctl(8).
615 AT_SETUP([ofproto-dpif - extended-extended registers])
616 OVS_VSWITCHD_START
617 add_of_ports br0 1 2 3
618 AT_DATA([flows.txt], [dnl
619 table=0 actions=load:0x0123456789abcdeffedcba9876543210->NXM_NX_XXREG1[[]],resubmit(,1)
620 table=1,reg4=0x01234567,reg5=0x89abcdef,reg6=0xfedcba98,reg7=0x76543210 actions=2
621
622 # These low-priority rules shouldn't match. They're here only to make really
623 # sure that the test fails if either of the above rules fails to match.
624 table=0,priority=0 actions=3
625 table=1,priority=0 actions=3
626 ])
627 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
628 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])
629 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
630 ])
631 OVS_VSWITCHD_STOP
632 AT_CLEANUP
633
634 AT_SETUP([ofproto-dpif - load and move order])
635 OVS_VSWITCHD_START
636 add_of_ports br0 1 10 11
637 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'])
638 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)'])
639 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])
640 AT_CHECK([tail -2 stdout], [0],
641 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
642 Datapath actions: set(ipv4(src=255.255.255.255)),10,set(ipv4(src=192.168.0.1)),11
643 ])
644 OVS_VSWITCHD_STOP
645 AT_CLEANUP
646
647 dnl Tests that 1.5 copy-field can copy into the standardized xregs.
648 AT_SETUP([ofproto-dpif - copy-field into extended registers])
649 OVS_VSWITCHD_START
650 add_of_ports br0 1 2 3
651 AT_DATA([flows.txt], [dnl
652 table=0 actions=move:OXM_OF_ETH_SRC[[0..47]]->OXM_OF_PKT_REG0[[0..47]],goto_table(1)
653 table=1,xreg0=0x0000505400000005 actions=2
654
655 # These low-priority rules shouldn't match. They're here only to make really
656 # sure that the test fails if either of the above rules fails to match.
657 table=0,priority=0 actions=3
658 table=1,priority=0 actions=3
659 ])
660 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
661 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])
662 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
663 ])
664 OVS_VSWITCHD_STOP
665 AT_CLEANUP
666
667 dnl Tests that 1.5 set-field with mask in the metadata register.
668 AT_SETUP([ofproto-dpif - masked set-field into metadata])
669 OVS_VSWITCHD_START
670 add_of_ports br0 1 2 3
671 AT_DATA([flows.txt], [dnl
672 table=0 actions=set_field:0xfafafafa5a5a5a5a->metadata,goto_table(1)
673 table=1 actions=set_field:0x6b/0xff->metadata,goto_table(2)
674 table=2,metadata=0xfafafafa5a5a5a6b actions=2
675
676 # These low-priority rules shouldn't match. They're here only to make really
677 # sure that the test fails if either of the above rules fails to match.
678 table=0,priority=0 actions=3
679 table=1,priority=0 actions=3
680 table=2,priority=0 actions=3
681 ])
682 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
683 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])
684 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
685 ])
686 OVS_VSWITCHD_STOP
687 AT_CLEANUP
688
689
690 AT_SETUP([ofproto-dpif - actset_output])
691 OVS_VSWITCHD_START
692 add_of_ports br0 1 2 3 4 5 6 7 8 9 10 11 12 13
693 AT_DATA([flows.txt], [dnl
694 table=0,actset_output=unset actions=write_actions(output(2)),goto_table(1)
695 table=1 actions=move:ONFOXM_ET_ACTSET_OUTPUT[[0..31]]->OXM_OF_PKT_REG0[[0..31]],goto_table(2)
696
697 # Verify that actset_output got set.
698 table=2,priority=20,actset_output=2 actions=4,goto_table(3)
699 table=2,priority=10 actions=5,goto_table(3)
700
701 # Verify that xreg0 got copied properly from actset_output.
702 table=3,priority=20,xreg0=2 actions=6,goto_table(4)
703 table=3,priority=10 actions=7,goto_table(4)
704
705 # Verify that xxreg0 got copied properly from actset_output.
706 table=3,priority=20,xxreg0=2 actions=6,goto_table(4)
707 table=3,priority=10 actions=7,goto_table(4)
708
709 # Verify that adding a group action unsets actset_output,
710 # even if output follows group.
711 table=4 actions=write_actions(group(5),output(10)),goto_table(5)
712 table=5,priority=20,actset_output=unset actions=8,goto_table(6)
713 table=5,priority=10 actions=9,goto_table(6)
714
715 # Verify that adding another output action doesn't change actset_output
716 # (since there's still a group).
717 table=6 actions=write_actions(output(3)),goto_table(7)
718 table=7,priority=20,actset_output=unset actions=10,goto_table(8)
719 table=7,priority=10 actions=11,goto_table(8)
720
721 # Verify that clearing the action set, then writing an output action,
722 # causes actset_output to be set again.
723 table=8,actions=clear_actions,write_actions(output(3),output(2)),goto_table(9)
724 table=9,priority=20,actset_output=2 actions=12
725 table=9,priority=10 actions=13
726 ])
727 AT_CHECK([ovs-ofctl -O OpenFlow13 add-group br0 'group_id=5,type=all,bucket=output:1'])
728 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
729 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])
730 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 4,6,8,10,12,2
731 ])
732 OVS_VSWITCHD_STOP
733 AT_CLEANUP
734
735 AT_SETUP([ofproto-dpif - push-pop])
736 OVS_VSWITCHD_START
737 add_of_ports br0 20 21 22 33 90
738 AT_DATA([flows.txt], [dnl
739 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
740 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
741 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
742 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
743 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
744
745 ])
746 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
747 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])
748 AT_CHECK([tail -1 stdout], [0],
749 [Datapath actions: 33,22,21,20
750 ])
751 OVS_VSWITCHD_STOP
752 AT_CLEANUP
753
754 AT_SETUP([ofproto-dpif - output])
755 OVS_VSWITCHD_START
756 add_of_ports br0 1 9 10 11 55 66 77 88
757 AT_DATA([flows.txt], [dnl
758 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
759 in_port=2 actions=output:9
760 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
761 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
762 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
763 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
764 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
765 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
766 ])
767 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
768 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])
769 AT_CHECK([tail -1 stdout], [0],
770 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
771 ])
772 OVS_VSWITCHD_STOP
773 AT_CLEANUP
774
775 AT_SETUP([ofproto-dpif - dec_ttl])
776 OVS_VSWITCHD_START
777 add_of_ports br0 1 2 3 4
778 AT_DATA([flows.txt], [dnl
779 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
780 table=1 in_port=1 action=dec_ttl,output:3
781 ])
782 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
783 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])
784 AT_CHECK([tail -4 stdout], [0],
785 [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=2,nw_frag=no
786 Datapath actions: set(ipv4(ttl=1)),2,4
787 This flow is handled by the userspace slow path because it:
788 - Sends "packet-in" messages to the OpenFlow controller.
789 ])
790 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])
791 AT_CHECK([tail -2 stdout], [0],
792 [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=3,nw_frag=no
793 Datapath actions: set(ipv4(ttl=2)),2,set(ipv4(ttl=1)),3,4
794 ])
795 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])
796 AT_CHECK([tail -2 stdout], [0],
797 [Megaflow: recirc_id=0,ipv6,in_port=1,nw_ttl=128,nw_frag=no
798 Datapath actions: set(ipv6(hlimit=127)),2,set(ipv6(hlimit=126)),3,4
799 ])
800
801 AT_CAPTURE_FILE([ofctl_monitor.log])
802 AT_CHECK([ovs-ofctl -P nxt_packet_in monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
803 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])
804 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
805 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
806 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
807 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
808 ])
809 OVS_VSWITCHD_STOP
810 AT_CLEANUP
811
812 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
813 dnl buffer to be resized just before pushing the id of the dec_ttl action.
814 dnl Thus the implementation must account for this by using the
815 dnl reallocated buffer rather than the original buffer.
816 dnl
817 dnl A number of similar rules are added to try and exercise
818 dnl xrealloc sufficiently that it returns a different base pointer
819 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
820 OVS_VSWITCHD_START
821 add_of_ports br0 1
822 (for i in `seq 0 255`; do
823 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
824 done) > flows.txt
825 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
826 OVS_VSWITCHD_STOP
827 AT_CLEANUP
828
829 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
830 dnl buffer to be resized just before pushing the id of the dec_ttl action.
831 dnl Thus the implementation must account for this by using the
832 dnl reallocated buffer rather than the original buffer.
833 dnl
834 dnl A number of similar rules are added to try and exercise
835 dnl xrealloc sufficiently that it returns a different base pointer
836 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
837 OVS_VSWITCHD_START
838 add_of_ports br0 1
839 (for i in `seq 0 255`; do
840 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
841 done) > flows.txt
842 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
843 OVS_VSWITCHD_STOP
844 AT_CLEANUP
845
846 dnl A note action at offset 24 in ofpacts will cause the ofpacts
847 dnl buffer to be resized just before pushing the id of the dec_ttl action.
848 dnl Thus the implementation must account for this by using the
849 dnl reallocated buffer rather than the original buffer.
850 dnl
851 dnl A number of similar rules are added to try and exercise
852 dnl xrealloc sufficiently that it returns a different base pointer
853 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
854 OVS_VSWITCHD_START
855 add_of_ports br0 1
856 (for i in `seq 0 255`; do
857 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
858 done) > flows.txt
859 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
860 OVS_VSWITCHD_STOP
861 AT_CLEANUP
862
863 dnl As of OVS-2.5, a note action after 4 set_field actions are likely to
864 dnl trigger ofpbuf reallocation during decode (~1KB into ofpacts buffer).
865 dnl Using `make check-valgrind' here checks for use-after-free in this
866 dnl codepath.
867 AT_SETUP([ofproto-dpif - note action deep inside ofpacts])
868 OVS_VSWITCHD_START
869 AT_CHECK([ovs-ofctl add-flow br0 'actions=set_field:0x1->metadata,set_field:0x2->metadata,set_field:0x3->metadata,set_field:0x4->metadata,note:00000000000000000000000000000000,note:00000000000000000000000000000000'])
870 OVS_VSWITCHD_STOP
871 AT_CLEANUP
872
873 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
874 OVS_VSWITCHD_START
875 add_of_ports br0 1 2
876
877 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
878
879 # "in_port" defaults to OFPP_NONE if it's not specified.
880 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"
881 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
882 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
883 1
884 2
885 100
886 ])
887
888 OVS_VSWITCHD_STOP
889 AT_CLEANUP
890
891 AT_SETUP([ofproto-dpif - DSCP])
892 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
893 add_of_ports br0 9
894 AT_DATA([flows.txt], [dnl
895 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
896 ])
897 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
898 AT_CHECK([ovs-vsctl -- \
899 set Port p1 qos=@newqos --\
900 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
901 --id=@q1 create Queue dscp=1 --\
902 --id=@q2 create Queue dscp=2], [0], [ignore])
903 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])
904 AT_CHECK([tail -2 stdout], [0],
905 [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=9,nw_tos=252,nw_frag=no
906 Datapath actions: dnl
907 100,dnl
908 set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl
909 set(ipv4(tos=0x8/0xfc)),set(skb_priority(0x2)),1,dnl
910 1,dnl
911 set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl
912 set(ipv4(tos=0xfc/0xfc)),set(skb_priority(0)),1,dnl
913 set(ipv4(tos=0/0xfc)),1,100
914 ])
915 OVS_VSWITCHD_STOP
916 AT_CLEANUP
917
918 AT_SETUP([ofproto-dpif - output/flood flags])
919 OVS_VSWITCHD_START
920 add_of_ports br0 1 2 3 4 5 6 7
921
922 AT_DATA([flows.txt], [dnl
923 in_port=local actions=local,flood
924 in_port=1 actions=flood
925 in_port=2 actions=all
926 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
927 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
928 ])
929 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
930 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
931 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
932
933 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])
934 AT_CHECK([tail -1 stdout \
935 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
936 1
937 2
938 3
939 4
940 7
941 ])
942
943 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])
944 AT_CHECK([tail -1 stdout \
945 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
946 100
947 2
948 3
949 4
950 7
951 ])
952
953 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])
954 AT_CHECK([tail -1 stdout \
955 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
956 1
957 100
958 3
959 4
960 6
961 7
962 ])
963
964 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])
965 AT_CHECK([tail -1 stdout], [0],
966 [Datapath actions: 100,1,2,4,6,7
967 ])
968
969 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])
970 AT_CHECK([tail -1 stdout], [0],
971 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
972 ])
973 OVS_VSWITCHD_STOP
974 AT_CLEANUP
975
976 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
977 OVS_VSWITCHD_START([dnl
978 add-port br0 p1 -- set Interface p1 type=dummy
979 ])
980 on_exit 'kill `cat ovs-ofctl.pid`'
981
982 AT_CAPTURE_FILE([ofctl_monitor.log])
983
984 AT_CHECK([ovs-ofctl -P nxt_packet_in monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
985
986 for i in 1 2 3 ; do
987 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)'
988 done
989 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
990 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
991 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
992 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
993 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:2e7e
994 dnl
995 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
996 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:2e7e
997 dnl
998 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
999 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:2e7e
1000 ])
1001
1002 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1003 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1004 NXST_FLOW reply:
1005 ])
1006
1007 OVS_VSWITCHD_STOP
1008 AT_CLEANUP
1009
1010 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
1011 OVS_VSWITCHD_START([dnl
1012 add-port br0 p1 -- set Interface p1 type=dummy
1013 ])
1014 on_exit 'kill `cat ovs-ofctl.pid`'
1015
1016 AT_CAPTURE_FILE([ofctl_monitor.log])
1017 AT_CHECK([ovs-ofctl del-flows br0])
1018
1019 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1020
1021 dnl Test that missed packets are dropped
1022 for i in 1 2 3 ; do
1023 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)'
1024 done
1025 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1026
1027 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1028 ])
1029
1030 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1031 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1032 OFPST_FLOW reply (OF1.3):
1033 ])
1034
1035 OVS_VSWITCHD_STOP
1036 AT_CLEANUP
1037
1038 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
1039 OVS_VSWITCHD_START([dnl
1040 add-port br0 p1 -- set Interface p1 type=dummy
1041 ])
1042 on_exit 'kill `cat ovs-ofctl.pid`'
1043
1044 AT_CAPTURE_FILE([ofctl_monitor.log])
1045 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1046
1047 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --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(urg|rst)'
1051 done
1052 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1053 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1054 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1055 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1056 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:2e5c
1057 dnl
1058 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1059 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:2e5c
1060 dnl
1061 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1062 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:2e5c
1063 ])
1064
1065 AT_CHECK([ovs-appctl revalidator/purge], [0])
1066 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1067 n_packets=3, n_bytes=162, actions=goto_table:1
1068 OFPST_FLOW reply (OF1.2):
1069 ])
1070
1071 OVS_VSWITCHD_STOP
1072 AT_CLEANUP
1073
1074 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
1075 OVS_VSWITCHD_START([dnl
1076 add-port br0 p1 -- set Interface p1 type=dummy
1077 ])
1078 on_exit 'kill `cat ovs-ofctl.pid`'
1079
1080 AT_CAPTURE_FILE([ofctl_monitor.log])
1081 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1082
1083 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1084
1085 for i in 1 2 3 ; do
1086 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)'
1087 done
1088
1089 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1090 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1091 ])
1092
1093 AT_CHECK([ovs-appctl revalidator/purge], [0])
1094 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1095 n_packets=3, n_bytes=162, actions=resubmit(1,1)
1096 OFPST_FLOW reply (OF1.2):
1097 ])
1098
1099 OVS_VSWITCHD_STOP
1100 AT_CLEANUP
1101
1102 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
1103 OVS_VSWITCHD_START([dnl
1104 add-port br0 p1 -- set Interface p1 type=dummy
1105 ])
1106 on_exit 'kill `cat ovs-ofctl.pid`'
1107
1108 AT_CAPTURE_FILE([ofctl_monitor.log])
1109 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
1110 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1111
1112 dnl Miss table 0, Hit table 1
1113 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1114
1115 for i in 1 2 3 ; do
1116 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)'
1117 done
1118 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1119 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1120
1121 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1122 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1123 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:2e70
1124 dnl
1125 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1126 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:2e70
1127 dnl
1128 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1129 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:2e70
1130 ])
1131
1132 dnl Hit table 0, Miss all other tables, sent to controller
1133 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1134
1135 for i in 1 2 3 ; do
1136 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)'
1137 done
1138 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1139 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1140
1141 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1142 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1143 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:2e70
1144 dnl
1145 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1146 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:2e70
1147 dnl
1148 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1149 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:2e70
1150 ])
1151
1152 AT_CHECK([ovs-appctl revalidator/purge], [0])
1153 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1154 table=1, n_packets=3, n_bytes=162, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1155 OFPST_FLOW reply (OF1.2):
1156 ])
1157
1158 OVS_VSWITCHD_STOP
1159 AT_CLEANUP
1160
1161 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
1162 OVS_VSWITCHD_START([dnl
1163 add-port br0 p1 -- set Interface p1 type=dummy
1164 ])
1165 on_exit 'kill `cat ovs-ofctl.pid`'
1166
1167 AT_CAPTURE_FILE([ofctl_monitor.log])
1168 AT_DATA([flows.txt], [dnl
1169 table=0 actions=goto_table(1)
1170 table=2 dl_src=10:11:11:11:11:11 actions=controller
1171 ])
1172 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
1173 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1174
1175 dnl Hit table 0, Miss table 1, Hit table 2
1176 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1177
1178 for i in 1 2 3 ; do
1179 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)'
1180 done
1181 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1182 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1183
1184 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1185 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1186 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:2e70
1187 dnl
1188 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1189 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:2e70
1190 dnl
1191 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1192 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:2e70
1193 ])
1194
1195 dnl Hit table 1, Miss all other tables, sent to controller
1196 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1197
1198 for i in 1 2 3 ; do
1199 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)'
1200 done
1201 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1202 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1203
1204 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1205 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1206 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:2e70
1207 dnl
1208 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1209 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:2e70
1210 dnl
1211 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1212 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:2e70
1213 ])
1214
1215 AT_CHECK([ovs-appctl revalidator/purge], [0])
1216 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1217 n_packets=6, n_bytes=324, actions=goto_table:1
1218 table=2, n_packets=3, n_bytes=162, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1219 OFPST_FLOW reply (OF1.2):
1220 ])
1221
1222 OVS_VSWITCHD_STOP
1223 AT_CLEANUP
1224
1225 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
1226 OVS_VSWITCHD_START([dnl
1227 add-port br0 p1 -- set Interface p1 type=dummy
1228 ])
1229 on_exit 'kill `cat ovs-ofctl.pid`'
1230
1231 AT_CAPTURE_FILE([ofctl_monitor.log])
1232 AT_DATA([flows.txt], [dnl
1233 table=0 actions=resubmit(1,1)
1234 table=2 dl_src=10:11:11:11:11:11 actions=controller
1235 ])
1236 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
1237 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1238
1239 dnl Hit table 0, Miss table 1, Dropped
1240 AT_CHECK([ovs-ofctl monitor br0 65534 -P standard --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1241
1242 for i in 1 2 3 ; do
1243 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)'
1244 done
1245 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1246
1247 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1248 ])
1249
1250 dnl Hit table 1, Dropped
1251 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1252
1253 for i in 1 2 3 ; do
1254 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)'
1255 done
1256 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1257
1258 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1259 ])
1260
1261 AT_CHECK([ovs-appctl revalidator/purge], [0])
1262 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1263 n_packets=6, n_bytes=324, actions=resubmit(1,1)
1264 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1265 OFPST_FLOW reply (OF1.2):
1266 ])
1267
1268 OVS_VSWITCHD_STOP
1269 AT_CLEANUP
1270
1271 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
1272 OVS_VSWITCHD_START([dnl
1273 add-port br0 p1 -- set Interface p1 type=dummy
1274 ])
1275 on_exit 'kill `cat ovs-ofctl.pid`'
1276
1277 AT_CAPTURE_FILE([ofctl_monitor.log])
1278 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1279
1280 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1281
1282 dnl Test that missed packets are dropped
1283 for i in 1 2 3 ; do
1284 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)'
1285 done
1286 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1287
1288 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1289 ])
1290
1291 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1292 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1293 NXST_FLOW reply:
1294 ])
1295
1296 OVS_VSWITCHD_STOP
1297 AT_CLEANUP
1298
1299 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
1300 OVS_VSWITCHD_START([dnl
1301 add-port br0 p1 -- set Interface p1 type=dummy
1302 ])
1303 on_exit 'kill `cat ovs-ofctl.pid`'
1304
1305 AT_CAPTURE_FILE([ofctl_monitor.log])
1306 AT_CHECK([ovs-ofctl del-flows br0])
1307 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1308 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1309
1310 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1311
1312 dnl Test that missed packets are dropped
1313 for i in 1 2 3 ; do
1314 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)'
1315 done
1316 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1317
1318 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1319 ])
1320
1321 AT_CHECK([ovs-appctl revalidator/purge], [0])
1322 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1323 n_packets=3, n_bytes=162, actions=goto_table:1
1324 OFPST_FLOW reply (OF1.2):
1325 ])
1326
1327 OVS_VSWITCHD_STOP
1328 AT_CLEANUP
1329
1330 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1331 OVS_VSWITCHD_START([dnl
1332 add-port br0 p1 -- set Interface p1 type=dummy
1333 ])
1334 on_exit 'kill `cat ovs-ofctl.pid`'
1335
1336 AT_CAPTURE_FILE([ofctl_monitor.log])
1337 AT_CHECK([ovs-ofctl del-flows br0])
1338 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1339 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1340
1341 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1342
1343 dnl Test that missed packets are dropped
1344 for i in 1 2 3 ; do
1345 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)'
1346 done
1347 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1348
1349 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1350 ])
1351
1352 AT_CHECK([ovs-appctl revalidator/purge], [0])
1353 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1354 n_packets=3, n_bytes=162, actions=resubmit(1,1)
1355 OFPST_FLOW reply (OF1.2):
1356 ])
1357
1358 OVS_VSWITCHD_STOP
1359 AT_CLEANUP
1360
1361 AT_SETUP([ofproto-dpif - controller])
1362 OVS_VSWITCHD_START([dnl
1363 add-port br0 p1 -- set Interface p1 type=dummy
1364 ])
1365 on_exit 'kill `cat ovs-ofctl.pid`'
1366
1367 AT_CAPTURE_FILE([ofctl_monitor.log])
1368 AT_DATA([flows.txt], [dnl
1369 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1370 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1371 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1372
1373 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1374 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)
1375 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)
1376 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1377 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)
1378 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1379 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1380 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1381 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
1382 ])
1383 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1384
1385 dnl Flow miss.
1386 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1387
1388 for i in 1 2 3 ; do
1389 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)'
1390 done
1391 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1392 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1393
1394 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1395 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1396 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:2e70
1397 dnl
1398 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1399 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:2e70
1400 dnl
1401 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
1402 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:2e70
1403 ])
1404
1405 dnl Singleton controller action.
1406 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1407
1408 for i in 1 2 3 ; do
1409 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)'
1410 done
1411 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1412 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1413
1414 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1415 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1416 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:2e7d
1417 dnl
1418 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1419 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:2e7d
1420 dnl
1421 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1422 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:2e7d
1423 ])
1424
1425 dnl Modified controller action.
1426 AT_CHECK([ovs-ofctl monitor -P standard br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1427
1428 for i in 1 2 3 ; do
1429 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)'
1430 done
1431 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1432 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1433
1434 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1435 OFPT_PACKET_IN (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1436 tcp,dl_vlan=15,dl_vlan_pcp=0,vlan_tci1=0x0000,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:2e7e
1437 dnl
1438 OFPT_PACKET_IN (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1439 tcp,dl_vlan=15,dl_vlan_pcp=0,vlan_tci1=0x0000,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:2e7e
1440 dnl
1441 OFPT_PACKET_IN (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1442 tcp,dl_vlan=15,dl_vlan_pcp=0,vlan_tci1=0x0000,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:2e7e
1443 ])
1444
1445 dnl Modified VLAN controller action.
1446 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1447
1448 for i in 1 2 3; do
1449 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)'
1450 done
1451 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1452 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1453
1454 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1455 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1456 ip,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
1457 dnl
1458 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1459 ip,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
1460 dnl
1461 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1462 ip,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
1463 ])
1464
1465 dnl Checksum TCP.
1466 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1467
1468 for i in 1 ; do
1469 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)'
1470 done
1471 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1472 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1473
1474 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1475 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
1476 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:2e7d
1477 dnl
1478 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=58 reg0=0x1,in_port=1 (via action) data_len=58 (unbuffered)
1479 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=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:2e7d
1480 dnl
1481 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=58 reg0=0x1,reg1=0x2,in_port=1 (via action) data_len=58 (unbuffered)
1482 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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:2e7d
1483 dnl
1484 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,in_port=1 (via action) data_len=58 (unbuffered)
1485 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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:2e7d
1486 dnl
1487 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,in_port=1 (via action) data_len=58 (unbuffered)
1488 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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:4880
1489 dnl
1490 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=58 (unbuffered)
1491 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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:6082
1492 dnl
1493 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=58 (unbuffered)
1494 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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:6035
1495 dnl
1496 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=58 (unbuffered)
1497 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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:5fea
1498 dnl
1499 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=58 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=58 (unbuffered)
1500 tcp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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:5fea
1501 ])
1502
1503 dnl Checksum UDP.
1504 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1505
1506 for i in 1 ; do
1507 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'
1508 done
1509 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1510 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1511
1512 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1513 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1514 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
1515 dnl
1516 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 reg0=0x1,in_port=1 (via action) data_len=64 (unbuffered)
1517 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=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
1518 dnl
1519 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)
1520 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1521 dnl
1522 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)
1523 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1524 dnl
1525 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)
1526 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1527 dnl
1528 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)
1529 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1530 dnl
1531 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)
1532 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1533 dnl
1534 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)
1535 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1536 dnl
1537 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)
1538 udp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1539 ])
1540
1541 dnl Modified ARP controller action.
1542 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1543
1544 for i in 1 2 3; do
1545 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)'
1546 done
1547
1548 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1549 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1550 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1551 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1552 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
1553 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1554 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
1555 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1556 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
1557 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1558 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
1559 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1560 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
1561 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1562 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
1563 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1564 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
1565 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1566 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
1567 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1568 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
1569 ])
1570
1571 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1572
1573 dnl Checksum SCTP.
1574 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1575
1576 for i in 1 ; do
1577 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'
1578 done
1579
1580 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
1581 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1582 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1583 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1584 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1585 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
1586 dnl
1587 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 reg0=0x1,in_port=1 (via action) data_len=102 (unbuffered)
1588 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=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
1589 dnl
1590 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)
1591 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1592 dnl
1593 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)
1594 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1595 dnl
1596 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)
1597 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1598 dnl
1599 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)
1600 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1601 dnl
1602 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)
1603 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1604 dnl
1605 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)
1606 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1607 dnl
1608 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)
1609 sctp,dl_vlan=80,dl_vlan_pcp=0,vlan_tci1=0x0000,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
1610 ])
1611
1612 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1613 cookie=0x1, n_packets=3, n_bytes=212, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1614 cookie=0x2, n_packets=3, n_bytes=162, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1615 cookie=0x3, table=1, n_packets=3, n_bytes=212, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
1616 cookie=0x4, table=2, n_packets=3, n_bytes=212, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
1617 cookie=0x5, table=3, n_packets=3, n_bytes=212, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
1618 cookie=0x6, table=4, n_packets=3, n_bytes=212, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
1619 cookie=0x7, table=5, n_packets=3, n_bytes=212, 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)
1620 cookie=0x8, table=6, n_packets=3, n_bytes=212, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1621 cookie=0x9, table=7, n_packets=3, n_bytes=212, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1622 cookie=0xa, n_packets=3, n_bytes=102, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
1623 cookie=0xd, n_packets=3, n_bytes=126, 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
1624 n_packets=3, n_bytes=162, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1625 NXST_FLOW reply:
1626 ])
1627
1628 OVS_VSWITCHD_STOP
1629 AT_CLEANUP
1630
1631 AT_SETUP([ofproto-dpif - controller action without megaflows])
1632 OVS_VSWITCHD_START
1633 add_of_ports br0 1
1634
1635 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,action=controller])
1636 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [dnl
1637 megaflows disabled
1638 ])
1639
1640 AT_CAPTURE_FILE([ofctl_monitor.log])
1641 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1642
1643 for i in 1 2; do
1644 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(0x1234)'])
1645 done
1646
1647 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
1648 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1649
1650 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
1651 flow-dump from non-dpdk interfaces:
1652 packets:1, bytes:14, used:0.001s, actions:userspace(pid=0,slow_path(controller))
1653 ])
1654
1655 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1656 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
1657 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
1658 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
1659 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
1660 ])
1661
1662 AT_CHECK([ovs-appctl revalidator/purge])
1663 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1664
1665 dnl Add a controller meter.
1666 AT_CHECK([ovs-ofctl -O OpenFlow13 add-meter br0 'meter=controller pktps stats bands=type=drop rate=1'])
1667
1668 dnl Advance time by 1 second.
1669 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
1670
1671 for i in `seq 1 8`; do
1672 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(0x4321)'])
1673 done
1674
1675 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
1676 flow-dump from non-dpdk interfaces:
1677 packets:7, bytes:98, used:0.001s, actions:sample(sample=100.0%,actions(meter(0),userspace(pid=0,slow_path(controller))))
1678 ])
1679
1680 AT_CHECK([ovs-appctl time/warp 1], [0], [ignore])
1681 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1682
1683 dnl Out of 8 packets we sent, one executes the controller action via
1684 dnl miss upcall. Another one got passed the rate limiter.
1685 dnl The rest of packets are blocked by the rate limiter.
1686 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1687 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
1688 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x4321
1689 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
1690 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x4321
1691 ])
1692 dnl Check meter stats to make it gives the same picture;
1693 dnl 7 packets hit the meter, but 6 packets are dropped by band0.
1694 AT_CHECK([ovs-ofctl -O OpenFlow13 meter-stats br0 | strip_timers], [0], [dnl
1695 OFPST_METER reply (OF1.3) (xid=0x2):
1696 meter:controller flow_count:0 packet_in_count:7 byte_in_count:98 duration:0.0s bands:
1697 0: packet_count:6 byte_count:84
1698 ])
1699
1700 OVS_VSWITCHD_STOP
1701 AT_CLEANUP
1702
1703 AT_SETUP([ofproto-dpif - MPLS handling])
1704 OVS_VSWITCHD_START([dnl
1705 add-port br0 p1 -- set Interface p1 type=dummy
1706 ])
1707 on_exit 'kill `cat ovs-ofctl.pid`'
1708
1709 AT_CAPTURE_FILE([ofctl_monitor.log])
1710 AT_DATA([flows.txt], [dnl
1711 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
1712 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
1713 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
1714 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
1715 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
1716 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
1717 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
1718 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
1719 cookie=0xa mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:10->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1720 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1721 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1722 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
1723
1724 cookie=0xd dl_src=60:66:66:66:00:01 actions=pop_mpls:0x0800,dec_ttl,controller
1725 cookie=0xd dl_src=60:66:66:66:00:02 actions=pop_mpls:0x0800,load:0xa000001->OXM_OF_IPV4_DST[[]],controller
1726 cookie=0xd dl_src=60:66:66:66:00:03 actions=pop_mpls:0x0800,move:OXM_OF_IPV4_DST[[]]->OXM_OF_IPV4_SRC[[]],controller
1727 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
1728 cookie=0xd dl_src=60:66:66:66:00:05 actions=pop_mpls:0x0800,multipath(eth_src,50,modulo_n,1,0,OXM_OF_IPV4_SRC[[0..7]]),controller
1729 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
1730 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
1731
1732 cookie=0xd dl_src=60:66:66:66:00:08 actions=pop_mpls:0x0806,resubmit(1,1)
1733 cookie=0xd table=1 arp actions=controller
1734
1735 cookie=0xdeadbeef table=2 dl_src=60:66:66:66:00:09 actions=pop_mpls:0x0800,mod_nw_tos:48
1736 cookie=0xd dl_src=60:66:66:66:00:09 actions=resubmit(,2),controller
1737 cookie=0xd dl_src=60:66:66:66:00:0a actions=pop_mpls:0x0800,mod_nw_dst:10.0.0.1,controller
1738 cookie=0xd dl_src=60:66:66:66:00:0b actions=pop_mpls:0x0800,mod_nw_src:10.0.0.1,controller
1739
1740 cookie=0xd dl_src=60:66:66:66:01:00 actions=pop_mpls:0x8848,controller
1741 cookie=0xd dl_src=60:66:66:66:01:01 actions=pop_mpls:0x8847,dec_mpls_ttl,controller
1742 cookie=0xd dl_src=60:66:66:66:01:02 actions=pop_mpls:0x8848,load:3->OXM_OF_MPLS_TC[[]],controller
1743
1744 cookie=0xd dl_src=60:66:66:66:02:00 actions=pop_mpls:0x8847,pop_mpls:0x0800,controller
1745 cookie=0xe dl_src=60:66:66:66:02:01 actions=pop_mpls:0x8848,pop_mpls:0x0800,dec_ttl,controller
1746 cookie=0xe dl_src=60:66:66:66:02:10 actions=pop_mpls:0x8847,dec_mpls_ttl,pop_mpls:0x0800,dec_ttl,controller
1747
1748 cookie=0xe dl_src=60:66:66:66:03:00 actions=pop_mpls:0x8848,pop_mpls:0x8848,controller
1749 cookie=0xe dl_src=60:66:66:66:03:01 actions=pop_mpls:0x8847,pop_mpls:0x8847,dec_mpls_ttl,controller
1750 cookie=0xe dl_src=60:66:66:66:03:10 actions=pop_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8848,dec_mpls_ttl,controller
1751
1752 cookie=0xf dl_src=60:66:66:66:04:00 actions=pop_mpls:0x0800,push_mpls:0x8847,controller
1753 cookie=0xf dl_src=60:66:66:66:04:01 actions=pop_mpls:0x0800,push_mpls:0x8848,dec_mpls_ttl,controller
1754 cookie=0xf dl_src=60:66:66:66:04:10 actions=pop_mpls:0x0800,dec_ttl,push_mpls:0x8848,dec_mpls_ttl,controller
1755
1756 cookie=0x5 dl_src=60:66:66:66:05:00 actions=push_mpls:0x8848,pop_mpls:0x8847,controller
1757 cookie=0x5 dl_src=60:66:66:66:05:01 actions=push_mpls:0x8847,pop_mpls:0x8848,dec_mpls_ttl,controller
1758 cookie=0x5 dl_src=60:66:66:66:05:10 actions=push_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8847,dec_mpls_ttl,controller
1759 ])
1760 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1761
1762 dnl Modified MPLS controller action.
1763 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1764
1765 for i in 1 2 3; do
1766 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)'
1767 done
1768 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1769 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1770
1771 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1772 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action) data_len=46 (unbuffered)
1773 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
1774 dnl
1775 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action) data_len=46 (unbuffered)
1776 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
1777 dnl
1778 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=46 in_port=1 (via action) data_len=46 (unbuffered)
1779 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
1780 ])
1781
1782 dnl Modified MPLS controller action.
1783 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1784
1785 for i in 1 2 3; do
1786 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)'
1787 done
1788 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1789 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1790
1791 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1792 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=34 in_port=1 (via action) data_len=34 (unbuffered)
1793 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
1794 dnl
1795 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=34 in_port=1 (via action) data_len=34 (unbuffered)
1796 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
1797 dnl
1798 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=34 in_port=1 (via action) data_len=34 (unbuffered)
1799 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
1800 ])
1801
1802 dnl Modified MPLS controller action.
1803 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1804
1805 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)
1806
1807 for i in 1 2 3; do
1808 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)'
1809 done
1810 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1811 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1812
1813 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1814 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1815 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
1816 dnl
1817 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1818 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
1819 dnl
1820 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1821 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
1822 ])
1823
1824 dnl Modified MPLS controller action.
1825 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1826
1827 for i in 1 2 3; do
1828 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))'
1829 done
1830 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1831 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1832
1833 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1834 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1835 mpls,dl_vlan=99,dl_vlan_pcp=7,vlan_tci1=0x0000,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
1836 dnl
1837 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1838 mpls,dl_vlan=99,dl_vlan_pcp=7,vlan_tci1=0x0000,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
1839 dnl
1840 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
1841 mpls,dl_vlan=99,dl_vlan_pcp=7,vlan_tci1=0x0000,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
1842 ])
1843
1844 dnl Modified MPLS controller action.
1845 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1846
1847 for i in 1 2 3; do
1848 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)'
1849 done
1850 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1851 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1852
1853 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1854 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1855 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
1856 dnl
1857 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1858 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
1859 dnl
1860 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1861 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
1862 ])
1863
1864 dnl Modified MPLS controller action.
1865 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1866
1867 for i in 1 2 3; do
1868 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)'
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([cat ofctl_monitor.log], [0], [dnl
1874 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1875 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
1876 dnl
1877 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1878 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
1879 dnl
1880 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1881 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
1882 ])
1883
1884 dnl Modified MPLS controller action.
1885 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1886
1887 for i in 1 2 3; do
1888 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)'
1889 done
1890 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1891 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1892
1893 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1894 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1895 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
1896 dnl
1897 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1898 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
1899 dnl
1900 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1901 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
1902 ])
1903
1904 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1905
1906 dnl Modified MPLS controller action.
1907 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1908
1909 for i in 1 2 3; do
1910 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)'
1911 done
1912 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1913 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
1914
1915 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1916 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1917 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
1918 dnl
1919 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1920 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
1921 dnl
1922 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
1923 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
1924 ])
1925
1926 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1927
1928 dnl Modified MPLS controller action.
1929 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1930
1931 for i in 1 2 3; do
1932 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)'
1933 done
1934 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1935 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1936
1937 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1938 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1939 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
1940 dnl
1941 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1942 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
1943 dnl
1944 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=38 in_port=1 (via action) data_len=38 (unbuffered)
1945 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
1946 ])
1947
1948 dnl Modified MPLS actions.
1949 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1950
1951 for i in 1 2 3; do
1952 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)'
1953 done
1954 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1955 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1956
1957 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1958 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=18 in_port=1 (via action) data_len=18 (unbuffered)
1959 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
1960 dnl
1961 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=18 in_port=1 (via action) data_len=18 (unbuffered)
1962 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
1963 dnl
1964 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=18 in_port=1 (via action) data_len=18 (unbuffered)
1965 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
1966 ])
1967
1968 dnl Modified MPLS ipv6 controller action.
1969 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1970
1971 for i in 1 2 3; do
1972 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)'
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([cat ofctl_monitor.log], [0], [dnl
1978 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1979 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
1980 dnl
1981 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1982 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
1983 dnl
1984 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1985 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
1986 ])
1987
1988
1989 dnl Modified MPLS pop action.
1990 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1991 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)
1992 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1993
1994 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
1995
1996 for i in 1 2 3; do
1997 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'
1998 done
1999 #for i in 2 3; do
2000 # 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)'
2001 #done
2002 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2003 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2004
2005 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2006 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2007 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
2008 dnl
2009 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2010 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
2011 dnl
2012 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2013 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
2014 ])
2015
2016 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2017
2018 dnl Modified MPLS pop action.
2019 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2020 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)
2021 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2022 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2023 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2024
2025 for i in 1 2 3; do
2026 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'
2027 done
2028 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2029 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2030
2031 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2032 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2033 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
2034 dnl
2035 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2036 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
2037 dnl
2038 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2039 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
2040 ])
2041
2042 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2043
2044 dnl Modified MPLS pop action.
2045 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2046 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)
2047 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2048 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2049 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2050
2051 for i in 1 2 3; do
2052 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'
2053 done
2054 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2055 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2056
2057 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2058 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2059 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
2060 dnl
2061 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2062 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
2063 dnl
2064 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2065 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
2066 ])
2067
2068 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2069
2070 dnl Modified MPLS pop action.
2071 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2072 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)
2073 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2074 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2075 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2076
2077 for i in 1 2 3; do
2078 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'
2079 done
2080 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2081 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2082
2083 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2084 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2085 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00: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
2086 dnl
2087 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2088 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
2089 dnl
2090 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2091 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
2092 ])
2093
2094 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2095
2096 dnl Modified MPLS pop action.
2097 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2098 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)
2099 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2100 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2101 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2102
2103 for i in 1 2 3; do
2104 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'
2105 done
2106 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2107 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2108
2109 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2110 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2111 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00: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
2112 dnl
2113 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2114 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
2115 dnl
2116 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2117 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
2118 ])
2119
2120 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2121
2122 dnl Modified MPLS pop action.
2123 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2124 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)
2125 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2126 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2127 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2128
2129 for i in 1 2 3; do
2130 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'
2131 done
2132 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2133 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2134
2135 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2136 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2137 tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.0,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
2138 dnl
2139 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2140 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.0,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
2141 dnl
2142 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2143 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.0,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
2144 ])
2145
2146 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2147
2148 dnl Modified MPLS pop action.
2149 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2150 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)
2151 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2152 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2153 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2154
2155 for i in 1 2 3; do
2156 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'
2157 done
2158 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2159 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2160
2161 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2162 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2163 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
2164 dnl
2165 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2166 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
2167 dnl
2168 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2169 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
2170 ])
2171
2172 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2173
2174 dnl Modified MPLS pop action.
2175 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2176 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)
2177 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2178 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2179 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2180
2181 for i in 1 2 3; do
2182 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'
2183 done
2184 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2185 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2186
2187 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2188 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2189 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
2190 dnl
2191 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2192 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
2193 dnl
2194 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2195 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
2196 ])
2197
2198 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2199
2200 dnl Modified MPLS pop action.
2201 dnl The input is an ARP frame with a single MPLS label stack entry which tcpdump -vve shows as:
2202 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)
2203 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2204
2205 for i in 1 2 3; do
2206 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'
2207 done
2208 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2209 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2210
2211 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2212 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
2213 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
2214 dnl
2215 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
2216 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
2217 dnl
2218 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
2219 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
2220 ])
2221
2222 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2223
2224 dnl Modified MPLS pop action.
2225 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2226 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)
2227 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2228 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2229 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2230
2231 for i in 1 2 3; do
2232 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 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'
2233 done
2234 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2235 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2236
2237 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2238 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2239 tcp,vlan_tci=0x0000,dl_src=60:66:66:66: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
2240 dnl
2241 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2242 tcp,vlan_tci=0x0000,dl_src=60:66:66:66: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
2243 dnl
2244 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2245 tcp,vlan_tci=0x0000,dl_src=60:66:66:66: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
2246 ])
2247
2248 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2249
2250 dnl Modified MPLS pop action.
2251 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2252 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)
2253 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2254 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2255 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2256
2257 for i in 1 2 3; do
2258 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'
2259 done
2260 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2261 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2262
2263 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2264 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2265 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
2266 dnl
2267 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2268 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
2269 dnl
2270 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2271 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
2272 ])
2273
2274 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2275
2276 dnl Modified MPLS pop action.
2277 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2278 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)
2279 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2280 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2281 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2282
2283 for i in 1 2 3; do
2284 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'
2285 done
2286 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2287 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2288
2289 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2290 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2291 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
2292 dnl
2293 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2294 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
2295 dnl
2296 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2297 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
2298 ])
2299
2300 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2301
2302 dnl Modified MPLS pop action.
2303 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2304 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)
2305 dnl (label 20, exp 0, [S], ttl 31)
2306 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2307 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2308 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2309
2310 for i in 1 2 3; do
2311 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'
2312 done
2313 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2314 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2315
2316 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2317 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2318 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
2319 dnl
2320 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2321 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
2322 dnl
2323 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2324 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
2325 ])
2326
2327 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2328
2329 dnl Modified MPLS pop action.
2330 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2331 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)
2332 dnl (label 20, exp 0, [S], ttl 31)
2333 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2334 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2335 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2336
2337 for i in 1 2 3; do
2338 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'
2339 done
2340 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2341 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2342
2343 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2344 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2345 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
2346 dnl
2347 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2348 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
2349 dnl
2350 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2351 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
2352 ])
2353
2354 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2355
2356 dnl Modified MPLS pop action.
2357 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2358 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)
2359 dnl (label 20, exp 0, [S], ttl 31)
2360 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2361 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2362 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2363
2364 for i in 1 2 3; do
2365 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'
2366 done
2367 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2368 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2369
2370 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2371 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2372 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
2373 dnl
2374 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2375 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
2376 dnl
2377 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2378 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
2379 ])
2380
2381 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2382
2383 dnl Modified MPLS pop action.
2384 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2385 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)
2386 dnl (label 20, exp 0, [S], ttl 31)
2387 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2388 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2389 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2390
2391 for i in 1 2 3; do
2392 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'
2393 done
2394 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2395 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2396
2397 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2398 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2399 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
2400 dnl
2401 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2402 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
2403 dnl
2404 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2405 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
2406 ])
2407
2408 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2409
2410 dnl Modified MPLS pop action.
2411 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2412 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)
2413 dnl (label 20, exp 0, [S], ttl 31)
2414 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2415 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2416 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2417
2418 for i in 1 2 3; do
2419 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'
2420 done
2421
2422 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2423 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2424
2425 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2426 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2427 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
2428 dnl
2429 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2430 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
2431 dnl
2432 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2433 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
2434 ])
2435
2436 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2437
2438 dnl Modified MPLS pop action.
2439 dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2440 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)
2441 dnl (label 20, exp 0, [S], ttl 31)
2442 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2443 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2444 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2445
2446 for i in 1 2 3; do
2447 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'
2448 done
2449 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2450 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2451
2452 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2453 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2454 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
2455 dnl
2456 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2457 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
2458 dnl
2459 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2460 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
2461 ])
2462
2463 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2464
2465 dnl Modified MPLS pop action.
2466 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2467 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)
2468 dnl (label 20, exp 0, ttl 31)
2469 dnl (label 20, exp 0, [S], ttl 30)
2470 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2471 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2472 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2473
2474 for i in 1 2 3; do
2475 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 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'
2476 done
2477 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2478 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2479
2480 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2481 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2482 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
2483 dnl
2484 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2485 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
2486 dnl
2487 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2488 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
2489 ])
2490
2491 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2492
2493 dnl Modified MPLS pop action.
2494 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2495 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)
2496 dnl (label 20, exp 0, ttl 31)
2497 dnl (label 20, exp 0, [S], ttl 30)
2498 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2499 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2500 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2501
2502 for i in 1 2 3; do
2503 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'
2504 done
2505 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2506 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2507
2508 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2509 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2510 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
2511 dnl
2512 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2513 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
2514 dnl
2515 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2516 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
2517 ])
2518
2519 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2520
2521 dnl Modified MPLS pop action.
2522 dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2523 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)
2524 dnl (label 20, exp 0, ttl 31)
2525 dnl (label 20, exp 0, [S], ttl 30)
2526 dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2527 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2528 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2529
2530 for i in 1 2 3; do
2531 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'
2532 done
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=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2538 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
2539 dnl
2540 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2541 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
2542 dnl
2543 NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2544 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
2545 ])
2546
2547 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2548
2549 dnl Modified MPLS pop action.
2550 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2551 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)
2552 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2553 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2554 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2555
2556 for i in 1 2 3; do
2557 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'
2558 done
2559 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2560 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2561
2562 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2563 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2564 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
2565 dnl
2566 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2567 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
2568 dnl
2569 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2570 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
2571 ])
2572
2573 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2574
2575 dnl Modified MPLS pop action.
2576 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2577 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)
2578 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2579 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2580 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2581
2582 for i in 1 2 3; do
2583 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'
2584 done
2585 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2586 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2587
2588 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2589 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2590 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
2591 dnl
2592 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2593 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
2594 dnl
2595 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2596 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
2597 ])
2598
2599 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2600
2601 dnl Modified MPLS pop action.
2602 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2603 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)
2604 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2605 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2606 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2607
2608 for i in 1 2 3; do
2609 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'
2610 done
2611 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2612 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2613
2614 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2615 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2616 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
2617 dnl
2618 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2619 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
2620 dnl
2621 NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2622 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
2623 ])
2624
2625 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2626
2627 dnl Modified MPLS pop action.
2628 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2629 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)
2630 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2631 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2632 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2633
2634 for i in 1 2 3; do
2635 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'
2636 done
2637
2638 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2639 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2640
2641 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2642 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2643 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
2644 dnl
2645 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2646 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
2647 dnl
2648 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2649 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
2650 ])
2651
2652 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2653
2654 dnl Modified MPLS pop action.
2655 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2656 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)
2657 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2658 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2659 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2660
2661 for i in 1 2 3; do
2662 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'
2663 done
2664 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2665 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2666
2667 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2668 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2669 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
2670 dnl
2671 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2672 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
2673 dnl
2674 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2675 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
2676 ])
2677
2678 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2679
2680 dnl Modified MPLS pop action.
2681 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2682 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)
2683 dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2684 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2685 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --pidfile 2> ofctl_monitor.log])
2686
2687 for i in 1 2 3; do
2688 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'
2689 done
2690
2691 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2692 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2693
2694 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2695 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2696 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
2697 dnl
2698 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2699 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
2700 dnl
2701 NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
2702 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
2703 ])
2704
2705 AT_CHECK([ovs-appctl revalidator/purge], [0])
2706 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
2707 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
2708 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
2709 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
2710 cookie=0xa, n_packets=3, n_bytes=102, 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
2711 cookie=0xa, n_packets=3, n_bytes=102, 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
2712 cookie=0xa, n_packets=3, n_bytes=102, 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
2713 cookie=0xa, n_packets=3, n_bytes=102, 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
2714 cookie=0xa, n_packets=3, n_bytes=102, 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
2715 cookie=0xa, n_packets=3, n_bytes=114, 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
2716 cookie=0xa, n_packets=3, n_bytes=126, 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
2717 cookie=0xa, n_packets=3, n_bytes=54, 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
2718 cookie=0xa, n_packets=3, n_bytes=54, mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2719 cookie=0xb, n_packets=3, n_bytes=54, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2720 cookie=0xc, n_packets=3, n_bytes=162, 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
2721 cookie=0xd, n_packets=3, n_bytes=138, dl_src=60:66:66:66:00:08 actions=pop_mpls:0x0806,resubmit(1,1)
2722 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:01 actions=pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
2723 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
2724 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
2725 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
2726 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,1,0,NXM_OF_IP_SRC[[0..7]]),CONTROLLER:65535
2727 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
2728 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
2729 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:09 actions=resubmit(,2),CONTROLLER:65535
2730 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
2731 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
2732 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
2733 cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:00 actions=pop_mpls:0x8848,CONTROLLER:65535
2734 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
2735 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
2736 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
2737 cookie=0xd, table=1, n_packets=3, n_bytes=126, arp actions=CONTROLLER:65535
2738 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
2739 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
2740 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
2741 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
2742 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
2743 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
2744 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
2745 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
2746 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
2747 NXST_FLOW reply:
2748 ])
2749
2750 OVS_VSWITCHD_STOP
2751 AT_CLEANUP
2752
2753 AT_SETUP([ofproto-dpif - MPLS handling with goto_table])
2754 OVS_VSWITCHD_START([dnl
2755 add-port br0 p1 -- set Interface p1 type=dummy
2756 ])
2757 on_exit 'kill `cat ovs-ofctl.pid`'
2758
2759 AT_CAPTURE_FILE([ofctl_monitor.log])
2760 AT_DATA([flows.txt], [dnl
2761 table=0 mplsm actions=pop_mpls:0x800,goto_table(1)
2762 table=1 ip,ip_dscp=8 actions=controller
2763 ])
2764 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2765
2766
2767 dnl Modified MPLS pop action.
2768 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2769 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)
2770 dnl (tos 0x20, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2771 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2772 AT_CHECK([ovs-ofctl -O OpenFlow12 monitor br0 65534 -P standard --detach --pidfile 2> ofctl_monitor.log])
2773
2774 for i in 1 2 3; do
2775 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'
2776 done
2777 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2778 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2779
2780 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2781 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2782 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
2783 dnl
2784 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2785 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
2786 dnl
2787 OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2788 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
2789 ])
2790
2791 AT_CHECK([ovs-appctl revalidator/purge], [0])
2792 AT_CHECK([ovs-ofctl -O OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2793 n_packets=3, n_bytes=186, mplsm actions=pop_mpls:0x0800,goto_table:1
2794 table=1, n_packets=3, n_bytes=174, ip,nw_tos=32 actions=CONTROLLER:65535
2795 OFPST_FLOW reply (OF1.2):
2796 ])
2797
2798 OVS_VSWITCHD_STOP
2799 AT_CLEANUP
2800
2801 AT_SETUP([ofproto-dpif - MPLS handling with write_actions])
2802 OVS_VSWITCHD_START([dnl
2803 add-port br0 p1 -- set Interface p1 type=dummy
2804 ])
2805 on_exit 'kill `cat ovs-ofctl.pid`'
2806
2807 dnl N.B: The first (and only) action that accesses L3 data after the
2808 dnl pop_mpls action is present in write_actions. This exercises recirculation
2809 dnl triggered in write_actions due to a previous action not in write actions.
2810 AT_CAPTURE_FILE([ofctl_monitor.log])
2811 AT_DATA([flows.txt], [dnl
2812 mplsm actions=pop_mpls:0x800,write_actions(dec_ttl,controller)
2813 ])
2814 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2815
2816 dnl Modified MPLS pop action.
2817 dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2818 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)
2819 dnl (tos 0x20, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2820 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2821 AT_CHECK([ovs-ofctl -O OpenFlow12 monitor br0 65534 -P standard --detach --pidfile 2> ofctl_monitor.log])
2822
2823 for i in 1 2 3; do
2824 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'
2825 done
2826 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2827 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2828
2829 AT_CHECK([strip_metadata < ofctl_monitor.log], [0], [dnl
2830 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2831 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
2832 dnl
2833 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2834 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
2835 dnl
2836 OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
2837 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
2838 ])
2839
2840 AT_CHECK([ovs-appctl revalidator/purge], [0])
2841 AT_CHECK([ovs-ofctl -O OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2842 n_packets=3, n_bytes=186, mplsm actions=pop_mpls:0x0800,write_actions(dec_ttl,CONTROLLER:65535)
2843 OFPST_FLOW reply (OF1.2):
2844 ])
2845
2846 OVS_VSWITCHD_STOP
2847 AT_CLEANUP
2848
2849 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
2850 OVS_VSWITCHD_START([dnl
2851 add-port br0 p1 -- set Interface p1 type=dummy
2852 ])
2853 on_exit 'kill `cat ovs-ofctl.pid`'
2854
2855 AT_CAPTURE_FILE([ofctl_monitor.log])
2856 # A table-miss flow has priority 0 and no match
2857 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2858
2859 dnl Singleton controller action.
2860 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2861
2862 for i in 1 2 3 ; do
2863 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)'
2864 done
2865 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2866 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2867
2868 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2869 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
2870 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:2e7d
2871 dnl
2872 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
2873 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:2e7d
2874 dnl
2875 OFPT_PACKET_IN (xid=0x0): total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
2876 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:2e7d
2877 ])
2878
2879 AT_CHECK([ovs-appctl revalidator/purge], [0])
2880 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2881 n_packets=3, n_bytes=162, priority=0 actions=CONTROLLER:65535
2882 NXST_FLOW reply:
2883 ])
2884
2885 OVS_VSWITCHD_STOP
2886 AT_CLEANUP
2887
2888
2889 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
2890 OVS_VSWITCHD_START([dnl
2891 add-port br0 p1 -- set Interface p1 type=dummy
2892 ])
2893 on_exit 'kill `cat ovs-ofctl.pid`'
2894
2895 AT_CAPTURE_FILE([ofctl_monitor.log])
2896 # A table-miss flow has priority 0 and no match
2897 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2898
2899 dnl Singleton controller action.
2900 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2901
2902 for i in 1 2 3 ; do
2903 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)'
2904 done
2905 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2906 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2907
2908 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2909
2910 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2911 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
2912 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:2e7d
2913 dnl
2914 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
2915 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:2e7d
2916 dnl
2917 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
2918 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:2e7d
2919 ])
2920
2921 AT_CHECK([ovs-appctl revalidator/purge], [0])
2922 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2923 n_packets=3, n_bytes=162, priority=0 actions=CONTROLLER:65535
2924 OFPST_FLOW reply (OF1.3):
2925 ])
2926
2927 OVS_VSWITCHD_STOP
2928 AT_CLEANUP
2929
2930 AT_SETUP([ofproto-dpif - table-miss flow with async config (OpenFlow 1.3)])
2931 OVS_VSWITCHD_START([dnl
2932 add-port br0 p1 -- set Interface p1 type=dummy
2933 ])
2934 on_exit 'kill `cat ovs-ofctl.pid`'
2935
2936 ovs-appctl time/stop
2937
2938 AT_CAPTURE_FILE([ofctl_monitor.log])
2939 # A table-miss flow has priority 0 and no match
2940 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2941
2942 dnl Singleton controller action.
2943 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2944
2945 # Become slave (OF 1.3), which should disable everything except port status.
2946 ovs-appctl -t ovs-ofctl ofctl/send 041800180000000200000003000000000000000000000001
2947
2948 # Ensure that ovs-vswitchd gets a chance to reply before sending another command.
2949 ovs-appctl time/warp 500 100
2950
2951 # Use OF 1.3 OFPT_SET_ASYNC to enable OFPR_NO_MATCH for slave only.
2952 ovs-appctl -t ovs-ofctl ofctl/send 041c002000000002000000000000000100000000000000000000000000000000
2953
2954 ovs-appctl time/warp 500 100
2955 for i in 1 2 3 ; do
2956 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)'
2957 done
2958 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2959 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2960
2961 AT_CHECK([ovs-appctl revalidator/purge], [0])
2962 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2963 send: OFPT_ROLE_REQUEST (OF1.3) (xid=0x2): role=slave generation_id=1
2964 OFPT_ROLE_REPLY (OF1.3) (xid=0x2): role=slave generation_id=1
2965 dnl
2966 send: OFPT_SET_ASYNC (OF1.3) (xid=0x2):
2967 master:
2968 PACKET_IN: (off)
2969 PORT_STATUS: (off)
2970 FLOW_REMOVED: (off)
2971 ROLE_STATUS: (off)
2972 TABLE_STATUS: (off)
2973 REQUESTFORWARD: (off)
2974
2975 slave:
2976 PACKET_IN: no_match
2977 PORT_STATUS: (off)
2978 FLOW_REMOVED: (off)
2979 ROLE_STATUS: (off)
2980 TABLE_STATUS: (off)
2981 REQUESTFORWARD: (off)
2982 dnl
2983 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (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:2e7d
2985 dnl
2986 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (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:2e7d
2988 dnl
2989 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (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:2e7d
2991 ])
2992
2993 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2994
2995 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2996 n_packets=3, n_bytes=162, priority=0 actions=CONTROLLER:65535
2997 OFPST_FLOW reply (OF1.3):
2998 ])
2999
3000 OVS_VSWITCHD_STOP
3001 AT_CLEANUP
3002
3003
3004 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.4)])
3005 OVS_VSWITCHD_START([dnl
3006 add-port br0 p1 -- set Interface p1 type=dummy
3007 ])
3008 on_exit 'kill `cat ovs-ofctl.pid`'
3009
3010 AT_CAPTURE_FILE([ofctl_monitor.log])
3011 # A table-miss flow has priority 0 and no match
3012 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flow br0 'priority=0 actions=output:CONTROLLER'])
3013
3014 dnl Singleton controller action.
3015 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
3016
3017 for i in 1 2 3 ; do
3018 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)'
3019 done
3020 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
3021 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3022
3023 AT_CHECK([ovs-appctl revalidator/purge], [0])
3024 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
3025 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
3026 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:2e7d
3027 dnl
3028 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
3029 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:2e7d
3030 dnl
3031 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via no_match) data_len=54 (unbuffered)
3032 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:2e7d
3033 ])
3034
3035 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3036
3037 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3038 n_packets=3, n_bytes=162, priority=0 actions=CONTROLLER:65535
3039 OFPST_FLOW reply (OF1.4):
3040 ])
3041
3042 OVS_VSWITCHD_STOP
3043 AT_CLEANUP
3044
3045
3046 AT_SETUP([ofproto-dpif - packet-in reasons (Openflow 1.3)])
3047 OVS_VSWITCHD_START([dnl
3048 add-port br0 p1 -- set Interface p1 type=dummy
3049 ])
3050 on_exit 'kill `cat ovs-ofctl.pid`'
3051
3052 AT_CAPTURE_FILE([ofctl_monitor.log])
3053 AT_DATA([flows.txt], [dnl
3054 table=0 in_port=1 actions=write_actions(output(CONTROLLER)),goto_table(1)
3055 table=1 actions=output(CONTROLLER),goto_table(2)
3056 table=2 actions=group:1234
3057 ])
3058 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:CONTROLLER'])
3059 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flows br0 flows.txt])
3060
3061 dnl Singleton controller action.
3062 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
3063
3064 for i in 1 2 3 ; do
3065 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)'
3066 done
3067 AT_CHECK([ovs-ofctl packet-out br0 'in_port=NONE, packet=505400000007101111111111080045000028000000004006f97cc0a80001c0a800020008000a0000000000000000500200002e7d0000, actions=controller'])
3068 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 7])
3069 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3070
3071 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3072
3073 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
3074 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3075 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:2e7d
3076 dnl
3077 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3078 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:2e7d
3079 dnl
3080 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3081 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:2e7d
3082 dnl
3083 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3084 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:2e7d
3085 dnl
3086 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3087 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:2e7d
3088 dnl
3089 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3090 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:2e7d
3091 dnl
3092 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3093 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:2e7d
3094 dnl
3095 OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3096 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:2e7d
3097 dnl
3098 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3099 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:2e7d
3100 dnl
3101 OFPT_PACKET_IN (OF1.3) (xid=0x0): total_len=54 in_port=ANY (via action) data_len=54 (unbuffered)
3102 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:2e7d
3103 ])
3104
3105 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3106
3107 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3108 n_packets=3, n_bytes=162, in_port=1 actions=write_actions(CONTROLLER:65535),goto_table:1
3109 table=1, n_packets=3, n_bytes=162, actions=CONTROLLER:65535,goto_table:2
3110 table=2, n_packets=3, n_bytes=162, actions=group:1234
3111 OFPST_FLOW reply (OF1.3):
3112 ])
3113
3114 OVS_VSWITCHD_STOP
3115 AT_CLEANUP
3116
3117
3118 AT_SETUP([ofproto-dpif - packet-in reasons (Openflow 1.4)])
3119 OVS_VSWITCHD_START([dnl
3120 add-port br0 p1 -- set Interface p1 type=dummy
3121 ])
3122 on_exit 'kill `cat ovs-ofctl.pid`'
3123
3124 AT_CAPTURE_FILE([ofctl_monitor.log])
3125 AT_DATA([flows.txt], [dnl
3126 table=0 in_port=1 actions=write_actions(output(CONTROLLER)),goto_table(1)
3127 table=1 actions=output(CONTROLLER),goto_table(2)
3128 table=2 actions=group:1234
3129 ])
3130 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:CONTROLLER'])
3131 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flows br0 flows.txt])
3132
3133 dnl Singleton controller action.
3134 AT_CHECK([ovs-ofctl monitor -P standard --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
3135
3136 for i in 1 2 3 ; do
3137 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)'
3138 done
3139 AT_CHECK([ovs-ofctl packet-out br0 'in_port=NONE, packet=505400000007101111111111080045000028000000004006f97cc0a80001c0a800020008000a0000000000000000500200002e7d0000, actions=controller'])
3140 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 7])
3141 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3142
3143 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3144
3145 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
3146 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3147 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:2e7d
3148 dnl
3149 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via group) data_len=54 (unbuffered)
3150 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:2e7d
3151 dnl
3152 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action_set) data_len=54 (unbuffered)
3153 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:2e7d
3154 dnl
3155 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3156 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:2e7d
3157 dnl
3158 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via group) data_len=54 (unbuffered)
3159 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:2e7d
3160 dnl
3161 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action_set) data_len=54 (unbuffered)
3162 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:2e7d
3163 dnl
3164 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=54 in_port=1 (via action) data_len=54 (unbuffered)
3165 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:2e7d
3166 dnl
3167 OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=54 in_port=1 (via group) data_len=54 (unbuffered)
3168 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:2e7d
3169 dnl
3170 OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=54 in_port=1 (via action_set) data_len=54 (unbuffered)
3171 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:2e7d
3172 dnl
3173 OFPT_PACKET_IN (OF1.4) (xid=0x0): total_len=54 in_port=ANY (via packet_out) data_len=54 (unbuffered)
3174 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:2e7d
3175 ])
3176
3177 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3178
3179 AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3180 n_packets=3, n_bytes=162, in_port=1 actions=write_actions(CONTROLLER:65535),goto_table:1
3181 table=1, n_packets=3, n_bytes=162, actions=CONTROLLER:65535,goto_table:2
3182 table=2, n_packets=3, n_bytes=162, actions=group:1234
3183 OFPST_FLOW reply (OF1.4):
3184 ])
3185
3186 OVS_VSWITCHD_STOP
3187 AT_CLEANUP
3188
3189
3190 AT_SETUP([ofproto-dpif - ARP modification slow-path])
3191 OVS_VSWITCHD_START
3192 add_of_ports br0 1 2
3193
3194 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
3195 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'
3196
3197 # Input some packets that should follow the arp modification slow-path.
3198 for i in 1 2 3; do
3199 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)'
3200 done
3201 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3202
3203 # Check the packets that were output.
3204 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
3205 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
3206 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
3207 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
3208 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
3209 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
3210 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
3211 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
3212 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
3213 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
3214 ])
3215
3216 OVS_VSWITCHD_STOP
3217 AT_CLEANUP
3218
3219 AT_SETUP([ofproto-dpif - VLAN handling])
3220 OVS_VSWITCHD_START(
3221 [set Bridge br0 fail-mode=standalone -- \
3222 add-port br0 p1 trunks=10,12 -- \
3223 add-port br0 p2 tag=10 -- \
3224 add-port br0 p3 tag=12 \
3225 other-config:priority-tags=true -- \
3226 add-port br0 p4 tag=12 -- \
3227 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
3228 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
3229 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
3230 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
3231 other-config:priority-tags=true -- \
3232 add-port br0 p9 vlan_mode=dot1q-tunnel tag=10 other-config:qinq-ethtype=802.1q -- \
3233 add-port br0 p10 vlan_mode=dot1q-tunnel tag=10 cvlans=10,12 other-config:qinq-ethtype=802.1q -- \
3234 add-port br0 p11 vlan_mode=dot1q-tunnel tag=12 other-config:qinq-ethtype=802.1q -- \
3235 add-port br0 p12 vlan_mode=dot1q-tunnel tag=12 other-config:qinq-ethtype=802.1q \
3236 other-config:priority-tags=true -- \
3237 set Interface p1 type=dummy -- \
3238 set Interface p2 type=dummy -- \
3239 set Interface p3 type=dummy -- \
3240 set Interface p4 type=dummy -- \
3241 set Interface p5 type=dummy -- \
3242 set Interface p6 type=dummy -- \
3243 set Interface p7 type=dummy -- \
3244 set Interface p8 type=dummy -- \
3245 set Interface p9 type=dummy -- \
3246 set Interface p10 type=dummy -- \
3247 set Interface p11 type=dummy -- \
3248 set Interface p12 type=dummy --])
3249
3250 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
3251 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
3252 dnl actions.
3253 for tuple in \
3254 "100 none 0 drop" \
3255 "100 0 0 drop" \
3256 "100 0 1 drop" \
3257 "100 10 0 1,5,6,7,8,pop_vlan,2,9" \
3258 "100 10 1 1,5,6,7,8,pop_vlan,2,9" \
3259 "100 11 0 5,7" \
3260 "100 11 1 5,7" \
3261 "100 12 0 1,5,6,pop_vlan,3,4,7,8,11,12" \
3262 "100 12 1 1,5,6,pop_vlan,4,7,11,push_vlan(vid=0,pcp=1),3,8,12" \
3263 "1 none 0 drop" \
3264 "1 0 0 drop" \
3265 "1 0 1 drop" \
3266 "1 10 0 5,6,7,8,100,pop_vlan,2,9" \
3267 "1 10 1 5,6,7,8,100,pop_vlan,2,9" \
3268 "1 11 0 drop" \
3269 "1 11 1 drop" \
3270 "1 12 0 5,6,100,pop_vlan,3,4,7,8,11,12" \
3271 "1 12 1 5,6,100,pop_vlan,4,7,11,push_vlan(vid=0,pcp=1),3,8,12" \
3272 "2 none 0 9,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3273 "2 0 0 pop_vlan,9,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3274 "2 0 1 pop_vlan,9,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
3275 "2 10 0 drop" \
3276 "2 10 1 drop" \
3277 "2 11 0 drop" \
3278 "2 11 1 drop" \
3279 "2 12 0 drop" \
3280 "2 12 1 drop" \
3281 "3 none 0 4,7,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3282 "3 0 0 pop_vlan,4,7,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3283 "3 0 1 8,12,pop_vlan,4,7,11,push_vlan(vid=12,pcp=1),1,5,6,100" \
3284 "3 10 0 drop" \
3285 "3 10 1 drop" \
3286 "3 11 0 drop" \
3287 "3 11 1 drop" \
3288 "3 12 0 drop" \
3289 "3 12 1 drop" \
3290 "4 none 0 3,7,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3291 "4 0 0 pop_vlan,3,7,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3292 "4 0 1 3,8,12,pop_vlan,7,11,push_vlan(vid=12,pcp=1),1,5,6,100" \
3293 "4 10 0 drop" \
3294 "4 10 1 drop" \
3295 "4 11 0 drop" \
3296 "4 11 1 drop" \
3297 "4 12 0 drop" \
3298 "4 12 1 drop" \
3299 "5 none 0 2,9,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
3300 "5 0 0 pop_vlan,2,9,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
3301 "5 0 1 pop_vlan,2,9,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
3302 "5 10 0 1,6,7,8,100,pop_vlan,2,9" \
3303 "5 10 1 1,6,7,8,100,pop_vlan,2,9" \
3304 "5 11 0 7,100" \
3305 "5 11 1 7,100" \
3306 "5 12 0 1,6,100,pop_vlan,3,4,7,8,11,12" \
3307 "5 12 1 1,6,100,pop_vlan,4,7,11,push_vlan(vid=0,pcp=1),3,8,12" \
3308 "6 none 0 2,9,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
3309 "6 0 0 pop_vlan,2,9,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
3310 "6 0 1 pop_vlan,2,9,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
3311 "6 10 0 1,5,7,8,100,pop_vlan,2,9" \
3312 "6 10 1 1,5,7,8,100,pop_vlan,2,9" \
3313 "6 11 0 drop" \
3314 "6 11 1 drop" \
3315 "6 12 0 1,5,100,pop_vlan,3,4,7,8,11,12" \
3316 "6 12 1 1,5,100,pop_vlan,4,7,11,push_vlan(vid=0,pcp=1),3,8,12" \
3317 "7 none 0 3,4,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3318 "7 0 0 pop_vlan,3,4,8,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3319 "7 0 1 3,8,12,pop_vlan,4,11,push_vlan(vid=12,pcp=1),1,5,6,100" \
3320 "7 10 0 1,5,6,8,100,pop_vlan,2,9" \
3321 "7 10 1 1,5,6,8,100,pop_vlan,2,9" \
3322 "7 11 0 5,100" \
3323 "7 11 1 5,100" \
3324 "7 12 0 1,5,6,100,pop_vlan,3,4,8,11,12" \
3325 "7 12 1 1,5,6,100,pop_vlan,4,11,push_vlan(vid=0,pcp=1),3,8,12" \
3326 "8 none 0 3,4,7,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3327 "8 0 0 pop_vlan,3,4,7,11,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3328 "8 0 1 3,12,pop_vlan,4,7,11,push_vlan(vid=12,pcp=1),1,5,6,100" \
3329 "8 10 0 1,5,6,7,100,pop_vlan,2,9" \
3330 "8 10 1 1,5,6,7,100,pop_vlan,2,9" \
3331 "8 11 0 drop" \
3332 "8 11 1 drop" \
3333 "8 12 0 1,5,6,100,pop_vlan,3,4,7,11,12" \
3334 "8 12 1 1,5,6,100,pop_vlan,4,7,11,push_vlan(vid=0,pcp=1),3,12" \
3335 "9 none 0 2,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3336 "9 10 0 10,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3337 "9 11 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3338 "10 none 0 drop" \
3339 "10 0 0 drop" \
3340 "10 11 0 drop" \
3341 "10 12 0 9,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3342 "11 10 0 7,8,12,push_vlan(vid=12,pcp=0),1,5,6,100" \
3343 "11 10 1 7,8,12,push_vlan(vid=12,pcp=0),1,5,6,100"
3344 do
3345 set $tuple
3346 in_port=$1
3347 vlan=$2
3348 pcp=$3
3349 expected=$4
3350
3351 if test $vlan = none; then
3352 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
3353 else
3354 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))"
3355 fi
3356
3357 echo "----------------------------------------------------------------------"
3358 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
3359
3360 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3361 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
3362
3363 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
3364 mv stdout expout
3365 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
3366 done
3367
3368 OVS_VSWITCHD_STOP
3369 AT_CLEANUP
3370
3371 AT_SETUP([ofproto-dpif - VLAN depth limit])
3372 OVS_VSWITCHD_START([dnl
3373 add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3374 add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2 -- \
3375 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3
3376 ])
3377
3378 AT_DATA([flows.txt], [dnl
3379 table=0 in_port=1,eth_type=0x8100,vlan_tci=0x0010/0x01ff actions=output:2
3380 table=0 in_port=1,eth_type=0xabcd,vlan_tci=0x0010/0x01ff actions=output:3
3381 ])
3382 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
3383 flow="in_port(1),eth(src=00:11:22:33:44:55,dst=00:22:44:66:88:00),eth_type(0x8100),vlan(vid=16,pcp=0), \
3384 encap(eth_type(0x8100),vlan(vid=17,pcp=0),encap(eth_type(0xabcd)))"
3385
3386 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3387 AT_CHECK([tail -1 stdout], [0],
3388 [Datapath actions: 2
3389 ])
3390
3391 AT_CHECK([ovs-vsctl set Open_vswitch `ovs-vsctl show | head -n1` other_config:vlan-limit=0])
3392 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3393 AT_CHECK([tail -1 stdout], [0],
3394 [Datapath actions: 3
3395 ])
3396
3397 OVS_VSWITCHD_STOP
3398 AT_CLEANUP
3399
3400 AT_SETUP([ofproto-dpif - Multi-VLAN actions])
3401 OVS_VSWITCHD_START([dnl
3402 add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3403 add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2
3404 ])
3405 AT_CHECK([ovs-vsctl set Open_vswitch `ovs-vsctl show | head -n1` other_config:vlan-limit=0])
3406
3407 AT_DATA([flows.txt], [dnl
3408 table=0 in_port=1,vlan_tci=0x1100/0x1fff actions=pop_vlan,output:2
3409 table=0 in_port=1,vlan_tci=0x1101/0x1fff actions=push_vlan:0x8100,set_field:0x1201/0x1fff->vlan_tci,output:2
3410 table=0 in_port=1,vlan_tci=0x1102/0x1fff actions=push_vlan:0x88a8,set_field:0x1202/0x1fff->vlan_tci,output:2
3411 table=0 in_port=1,vlan_tci=0x1103/0x1fff actions=set_field:0x1203/0x1fff->vlan_tci,output:2
3412 table=0 in_port=1,vlan_tci=0x1104/0x1fff actions=pop_vlan,goto_table:1
3413 table=1 vlan_tci=0 actions=output:2
3414 table=1 vlan_tci=0x1300/0x1fff actions=pop_vlan,output:2
3415 table=1 vlan_tci=0x1301/0x1fff actions=push_vlan:0x88a8,set_field:0x1401/0x1fff->vlan_tci,output:2
3416 table=1 vlan_tci=0x1302/0x1fff actions=set_field:0x1402/0x1fff->vlan_tci,output:2
3417 ])
3418
3419 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
3420
3421 check_act() {
3422 psd_hdr="in_port(1),eth(src=00:11:22:33:44:55,dst=00:22:44:66:88:00),"
3423 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$psd_hdr$1"], [0], [stdout])
3424 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $2
3425 ])
3426 }
3427
3428 check_act "eth_type(0x8100),vlan(vid=0x0100,pcp=0),encap(eth_type(0xabcd))" \
3429 "pop_vlan,2"
3430
3431 check_act "eth_type(0x8100),vlan(vid=0x0101,pcp=0),encap(eth_type(0xabcd))" \
3432 "push_vlan(vid=513,pcp=0),2"
3433
3434 check_act "eth_type(0x8100),vlan(vid=0x0102,pcp=0),encap(eth_type(0xabcd))" \
3435 "push_vlan(tpid=0x88a8,vid=514,pcp=0),2"
3436
3437 check_act "eth_type(0x8100),vlan(vid=0x0103,pcp=0),encap(eth_type(0xabcd))" \
3438 "pop_vlan,push_vlan(vid=515,pcp=0),2"
3439
3440 check_act "eth_type(0x8100),vlan(vid=0x0104,pcp=0),encap(eth_type(0xabcd))" \
3441 "pop_vlan,2"
3442
3443 check_act "eth_type(0x88a8),vlan(vid=0x0104,pcp=0),encap(eth_type(0x8100),\
3444 vlan(vid=0x0300,pcp=0),encap(eth_type(0xabcd)))" "pop_vlan,pop_vlan,2"
3445
3446 check_act "eth_type(0x88a8),vlan(vid=0x0104,pcp=0),encap(eth_type(0x8100),\
3447 vlan(vid=0x0301,pcp=0),encap(eth_type(0xabcd)))" \
3448 "pop_vlan,push_vlan(tpid=0x88a8,vid=1025,pcp=0),2"
3449
3450 check_act "eth_type(0x88a8),vlan(vid=0x0104,pcp=0),encap(eth_type(0x8100),\
3451 vlan(vid=0x0302,pcp=0),encap(eth_type(0xabcd)))" \
3452 "pop_vlan,pop_vlan,push_vlan(vid=1026,pcp=0),2"
3453
3454 OVS_VSWITCHD_STOP
3455 AT_CLEANUP
3456
3457 AT_SETUP([ofproto-dpif - MPLS handling])
3458 OVS_VSWITCHD_START([dnl
3459 add-port br0 p1 -- set Interface p1 type=dummy
3460 ])
3461 on_exit 'kill `cat ovs-ofctl.pid`'
3462
3463 AT_CAPTURE_FILE([ofctl_monitor.log])
3464 AT_DATA([flows.txt], [dnl
3465 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
3466 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
3467 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
3468 ])
3469 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3470
3471 dnl In this test, we push an MPLS tag to an ethernet packet.
3472 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3473
3474 for i in 1 2 3; do
3475 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)'
3476 done
3477 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3478 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3479
3480 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3481 OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
3482 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
3483 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3484 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3485 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3486 00000030 00 00 50 00 00 00 2e 91-00 00
3487 dnl
3488 OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
3489 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
3490 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3491 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3492 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3493 00000030 00 00 50 00 00 00 2e 91-00 00
3494 dnl
3495 OFPT_PACKET_IN (OF1.2): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
3496 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
3497 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
3498 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
3499 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
3500 00000030 00 00 50 00 00 00 2e 91-00 00
3501 ])
3502
3503 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3504 dnl copied exactly, except for the BOS bit.
3505 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3506
3507 for i in 1 2 3; do
3508 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:01,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
3509 done
3510 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3511 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3512
3513 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3514 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3515 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
3516 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3517 00000010 a0 40 00 00 a1 40
3518 dnl
3519 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3520 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
3521 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3522 00000010 a0 40 00 00 a1 40
3523 dnl
3524 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3525 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
3526 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
3527 00000010 a0 40 00 00 a1 40
3528 ])
3529
3530 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3531 dnl copied exactly, except for the BOS bit. The ethertype should be updated
3532 dnl to the MPLS ethertype of the MPLS push action which differs to that
3533 dnl of the input packet.
3534 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3535
3536 for i in 1 2 3; do
3537 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)'
3538 done
3539 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3540 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3541
3542 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3543 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3544 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
3545 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3546 00000010 a0 40 00 00 a1 40
3547 dnl
3548 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3549 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
3550 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3551 00000010 a0 40 00 00 a1 40
3552 dnl
3553 OFPT_PACKET_IN (OF1.2): total_len=22 in_port=1 (via action) data_len=22 (unbuffered)
3554 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
3555 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
3556 00000010 a0 40 00 00 a1 40
3557 ])
3558
3559 OVS_VSWITCHD_STOP
3560 AT_CLEANUP
3561
3562 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
3563 OVS_VSWITCHD_START([dnl
3564 add-port br0 p1 -- set Interface p1 type=dummy
3565 ])
3566 on_exit 'kill `cat ovs-ofctl.pid`'
3567
3568 AT_CAPTURE_FILE([ofctl_monitor.log])
3569 AT_DATA([flows.txt], [dnl
3570 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
3571 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
3572 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
3573 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
3574 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
3575 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
3576 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
3577 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
3578 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
3579 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
3580 ])
3581 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3582
3583 dnl Modified MPLS controller action.
3584 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3585 dnl both of these in the final flow
3586 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3587
3588 for i in 1 2 3; do
3589 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)'
3590 done
3591 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3592 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3593
3594 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3595 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3596 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3597 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3598 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3599 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3600 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3601 dnl
3602 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3603 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3604 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3605 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3606 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3607 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3608 dnl
3609 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3610 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3611 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
3612 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3613 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3614 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3615 ])
3616
3617 dnl Modified MPLS controller action.
3618 dnl In this test, the input packet is vlan-tagged, which should be kept as
3619 dnl inner vlan.
3620 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3621
3622 for i in 1 2 3; do
3623 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))'
3624 done
3625 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3626 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3627
3628 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3629 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3630 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3631 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3632 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3633 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3634 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3635 00000040 00 00
3636 dnl
3637 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3638 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3639 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3640 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3641 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3642 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3643 00000040 00 00
3644 dnl
3645 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3646 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3647 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
3648 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3649 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3650 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3651 00000040 00 00
3652 ])
3653
3654 dnl Modified MPLS controller action.
3655 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3656 dnl both of these in the final flow
3657 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3658
3659 for i in 1 2 3; do
3660 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)'
3661 done
3662 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3663 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3664
3665 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3666 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3667 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3668 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3669 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3670 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3671 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3672 dnl
3673 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3674 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3675 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3676 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3677 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3678 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3679 dnl
3680 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3681 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3682 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
3683 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3684 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3685 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3686 ])
3687
3688 dnl Modified MPLS controller action.
3689 dnl In this test, the input packet is vlan-tagged, which should be kept as
3690 dnl inner vlan.
3691 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3692
3693 for i in 1 2 3; do
3694 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))'
3695 done
3696 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3697 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3698
3699 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3700 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3701 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3702 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3703 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3704 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3705 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3706 00000040 00 00
3707 dnl
3708 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3709 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3710 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3711 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3712 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3713 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3714 00000040 00 00
3715 dnl
3716 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3717 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3718 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
3719 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3720 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3721 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3722 00000040 00 00
3723 ])
3724
3725 dnl Modified MPLS controller action.
3726 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3727 dnl actions are reordered, so we see both of these in the final flow.
3728 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3729
3730 for i in 1 2 3; do
3731 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)'
3732 done
3733 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3734 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3735
3736 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3737 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3738 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3739 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3740 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3741 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3742 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3743 dnl
3744 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3745 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3746 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3747 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3748 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3749 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3750 dnl
3751 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3752 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3753 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
3754 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3755 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3756 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3757 ])
3758
3759 dnl Modified MPLS controller action.
3760 dnl In this test, the input packet is vlan-tagged, which should be kept as
3761 dnl inner vlan.
3762 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3763
3764 for i in 1 2 3; do
3765 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))'
3766 done
3767 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3768 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3769
3770 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3771 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3772 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3773 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3774 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3775 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3776 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3777 00000040 00 00
3778 dnl
3779 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3780 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3781 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3782 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3783 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3784 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3785 00000040 00 00
3786 dnl
3787 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3788 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3789 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
3790 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3791 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3792 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3793 00000040 00 00
3794 ])
3795
3796 dnl Modified MPLS controller action.
3797 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3798 dnl actions are reordered, so we see both of these in the final flow.
3799 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3800
3801 for i in 1 2 3; do
3802 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)'
3803 done
3804 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3805 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3806
3807 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3808 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3809 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3810 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3811 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3812 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3813 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3814 dnl
3815 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3816 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3817 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3818 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3819 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3820 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3821 dnl
3822 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3823 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3824 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
3825 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3826 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3827 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3828 ])
3829
3830 dnl Modified MPLS controller action.
3831 dnl In this test, the input packet is vlan-tagged, which should be kept as
3832 dnl inner vlan.
3833 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P standard --detach --pidfile 2> ofctl_monitor.log])
3834
3835 for i in 1 2 3; do
3836 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))'
3837 done
3838 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3839 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3840
3841 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3842 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3843 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3844 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3845 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3846 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3847 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3848 00000040 00 00
3849 dnl
3850 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3851 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3852 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3853 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3854 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3855 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3856 00000040 00 00
3857 dnl
3858 OFPT_PACKET_IN (OF1.2): total_len=66 in_port=1 (via action) data_len=66 (unbuffered)
3859 mpls,dl_vlan=99,dl_vlan_pcp=1,dl_vlan1=88,dl_vlan_pcp1=7,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
3860 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
3861 00000010 81 00 e0 58 88 47 00 00-a1 40 45 00 00 28 00 00
3862 00000020 00 00 40 06 f9 7c c0 a8-00 01 c0 a8 00 02 00 00
3863 00000030 00 00 00 00 00 00 00 00-00 00 50 00 00 00 2e 91
3864 00000040 00 00
3865 ])
3866
3867 dnl Modified MPLS controller action.
3868 dnl In this test, the input packet is vlan-tagged, which should be kept as
3869 dnl inner vlan.
3870 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3871
3872 for i in 1 2 3; do
3873 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))'
3874 done
3875 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3876 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
3877
3878 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3879 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3880 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3881 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3882 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3883 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3884 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3885 dnl
3886 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3887 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3888 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3889 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3890 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3891 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3892 dnl
3893 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3894 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3895 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
3896 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3897 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3898 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3899 ])
3900
3901 dnl Modified MPLS controller action.
3902 dnl In this test, the input packet is vlan-tagged, which should be modified
3903 dnl before we push MPLS and VLAN tags.
3904 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P standard --detach --pidfile 2> ofctl_monitor.log])
3905
3906 for i in 1 2 3; do
3907 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))'
3908 done
3909 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
3910 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
3911
3912 AT_CHECK([ofctl_strip < ofctl_monitor.log], [0], [dnl
3913 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3914 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3915 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3916 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3917 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3918 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3919 dnl
3920 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3921 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3922 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3923 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3924 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3925 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3926 dnl
3927 OFPT_PACKET_IN (OF1.2): total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
3928 mpls,dl_vlan=99,dl_vlan_pcp=1,vlan_tci1=0x0000,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
3929 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
3930 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
3931 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
3932 00000030 00 00 00 00 00 00 50 00-00 00 2e 91 00 00
3933 ])
3934
3935 AT_CHECK([ovs-appctl revalidator/purge], [0])
3936 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3937 cookie=0xa, n_packets=3, n_bytes=162, 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
3938 cookie=0xa, n_packets=3, n_bytes=162, 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
3939 cookie=0xa, n_packets=3, n_bytes=162, 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
3940 cookie=0xa, n_packets=3, n_bytes=162, 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
3941 cookie=0xa, n_packets=3, n_bytes=174, 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
3942 cookie=0xa, n_packets=3, n_bytes=174, 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
3943 cookie=0xa, n_packets=3, n_bytes=174, 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
3944 cookie=0xa, n_packets=3, n_bytes=174, 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
3945 cookie=0xa, n_packets=3, n_bytes=174, 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
3946 cookie=0xa, n_packets=3, n_bytes=174, 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
3947 OFPST_FLOW reply (OF1.2):
3948 ])
3949
3950 OVS_VSWITCHD_STOP
3951 AT_CLEANUP
3952
3953 AT_SETUP([ofproto-dpif - fragment handling - trace])
3954 OVS_VSWITCHD_START
3955 add_of_ports br0 1 2 3 4 5 6 90
3956 AT_DATA([flows.txt], [dnl
3957 priority=75 tcp ip_frag=no tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:1
3958 priority=75 tcp ip_frag=first tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:2
3959 priority=50 tcp ip_frag=no actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:4
3960 priority=50 tcp ip_frag=first actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:5
3961 priority=50 tcp ip_frag=later actions=output:6
3962 ])
3963 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
3964
3965 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"
3966 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
3967 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
3968 later_flow="$base_flow,frag=later)"
3969
3970 # mode no first later
3971 for tuple in \
3972 'normal 1 5 6' \
3973 'drop 1 drop drop' \
3974 'nx-match 1 2 6'
3975 do
3976 set $tuple
3977 mode=$1
3978 no=$2
3979 first=$3
3980 later=$4
3981
3982 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3983 for type in no first later; do
3984 eval flow=\$${type}_flow exp_output=\$$type
3985 printf "\n%s\n" "----$mode $type-----"
3986 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
3987 : > expout
3988 if test $mode = drop && test $type != no; then
3989 echo ' 0. Packets are IP fragments and the fragment handling mode is "drop".' >> expout
3990 echo "Datapath actions: $exp_output" >> expout
3991 elif test $type = later; then
3992 echo "Datapath actions: $exp_output" >> expout
3993 else
3994 echo "Datapath actions: set(tcp(src=80,dst=80)),$exp_output" >> expout
3995 fi
3996 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
3997 done
3998 done
3999 OVS_VSWITCHD_STOP
4000 AT_CLEANUP
4001
4002 AT_SETUP([ofproto-dpif - fragment handling - upcall])
4003 OVS_VSWITCHD_START
4004 add_of_ports br0 1 2 3 4 5 6 90
4005 AT_DATA([flows.txt], [dnl
4006 priority=75 tcp ip_frag=no tp_dst=80 actions=set_field:81->tcp_dst,output:1
4007 priority=75 tcp ip_frag=first tp_dst=80 actions=set_field:81->tcp_dst,output:2
4008 priority=50 tcp ip_frag=no actions=set_field:81->tcp_dst,output:4
4009 priority=50 tcp ip_frag=first actions=set_field:81->tcp_dst,output:5
4010 priority=50 tcp ip_frag=later actions=output:6
4011 ])
4012 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
4013
4014 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"
4015 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
4016 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
4017 later_flow="$base_flow,frag=later)"
4018
4019 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
4020
4021 mode=normal
4022
4023 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4024 for type in no first later; do
4025 eval flow=\$${type}_flow
4026 printf "\n%s\n" "----$mode $type-----"
4027
4028 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
4029 done
4030
4031 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
4032 flow-dump from non-dpdk interfaces:
4033 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
4034 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),5
4035 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
4036 ])
4037
4038 mode=drop
4039
4040 AT_CHECK([ovs-appctl revalidator/purge], [0])
4041 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4042 for type in no first later; do
4043 eval flow=\$${type}_flow
4044 printf "\n%s\n" "----$mode $type-----"
4045
4046 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
4047 done
4048
4049 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
4050 flow-dump from non-dpdk interfaces:
4051 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
4052 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=first), packets:0, bytes:0, used:never, actions:drop
4053 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=later), packets:0, bytes:0, used:never, actions:drop
4054 ])
4055
4056 mode=nx-match
4057
4058 AT_CHECK([ovs-appctl revalidator/purge], [0])
4059 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4060 for type in no first later; do
4061 eval flow=\$${type}_flow
4062 printf "\n%s\n" "----$mode $type-----"
4063
4064 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
4065 done
4066
4067 AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
4068 flow-dump from non-dpdk interfaces:
4069 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
4070 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),2
4071 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
4072 ])
4073
4074 OVS_VSWITCHD_STOP
4075 AT_CLEANUP
4076
4077 AT_SETUP([ofproto-dpif - fragment handling - actions])
4078 OVS_VSWITCHD_START
4079 add_of_ports br0 1 2 3 4 5 6 90
4080
4081 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])
4082 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4083 source field tcp_dst lacks correct prerequisites
4084 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4085 ])
4086
4087 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])
4088 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4089 destination field tcp_src lacks correct prerequisites
4090 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4091 ])
4092
4093 AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=set_field:8888->udp_src,output:1"], [1], [], [stderr])
4094 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4095 set_field udp_src lacks correct prerequisites
4096 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4097 ])
4098
4099 AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=load:8888->NXM_OF_UDP_DST[[]],output:1"], [1], [], [stderr])
4100 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4101 set_field udp_dst lacks correct prerequisites
4102 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4103 ])
4104
4105 AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_src,output:1"], [1], [], [stderr])
4106 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4107 set_field sctp_src lacks correct prerequisites
4108 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4109 ])
4110
4111 AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_dst,output:1"], [1], [], [stderr])
4112 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4113 set_field sctp_dst lacks correct prerequisites
4114 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4115 ])
4116
4117 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])
4118 AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
4119 source field tcp_dst lacks correct prerequisites
4120 ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
4121 ])
4122
4123 AT_DATA([flows.txt], [dnl
4124 priority=75 tcp actions=load:42->OXM_OF_TCP_SRC[[0..7]],output:1
4125 ])
4126 AT_CHECK([ovs-ofctl -O OpenFlow12 replace-flows br0 flows.txt])
4127
4128 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
4129
4130 mode=normal
4131
4132 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4133 for frag in 4000 6000 6008 4010; do
4134 printf "\n%s\n" "----$mode $frag-----"
4135
4136 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"])
4137 done
4138
4139 dnl The set_field action only modifies 8 bits of the tcp_src, so both the flow
4140 dnl wildcard and the set_field action have a mask of 0xFF. Up to (including)
4141 dnl OVS-2.5, the wildcards and set_field mask are shared internally.
4142 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
4143 flow-dump from non-dpdk interfaces:
4144 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=33419/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4145 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=33419/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4146 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:74, used:0.001s, actions:1
4147 ])
4148
4149 AT_CHECK([ovs-appctl revalidator/purge], [0])
4150 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4151 for frag in 4000 6000 6008 4010; do
4152 printf "\n%s\n" "----$mode $frag truncated transport header -----"
4153
4154 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0018 2e24 $frag 40 06 465d ac11370d ac11370b 828b 0016"])
4155 done
4156
4157 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
4158 flow-dump from non-dpdk interfaces:
4159 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=0/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4160 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=0/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4161 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:38, used:0.001s, actions:1
4162 ])
4163
4164 AT_CHECK([ovs-appctl revalidator/purge], [0])
4165 AT_CHECK([ovs-ofctl set-frags br0 $mode])
4166 for frag in 4000 6000 6001 4002; do
4167 printf "\n%s\n" "----$mode $frag missing transport header-----"
4168
4169 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0014 2e24 $frag 40 06 465d ac11370d ac11370b"])
4170 done
4171
4172 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
4173 flow-dump from non-dpdk interfaces:
4174 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=0/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4175 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=0/0xff), packets:0, bytes:0, used:never, actions:set(tcp(src=42/0xff)),1
4176 recirc_id(0),in_port(90),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:34, used:0.001s, actions:1
4177 ])
4178
4179 OVS_VSWITCHD_STOP
4180 AT_CLEANUP
4181
4182 AT_SETUP([ofproto-dpif - exit])
4183 OVS_VSWITCHD_START
4184 add_of_ports br0 1 2 3 10 11 12 13 14
4185 AT_DATA([flows.txt], [dnl
4186 in_port=1 actions=output:10,exit,output:11
4187 in_port=2 actions=output:12,resubmit:1,output:12
4188 in_port=3 actions=output:13,resubmit:2,output:14
4189 ])
4190 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4191 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])
4192 AT_CHECK([tail -1 stdout], [0],
4193 [Datapath actions: 10
4194 ])
4195 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])
4196 AT_CHECK([tail -1 stdout], [0],
4197 [Datapath actions: 12,10
4198 ])
4199 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])
4200 AT_CHECK([tail -1 stdout], [0],
4201 [Datapath actions: 13,12,10
4202 ])
4203 OVS_VSWITCHD_STOP
4204 AT_CLEANUP
4205
4206
4207 AT_SETUP([ofproto-dpif - mirroring, select_all])
4208 AT_KEYWORDS([mirror mirrors mirroring])
4209 OVS_VSWITCHD_START
4210 add_of_ports br0 1 2 3
4211 ovs-vsctl \
4212 set Bridge br0 mirrors=@m --\
4213 --id=@p3 get Port p3 --\
4214 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4215
4216 AT_DATA([flows.txt], [dnl
4217 in_port=1 actions=output:2
4218 in_port=2 actions=output:1
4219 ])
4220 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4221
4222 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)"
4223 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4224 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4225 [Datapath actions: 3,2
4226 ])
4227
4228 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)"
4229 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4230 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4231 [Datapath actions: 3,1
4232 ])
4233
4234 OVS_VSWITCHD_STOP
4235 AT_CLEANUP
4236
4237
4238 AT_SETUP([ofproto-dpif - mirroring, select_src])
4239 AT_KEYWORDS([mirror mirrors mirroring])
4240 OVS_VSWITCHD_START
4241 add_of_ports br0 1 2 3
4242 ovs-vsctl \
4243 set Bridge br0 mirrors=@m --\
4244 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
4245 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
4246
4247 AT_DATA([flows.txt], [dnl
4248 in_port=1 actions=output:2
4249 in_port=2 actions=output:1
4250 ])
4251 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4252
4253 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)"
4254 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4255 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4256 [Datapath actions: 3,2
4257 ])
4258
4259 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)"
4260 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4261 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4262 [Datapath actions: 1
4263 ])
4264 OVS_VSWITCHD_STOP
4265 AT_CLEANUP
4266
4267 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
4268 AT_KEYWORDS([mirror mirrors mirroring])
4269 OVS_VSWITCHD_START
4270 add_of_ports br0 1 2
4271 ovs-vsctl \
4272 set Bridge br0 mirrors=@m --\
4273 --id=@p2 get Port p2 --\
4274 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
4275
4276 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
4277
4278 # "in_port" defaults to OFPP_NONE if it's not specified.
4279 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"
4280 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4281 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4282 [Datapath actions: 1,2
4283 ])
4284
4285 OVS_VSWITCHD_STOP
4286 AT_CLEANUP
4287
4288
4289 AT_SETUP([ofproto-dpif - mirroring, select_dst])
4290 AT_KEYWORDS([mirror mirrors mirroring])
4291 OVS_VSWITCHD_START
4292 add_of_ports br0 1 2 3
4293 ovs-vsctl \
4294 set Bridge br0 mirrors=@m --\
4295 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4296 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
4297
4298 AT_DATA([flows.txt], [dnl
4299 in_port=1 actions=output:2
4300 in_port=2 actions=output:1
4301 ])
4302 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4303
4304 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)"
4305 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4306 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4307 [Datapath actions: 2,3
4308 ])
4309
4310 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)"
4311 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4312 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4313 [Datapath actions: 1
4314 ])
4315
4316 OVS_VSWITCHD_STOP
4317 AT_CLEANUP
4318
4319
4320 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
4321 AT_KEYWORDS([mirror mirrors mirroring])
4322 OVS_VSWITCHD_START
4323 add_of_ports br0 1 2 3
4324 ovs-vsctl \
4325 set Bridge br0 mirrors=@m --\
4326 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4327 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4328
4329 AT_DATA([flows.txt], [dnl
4330 in_port=1, actions=output:2
4331 ])
4332 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4333
4334 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)"
4335 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4336 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4337 [Datapath actions: 2
4338 ])
4339
4340 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))"
4341 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4342 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4343 [Datapath actions: 2
4344 ])
4345
4346 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))"
4347 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4348 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4349 [Datapath actions: 3,2
4350 ])
4351
4352 OVS_VSWITCHD_STOP
4353 AT_CLEANUP
4354
4355
4356 AT_SETUP([ofproto-dpif - mirroring, output_port])
4357 AT_KEYWORDS([mirror mirrors mirroring])
4358 OVS_VSWITCHD_START
4359 add_of_ports br0 1 2 3
4360 ovs-vsctl \
4361 set Bridge br0 mirrors=@m --\
4362 --id=@p3 get Port p3 --\
4363 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4364
4365 AT_DATA([flows.txt], [dnl
4366 in_port=1 actions=mod_vlan_vid:17,output:2
4367 in_port=2 actions=output:1
4368 ])
4369 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4370
4371 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)"
4372 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4373 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4374 [Datapath actions: 3,push_vlan(vid=17,pcp=0),2
4375 ])
4376
4377 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)"
4378 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4379 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4380 [Datapath actions: 3,1
4381 ])
4382
4383 OVS_VSWITCHD_STOP
4384 AT_CLEANUP
4385
4386 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
4387 AT_KEYWORDS([mirror mirrors mirroring])
4388 OVS_VSWITCHD_START
4389 add_of_ports br0 1 2
4390 ovs-vsctl \
4391 set Bridge br0 mirrors=@m --\
4392 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
4393
4394 AT_DATA([flows.txt], [dnl
4395 in_port=1 actions=output:2
4396 in_port=2 actions=mod_vlan_vid:17,output:1
4397 ])
4398 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4399
4400 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)"
4401 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4402 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4403
4404 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
4405 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
4406 mv stdout expout
4407 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
4408
4409 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)"
4410 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4411 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4412
4413 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
4414 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
4415 mv stdout expout
4416 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
4417
4418 OVS_VSWITCHD_STOP
4419 AT_CLEANUP
4420
4421 # This verifies that we don't get duplicate mirroring when mirror_packet()
4422 # might be invoked recursively, as a check against regression.
4423 AT_SETUP([ofproto-dpif - multiple VLAN output mirrors])
4424 AT_KEYWORDS([mirror mirrors mirroring])
4425 OVS_VSWITCHD_START
4426 add_of_ports br0 1 2 3
4427 ovs-vsctl \
4428 -- set Bridge br0 fail-mode=standalone mirrors=@m1,@m2 \
4429 -- --id=@m1 create Mirror name=m1 select_all=true output_vlan=500 \
4430 -- --id=@m2 create Mirror name=m2 select_all=true output_vlan=501 \
4431 -- set Port br0 tag=0 \
4432 -- set Port p1 tag=0 \
4433 -- set Port p2 tag=500 \
4434 -- set Port p3 tag=501
4435
4436 flow='in_port=1'
4437 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4438 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //
4439 s/,/\
4440 /g' | sort], [0], [100
4441 2
4442 3
4443 ])
4444
4445 OVS_VSWITCHD_STOP
4446 AT_CLEANUP
4447
4448 # This test verifies that mirror state is preserved across recirculation.
4449 #
4450 # Otherwise, post-recirculation the ingress and the output to port 4
4451 # would cause the packet to be mirrored to port 3 a second time.
4452 AT_SETUP([ofproto-dpif - mirroring with recirculation])
4453 AT_KEYWORDS([mirror mirrors mirroring])
4454 OVS_VSWITCHD_START
4455 add_of_ports br0 1 2 3 4
4456 ovs-vsctl \
4457 set Bridge br0 mirrors=@m --\
4458 --id=@p3 get Port p3 --\
4459 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4460
4461 AT_DATA([flows.txt], [dnl
4462 in_port=1 actions=2,debug_recirc,4
4463 ])
4464 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4465
4466 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)"
4467 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4468 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 3,2,recirc(0x1)
4469 ])
4470 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4471 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 4
4472 ])
4473
4474 OVS_VSWITCHD_STOP
4475 AT_CLEANUP
4476
4477 # Tests below verify the snaplen support for mirroring
4478 AT_SETUP([ofproto-dpif - mirroring, select_all with snaplen])
4479 AT_KEYWORDS([mirror mirrors mirroring])
4480 OVS_VSWITCHD_START
4481 add_of_ports br0 1 2 3
4482 ovs-vsctl \
4483 set Bridge br0 mirrors=@m --\
4484 --id=@p3 get Port p3 --\
4485 --id=@m create Mirror name=mymirror select_all=true output_port=@p3 snaplen=100
4486
4487 AT_DATA([flows.txt], [dnl
4488 in_port=1 actions=output:2
4489 in_port=2 actions=output:1
4490 ])
4491 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4492
4493 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)"
4494 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4495 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4496 [Datapath actions: trunc(100),3,2
4497 ])
4498
4499 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)"
4500 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4501 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4502 [Datapath actions: trunc(100),3,1
4503 ])
4504
4505 OVS_VSWITCHD_STOP
4506 AT_CLEANUP
4507
4508 AT_SETUP([ofproto-dpif - mirroring, select_all with snaplen and reset snaplen])
4509 AT_KEYWORDS([mirror mirrors mirroring])
4510 OVS_VSWITCHD_START
4511 add_of_ports br0 1 2 3
4512 ovs-vsctl \
4513 set Bridge br0 mirrors=@m --\
4514 --id=@p3 get Port p3 --\
4515 --id=@m create Mirror name=mymirror select_all=true output_port=@p3 snaplen=100
4516
4517 AT_DATA([flows.txt], [dnl
4518 in_port=1 actions=output:2
4519 in_port=2 actions=output:1
4520 ])
4521 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4522
4523 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)"
4524 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4525 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4526 [Datapath actions: trunc(100),3,2
4527 ])
4528
4529 ovs-vsctl set mirror mymirror snaplen=77
4530
4531 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)"
4532 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4533 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4534 [Datapath actions: trunc(77),3,1
4535 ])
4536
4537 ovs-vsctl set mirror mymirror snaplen=65535
4538
4539 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)"
4540 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4541 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4542 [Datapath actions: 3,1
4543 ])
4544
4545 OVS_VSWITCHD_STOP
4546 AT_CLEANUP
4547
4548 AT_SETUP([ofproto-dpif - mirroring, select_src with snaplen])
4549 AT_KEYWORDS([mirror mirrors mirroring])
4550 OVS_VSWITCHD_START
4551 add_of_ports br0 1 2 3
4552 ovs-vsctl \
4553 set Bridge br0 mirrors=@m --\
4554 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
4555 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3 snaplen=100
4556
4557 AT_DATA([flows.txt], [dnl
4558 in_port=1 actions=output:2
4559 in_port=2 actions=output:1
4560 ])
4561 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4562
4563 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)"
4564 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4565 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4566 [Datapath actions: trunc(100),3,2
4567 ])
4568
4569 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)"
4570 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4571 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4572 [Datapath actions: 1
4573 ])
4574 OVS_VSWITCHD_STOP
4575 AT_CLEANUP
4576
4577 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port with snaplen])
4578 AT_KEYWORDS([mirror mirrors mirroring])
4579 OVS_VSWITCHD_START
4580 add_of_ports br0 1 2
4581 ovs-vsctl \
4582 set Bridge br0 mirrors=@m --\
4583 --id=@p2 get Port p2 --\
4584 --id=@m create Mirror name=mymirror select_all=true output_port=@p2 snaplen=100
4585
4586 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
4587
4588 # "in_port" defaults to OFPP_NONE if it's not specified.
4589 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"
4590 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4591 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4592 [Datapath actions: 1,trunc(100),2
4593 ])
4594
4595 OVS_VSWITCHD_STOP
4596 AT_CLEANUP
4597
4598 AT_SETUP([ofproto-dpif - mirroring, select_dst with snaplen])
4599 AT_KEYWORDS([mirror mirrors mirroring])
4600 OVS_VSWITCHD_START
4601 add_of_ports br0 1 2 3
4602 ovs-vsctl \
4603 set Bridge br0 mirrors=@m --\
4604 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4605 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3 snaplen=100
4606
4607 AT_DATA([flows.txt], [dnl
4608 in_port=1 actions=output:2
4609 in_port=2 actions=output:1
4610 ])
4611 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4612
4613 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)"
4614 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4615 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4616 [Datapath actions: 2,trunc(100),3
4617 ])
4618
4619 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)"
4620 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4621 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4622 [Datapath actions: 1
4623 ])
4624
4625 OVS_VSWITCHD_STOP
4626 AT_CLEANUP
4627
4628 AT_SETUP([ofproto-dpif - mirroring, select_vlan with snaplen])
4629 AT_KEYWORDS([mirror mirrors mirroring])
4630 OVS_VSWITCHD_START
4631 add_of_ports br0 1 2 3
4632 ovs-vsctl \
4633 set Bridge br0 mirrors=@m --\
4634 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4635 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3 snaplen=100
4636
4637 AT_DATA([flows.txt], [dnl
4638 in_port=1, actions=output:2
4639 ])
4640 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4641
4642 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)"
4643 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4644 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4645 [Datapath actions: 2
4646 ])
4647
4648 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))"
4649 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4650 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4651 [Datapath actions: 2
4652 ])
4653
4654 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))"
4655 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4656 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4657 [Datapath actions: trunc(100),3,2
4658 ])
4659
4660 OVS_VSWITCHD_STOP
4661 AT_CLEANUP
4662
4663 AT_SETUP([ofproto-dpif - mirroring, output_port with snaplen])
4664 AT_KEYWORDS([mirror mirrors mirroring])
4665 OVS_VSWITCHD_START
4666 add_of_ports br0 1 2 3
4667 ovs-vsctl \
4668 set Bridge br0 mirrors=@m --\
4669 --id=@p3 get Port p3 --\
4670 --id=@m create Mirror name=mymirror select_all=true output_port=@p3 snaplen=100
4671
4672 AT_DATA([flows.txt], [dnl
4673 in_port=1 actions=mod_vlan_vid:17,output:2
4674 in_port=2 actions=output:1
4675 ])
4676 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4677
4678 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)"
4679 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4680 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4681 [Datapath actions: trunc(100),3,push_vlan(vid=17,pcp=0),2
4682 ])
4683
4684 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)"
4685 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4686 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
4687 [Datapath actions: trunc(100),3,1
4688 ])
4689
4690 OVS_VSWITCHD_STOP
4691 AT_CLEANUP
4692
4693 AT_SETUP([ofproto-dpif - mirroring, output_vlan with snaplen])
4694 AT_KEYWORDS([mirror mirrors mirroring])
4695 OVS_VSWITCHD_START
4696 add_of_ports br0 1 2
4697 ovs-vsctl \
4698 set Bridge br0 mirrors=@m --\
4699 --id=@m create Mirror name=mymirror select_all=true output_vlan=12 snaplen=100
4700
4701 AT_DATA([flows.txt], [dnl
4702 in_port=1 actions=output:2
4703 in_port=2 actions=mod_vlan_vid:17,output:1
4704 ])
4705 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4706
4707 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)"
4708 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4709 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4710 dnl Expect: "trunc(100),100,trunc(100),2,trunc(100),1", with different order
4711 AT_CHECK([echo "$actual" | sed -n 's/.*\(trunc([0-9]*),[0-9]*,trunc([0-9]*),[0-9]*,trunc([0-9]*),[0-9]*\)/\1/p'], [0])
4712
4713 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)"
4714 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
4715 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4716 AT_CHECK([echo "$actual" | sed -n 's/.*\(trunc([0-9]*),[0-9]*,trunc([0-9]*),[0-9]*,trunc([0-9]*),[0-9]*\)/\1/p'], [0])
4717
4718 OVS_VSWITCHD_STOP
4719 AT_CLEANUP
4720
4721 AT_SETUP([ofproto-dpif - multiple VLAN output mirrors with snaplen])
4722 AT_KEYWORDS([mirror mirrors mirroring])
4723 OVS_VSWITCHD_START
4724 add_of_ports br0 1 2 3
4725 ovs-vsctl \
4726 -- set Bridge br0 fail-mode=standalone mirrors=@m1,@m2 \
4727 -- --id=@m1 create Mirror name=m1 select_all=true output_vlan=500 snaplen=200 \
4728 -- --id=@m2 create Mirror name=m2 select_all=true output_vlan=501 snaplen=300 \
4729 -- set Port br0 tag=0 \
4730 -- set Port p1 tag=0 \
4731 -- set Port p2 tag=500 \
4732 -- set Port p3 tag=501
4733
4734 flow="in_port=1"
4735 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4736 AT_CHECK([tail -1 stdout | egrep "trunc\(200\),2,trunc\(300\),3,100|trunc\(300\),3,trunc\(200\),2,100"], [0], [stdout])
4737
4738 OVS_VSWITCHD_STOP
4739 AT_CLEANUP
4740
4741 # This test verifies that the table ID is preserved across recirculation
4742 # when a resubmit action requires it (because the action is relative to
4743 # the current table rather than specifying a table).
4744 AT_SETUP([ofproto-dpif - resubmit with recirculation])
4745 OVS_VSWITCHD_START
4746 add_of_ports br0 1 2 3
4747
4748 AT_DATA([flows.txt], [dnl
4749 table=0 in_port=1 actions=2,resubmit(,1)
4750 table=1 in_port=1 actions=debug_recirc,resubmit:55
4751 table=1 in_port=55 actions=3
4752 ])
4753 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4754
4755 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)"
4756 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4757 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 2,recirc(0x1)
4758 ])
4759 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4760 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 3
4761 ])
4762
4763 OVS_VSWITCHD_STOP
4764 AT_CLEANUP
4765
4766 # This test verifies that "resubmit", when it triggers recirculation
4767 # indirectly through the flow that it recursively invokes, is not
4768 # re-executed when execution continues later post-recirculation.
4769 AT_SETUP([ofproto-dpif - recirculation after resubmit])
4770 OVS_VSWITCHD_START
4771 add_of_ports br0 1 2
4772
4773 AT_DATA([flows.txt], [dnl
4774 table=0 in_port=1 actions=resubmit(,1),2
4775 table=1 in_port=1 actions=debug_recirc
4776 ])
4777 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4778
4779 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)"
4780 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4781 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: recirc(0x1)
4782 ])
4783 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4784 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 2
4785 ])
4786
4787 OVS_VSWITCHD_STOP
4788 AT_CLEANUP
4789
4790 dnl CHECK_CONTINUATION(TITLE, N_PORTS0, N_PORTS1, ACTIONS0, ACTIONS1, [EXTRA_SETUP])
4791 dnl
4792 dnl Checks the implementation of the continuation mechanism that allows the
4793 dnl packet processing pipeline to be paused and resumed. Starts by creating
4794 dnl bridge br0 with N_PORTS0 ports numbered 1 through N_PORTS0, and adds the
4795 dnl flows listed in ACTIONS0 to that bridge. Then, injects a packet at port 1
4796 dnl in the bridge, resuming each time the pipeline pauses, and expects a single
4797 dnl packet to be output at each port 2 through N_PORTS0. Then, as long as
4798 dnl ACTIONS0 still contains at least one "pause" action, removes one of them
4799 dnl and repeats the process.
4800 dnl
4801 dnl If N_PORTS1 is nonzero, also creates a bridge br1 and adds ports numbered
4802 dnl N_PORTS0 + 1 to N_PORTS0 + N_PORTS1 to it, as well as flows ACTIONS1.
4803 dnl ACTIONS1 may also contain "pause" actions. Packets are only ever injected
4804 dnl into port 1 on br0, so br1 only comes into action if a patch port (added
4805 dnl by EXTRA_SETUP) jumps from one bridge to another.
4806 dnl
4807 dnl EXTRA_SETUP is an optional list of extra commands to run after setting up
4808 dnl both bridges, e.g. to configure mirrors or patch ports.
4809 m4_define([CHECK_CONTINUATION], [dnl
4810 AT_SETUP([ofproto-dpif - continuation - $1])
4811 AT_KEYWORDS([continuations pause resume])
4812 OVS_VSWITCHD_START
4813
4814 # count_matches STRING
4815 #
4816 # Prints on stdout the number of occurrences of STRING in stdin.
4817 count_matches () {
4818 sed -n ":start
4819 s/$[1]//p
4820 t start" | wc -l
4821 }
4822
4823 add_of_ports --pcap br0 `seq 1 $2`
4824 m4_if([$3], [0], [],
4825 [add_of_br 1
4826 add_of_ports --pcap br1 `seq m4_eval([$2 + 1]) m4_eval([$2 + $3])`])
4827
4828 AT_CAPTURE_FILE([ofctl_monitor0.log])
4829 AT_CHECK([ovs-ofctl monitor br0 resume --detach --no-chdir --pidfile=ovs-ofctl0.pid 2> ofctl_monitor0.log])
4830 m4_if([$3], [0], [],
4831 [AT_CAPTURE_FILE([ofctl_monitor1.log])
4832 AT_CHECK([ovs-ofctl monitor br1 resume --detach --no-chdir --pidfile=ovs-ofctl1.pid 2> ofctl_monitor1.log])])
4833
4834 actions0='$4'
4835 actions1='$5'
4836 $6
4837 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)"
4838 n_packets=0
4839 n_resumes=0
4840 while true; do
4841 printf "\n\nactions for br0:\n%s\n" "$actions0"
4842 m4_if([$3], [0], [], [printf "actions for br1:\n%s\n" "$actions1"])
4843
4844 # Add flows.
4845 AT_CHECK([echo "$actions0" | sed 's/pause/controller(pause)/g' | ovs-ofctl -O OpenFlow13 add-flows br0 -])
4846 m4_if([$3], [0], [],
4847 [AT_CHECK([echo "$actions1" | sed 's/pause/controller(pause)/g' | ovs-ofctl -O OpenFlow13 add-flows br1 -])])
4848
4849 # Make sure the datapath is up-to-date before sending the packet.
4850 ovs-appctl revalidator/wait
4851
4852 # Run a packet through the switch.
4853 AT_CHECK([ovs-appctl netdev-dummy/receive p1 "$flow"], [0], [stdout])
4854
4855 # Wait for the expected number of packets to show up.
4856 n_packets=`expr $n_packets + $2 - 1 + $3`
4857 echo "waiting for $n_packets packets..."
4858 OVS_WAIT_UNTIL([test $n_packets = `ovs-ofctl parse-pcap p*-tx.pcap | wc -l`])
4859
4860 # Wait for the expected number of NXT_RESUMEs to be logged.
4861 n_resumes=$(expr $n_resumes + $(echo "$actions0 $actions1" | count_matches pause) )
4862 echo "waiting for $n_resumes NXT_RESUMEs..."
4863 OVS_WAIT_UNTIL([test $n_resumes = `cat ofctl_monitor*.log | grep -c NXT_RESUME`])
4864
4865 # Eliminate one "pause" from the actions.
4866 #
4867 # If there were none left, then we're done.
4868 next_actions0=`echo "$actions0" | sed '1,/pause/s/pause//'`
4869 if test X"$actions0" = X"$next_actions0"; then
4870 next_actions1=`echo "$actions1" | sed '1,/pause/s/pause//'`
4871 if test X"$actions1" = X"$next_actions1"; then
4872 break
4873 else
4874 actions1=$next_actions1
4875 fi
4876 else
4877 actions0=$next_actions0
4878 fi
4879
4880 # Delete all the flows and verify that there are none, so that we
4881 # can be sure that our updated flow tables is actually in use
4882 # later.
4883 AT_CHECK([ovs-ofctl del-flows br0 && ovs-ofctl dump-flows br0 | strip_xids], [0],
4884 [NXST_FLOW reply:
4885 ])
4886 m4_if([$3], [0], [],
4887 [AT_CHECK([ovs-ofctl del-flows br1 && ovs-ofctl dump-flows br1 | strip_xids], [0],
4888 [NXST_FLOW reply:
4889 ])])
4890 done
4891 OVS_VSWITCHD_STOP
4892 AT_CLEANUP
4893 ])
4894
4895 # Check that pause at the end of the pipeline works OK.
4896 #
4897 # (xlate_continuation() has a special case for no-op actions; this
4898 # fails without that special case.)
4899 CHECK_CONTINUATION([pause at end of pipeline], [2], [0], [actions=2 pause])
4900
4901 # Check that remaining actions are preserved following resume.
4902 CHECK_CONTINUATION([actions], [7], [0],
4903 [in_port=1 actions=pause 2 pause 3 pause 4 pause 5 pause 6 pause 7])
4904
4905 # Check that multiple levels of resubmit continue following resume.
4906 #
4907 # The "resubmit:55", which is relative to the current table, is
4908 # particularly interesting because it checks that the notion of the
4909 # current table is correctly preserved.
4910 CHECK_CONTINUATION([resubmit], [10], [0],
4911 [table=0 in_port=1 actions=pause 2 pause resubmit(,1) pause 10 pause
4912 table=1 in_port=1 actions=pause 3 pause resubmit(,2) pause 9 pause
4913 table=2 in_port=1 actions=pause 4 pause resubmit(,3) pause 8 pause
4914 table=3 in_port=1 actions=pause 5 pause resubmit:55 pause 7 pause
4915 table=3 in_port=55 actions=pause 6 pause])
4916
4917 # Check that the action set is preserved across pause/resume.
4918 CHECK_CONTINUATION([action set], [3], [0],
4919 [in_port=1 actions=1 pause resubmit(,1) pause 2
4920 table=1 actions=write_actions(3)])
4921
4922 # Check that metadata and the stack used by push and pop is preserved
4923 # across pause/resume.
4924 CHECK_CONTINUATION([data stack], [3], [0],
4925 [in_port=1 actions=pause dnl
4926 set_field:1->reg0 dnl
4927 pause dnl
4928 set_field:2->reg1 dnl
4929 pause dnl
4930 output:NXM_NX_REG0[[]] dnl
4931 pause dnl
4932 push:NXM_NX_REG1[[]] dnl
4933 dnl
4934 pop:NXM_NX_REG2[[]] dnl
4935 pause dnl
4936 output:NXM_NX_REG2[[]] dnl
4937 pause dnl
4938 3])
4939
4940 # Check that mirror output occurs once and once only, even if
4941 # separated by pause/resume.
4942 CHECK_CONTINUATION([mirroring], [5], [0],
4943 [in_port=1 actions=pause 2 pause 3 pause 4 pause], [],
4944 [ovs-vsctl \
4945 set Bridge br0 mirrors=@m --\
4946 --id=@p2 get Port p2 --\
4947 --id=@p3 get Port p3 --\
4948 --id=@p4 get Port p4 --\
4949 --id=@p5 get Port p5 --\
4950 --id=@m create Mirror name=mymirror select_dst_port=@p2,@p3,@p4 output_port=@p5])
4951
4952 # Check that pause works in the presence of patch ports.
4953 CHECK_CONTINUATION([patch ports], [4], [1],
4954 [table=0 in_port=1 actions=pause 2 resubmit(,1) pause 4
4955 table=1 in_port=1 actions=pause 3 pause 10 pause],
4956 [table=0 in_port=11 actions=pause 5 pause],
4957 [ovs-vsctl \
4958 -- add-port br0 patch10 \
4959 -- set interface patch10 type=patch options:peer=patch11 \
4960 ofport_request=10 \
4961 -- add-port br1 patch11 \
4962 -- set interface patch11 type=patch options:peer=patch10 \
4963 ofport_request=11])
4964
4965
4966 # Check that pause works after the packet is cloned.
4967 AT_SETUP([ofproto-dpif - continuation after clone])
4968 AT_KEYWORDS([continuations clone pause resume])
4969 OVS_VSWITCHD_START
4970
4971 add_of_ports --pcap br0 `seq 1 3`
4972
4973 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)"
4974
4975 AT_DATA([flows.txt], [dnl
4976 table=0 in_port=1 actions=set_field:1->reg1 resubmit(,2)
4977 table=1 reg1=0x5 actions=controller(pause) resubmit(,3)
4978 table=1 reg1=0x1 actions=2
4979 table=2 in_port=1 actions=clone(set_field:5->reg1, resubmit(,1))
4980 table=3 reg1=0x1 actions=3
4981 table=3 reg1=0x5 actions=2
4982 ])
4983
4984 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
4985
4986 AT_CAPTURE_FILE([ofctl_monitor0.log])
4987 ovs-ofctl monitor br0 resume --detach --no-chdir \
4988 --pidfile=ovs-ofctl0.pid 2> ofctl_monitor0.log
4989
4990 # Run a packet through the switch.
4991 AT_CHECK([ovs-appctl netdev-dummy/receive p1 "$flow"], [0], [stdout])
4992
4993 ovs-vsctl show
4994 ovs-ofctl dump-flows br0
4995
4996 # The packet should be recieved by port 2 and not port 3
4997 AT_CHECK([test 1 = `$PYTHON "$top_srcdir/utilities/ovs-pcap.in" p2-tx.pcap | wc -l`])
4998 AT_CHECK([test 0 = `$PYTHON "$top_srcdir/utilities/ovs-pcap.in" p3-tx.pcap | wc -l`])
4999
5000 # NXT_RESUMEs should be 1 and reg1 should be set to 0x5.
5001 OVS_WAIT_UNTIL([test 1 = `cat ofctl_monitor*.log | grep NXT_RESUME | grep -c reg1=0x5`])
5002
5003 OVS_VSWITCHD_STOP
5004 AT_CLEANUP
5005
5006 # Two testcases below are for the ofproto/trace command
5007 # The first one tests all correct syntax:
5008 # ofproto/trace [dp_name] odp_flow [-generate|packet]
5009 # ofproto/trace br_name br_flow [-generate|packet]
5010 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
5011 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
5012 add_of_ports br0 1 2 3
5013
5014 AT_DATA([flows.txt], [dnl
5015 in_port=1 actions=output:2
5016 in_port=2 actions=output:1
5017 ])
5018 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5019
5020 odp_flow="in_port(p1)"
5021 br_flow="in_port=1"
5022 # Test command: ofproto/trace odp_flow with in_port as a name.
5023 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
5024 AT_CHECK([tail -1 stdout], [0], [dnl
5025 Datapath actions: 2
5026 ])
5027
5028 odp_flow="in_port(1)"
5029 # Test command: ofproto/trace odp_flow
5030 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
5031 AT_CHECK([tail -1 stdout], [0], [dnl
5032 Datapath actions: 2
5033 ])
5034
5035 # Test command: ofproto/trace dp_name odp_flow
5036 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
5037 AT_CHECK([tail -1 stdout], [0], [dnl
5038 Datapath actions: 2
5039 ])
5040 # Test commmand: ofproto/trace br_name br_flow
5041 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
5042 AT_CHECK([tail -1 stdout], [0], [dnl
5043 Datapath actions: 2
5044 ])
5045
5046 # Delete the inserted flows
5047 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
5048 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
5049
5050 # This section below tests the [-generate] option
5051 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
5052 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"
5053
5054 # Test command: ofproto/trace odp_flow
5055 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
5056 # Check for no MAC learning entry
5057 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5058 port VLAN MAC Age
5059 ])
5060
5061 # Test command: ofproto/trace br_name br_flow
5062 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
5063 # Check for no MAC learning entry
5064 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5065 port VLAN MAC Age
5066 ])
5067
5068 # Test command: ofproto/trace odp_flow -generate
5069 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
5070 # Check for the MAC learning entry
5071 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5072 port VLAN MAC Age
5073 3 0 50:54:00:00:00:05 ?
5074 ])
5075
5076 # Test command: ofproto/trace dp_name odp_flow -generate
5077 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
5078 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
5079 -generate], [0], [stdout])
5080 # Check for both MAC learning entries
5081 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5082 port VLAN MAC Age
5083 3 0 50:54:00:00:00:05 ?
5084 1 0 50:54:00:00:00:06 ?
5085 ])
5086
5087 # Test command: ofproto/trace br_name br_flow -generate
5088 AT_CHECK([ovs-appctl ofproto/trace br0 \
5089 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
5090 -generate], [0], [stdout])
5091 # Check for both MAC learning entries.
5092 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5093 port VLAN MAC Age
5094 3 0 50:54:00:00:00:05 ?
5095 1 0 50:54:00:00:00:06 ?
5096 2 0 50:54:00:00:00:07 ?
5097 ])
5098
5099 # This section beflow tests the [packet] option
5100 # The ovs-tcpundump of packets between port1 and port2
5101 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
5102 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
5103
5104 # Construct the MAC learning table
5105 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
5106 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
5107 -generate], [0], [stdout])
5108
5109 # Construct the MAC learning table
5110 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
5111 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
5112 -generate], [0], [stdout])
5113
5114 # Test command: ofproto/trace odp_flow packet
5115 AT_CHECK([ovs-appctl ofproto/trace \
5116 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
5117 AT_CHECK([tail -1 stdout], [0], [dnl
5118 Datapath actions: 2
5119 ])
5120 AT_CHECK([head -n 3 stdout], [0], [dnl
5121 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
5122
5123 bridge("br0")
5124 ])
5125
5126 # Test command: ofproto/trace dp_name odp_flow packet
5127 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
5128 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
5129 AT_CHECK([tail -1 stdout], [0], [dnl
5130 Datapath actions: 2
5131 ])
5132 AT_CHECK([head -n 3 stdout], [0], [dnl
5133 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
5134
5135 bridge("br0")
5136 ])
5137
5138 # Test command: ofproto/trace br_name br_flow packet
5139 AT_CHECK([ovs-appctl ofproto/trace br0 \
5140 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
5141 AT_CHECK([tail -1 stdout], [0], [dnl
5142 Datapath actions: 1
5143 ])
5144 AT_CHECK([head -n 3 stdout], [0], [dnl
5145 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
5146
5147 bridge("br0")
5148 ])
5149
5150 OVS_VSWITCHD_STOP
5151 AT_CLEANUP
5152
5153 # The second test tests the corner cases
5154 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
5155 OVS_VSWITCHD_START
5156 add_of_ports br0 1 2
5157
5158 # Define flows
5159 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
5160 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
5161 # Define options
5162 generate="-generate"
5163 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
5164
5165 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
5166 m4_foreach(
5167 [option],
5168 [[],
5169 ["$generate"],
5170 ["$pkt"]],
5171 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
5172 [2], [], [stderr])
5173 AT_CHECK([tail -2 stderr], [0], [dnl
5174 Cannot find the datapath
5175 ovs-appctl: ovs-vswitchd: server returned an error
5176 ])])
5177
5178 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
5179 m4_foreach(
5180 [option],
5181 [[],
5182 ["$generate"],
5183 ["$pkt"]],
5184 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
5185 [2], [], [stderr])
5186 AT_CHECK([tail -2 stderr], [0], [dnl
5187 Cannot find the datapath
5188 ovs-appctl: ovs-vswitchd: server returned an error
5189 ])])
5190
5191 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
5192 m4_foreach(
5193 [option],
5194 [[],
5195 ["$generate"],
5196 ["$pkt"]],
5197 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
5198 [2], [], [stderr])
5199 AT_CHECK([tail -2 stderr], [0], [dnl
5200 Cannot find the datapath
5201 ovs-appctl: ovs-vswitchd: server returned an error
5202 ])])
5203
5204 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
5205 m4_foreach(
5206 [option],
5207 [[],
5208 ["$generate"],
5209 ["$pkt"]],
5210 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
5211 [2], [], [stderr])
5212 AT_CHECK([tail -2 stderr], [0], [dnl
5213 Cannot find the datapath
5214 ovs-appctl: ovs-vswitchd: server returned an error
5215 ])])
5216
5217 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
5218 m4_foreach(
5219 [option],
5220 [[],
5221 ["$generate"],
5222 ["$pkt"]],
5223 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
5224 [2], [], [stderr])
5225 AT_CHECK([tail -2 stderr], [0], [dnl
5226 Unknown bridge name
5227 ovs-appctl: ovs-vswitchd: server returned an error
5228 ])])
5229
5230 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
5231 m4_foreach(
5232 [option],
5233 [[],
5234 ["$generate"],
5235 ["$pkt"]],
5236 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
5237 [2], [], [stderr])
5238 AT_CHECK([tail -2 stderr], [0], [dnl
5239 Must specify bridge name
5240 ovs-appctl: ovs-vswitchd: server returned an error
5241 ])])
5242
5243 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
5244 AT_CHECK([ovs-appctl ofproto/trace \
5245 ovs-dummy "$odp_flow" garbage_option],
5246 [2], [stdout],[stderr])
5247 AT_CHECK([tail -2 stderr], [0], [dnl
5248 Trailing garbage in packet data
5249 ovs-appctl: ovs-vswitchd: server returned an error
5250 ])
5251
5252 # Test incorrect command: ofproto/trace with 0 argument
5253 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
5254 AT_CHECK([tail -2 stderr], [0], [dnl
5255 "ofproto/trace" command requires at least 1 arguments
5256 ovs-appctl: ovs-vswitchd: server returned an error
5257 ])
5258
5259 OVS_VSWITCHD_STOP
5260 AT_CLEANUP
5261
5262 # The third test checks that the output of "ovs-dpctl -m" is valid to trace.
5263 AT_SETUP([ofproto-dpif - ofproto/trace from dpctl output])
5264 OVS_VSWITCHD_START([dnl
5265 set Open_vSwitch . other_config:max-idle=10000 \
5266 -- add-port br0 p1 -- set Interface p1 type=dummy])
5267
5268 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)'])
5269 ovs-appctl revalidator/wait
5270 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows1.txt])
5271
5272 odp_flow=`cat dp_flows1.txt`
5273 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
5274 Flow: <cleared>
5275
5276 bridge("br0")
5277 -------------
5278 0. No match.
5279 drop
5280
5281 Final flow: <cleared>
5282 Megaflow: <cleared>
5283 Datapath actions: drop
5284 ])
5285
5286 dnl Now, try again without megaflows:
5287 ovs-appctl upcall/disable-megaflows
5288
5289 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)'])
5290 ovs-appctl revalidator/wait
5291 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows2.txt])
5292
5293 odp_flow=`cat dp_flows2.txt`
5294 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
5295 Flow: <cleared>
5296
5297 bridge("br0")
5298 -------------
5299 0. No match.
5300 drop
5301
5302 Final flow: <cleared>
5303 Megaflow: <cleared>
5304 Datapath actions: drop
5305 ])
5306
5307 OVS_VSWITCHD_STOP
5308 AT_CLEANUP
5309
5310 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
5311 OVS_VSWITCHD_START
5312 add_of_ports br0 1 2 3
5313
5314 AT_DATA([flows.txt], [dnl
5315 in_port=1 actions=output:2
5316 in_port=2 actions=output:1
5317 ])
5318 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5319
5320 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
5321 AT_CHECK([tail -1 stdout], [0], [dnl
5322 Datapath actions: push_vlan(vid=123,pcp=0),2
5323 ])
5324
5325 OVS_VSWITCHD_STOP
5326 AT_CLEANUP
5327
5328
5329 m4_define([OFPROTO_TRACE],
5330 [flow="$2"
5331 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
5332 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
5333 expected="$4"
5334 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
5335 [0], [stdout])
5336 mv stdout expout
5337 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
5338 [0], [expout])])
5339
5340 AT_SETUP([ofproto-dpif - MAC learning])
5341 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
5342 add_of_ports br0 1 2 3
5343
5344 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)'
5345
5346 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
5347 OFPROTO_TRACE(
5348 [ovs-dummy],
5349 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
5350 [-generate],
5351 [1,2,100])
5352
5353 # Check for the MAC learning entry.
5354 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5355 port VLAN MAC Age
5356 3 0 50:54:00:00:00:05 ?
5357 ])
5358
5359 # Trace a packet arrival destined for the learned MAC.
5360 # (This will also learn a MAC.)
5361 OFPROTO_TRACE(
5362 [ovs-dummy],
5363 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
5364 [-generate],
5365 [3])
5366
5367 # Check for both MAC learning entries.
5368 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5369 port VLAN MAC Age
5370 3 0 50:54:00:00:00:05 ?
5371 1 0 50:54:00:00:00:06 ?
5372 ])
5373
5374 # Trace a packet arrival that updates the first learned MAC entry.
5375 OFPROTO_TRACE(
5376 [ovs-dummy],
5377 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
5378 [-generate],
5379 [1,3,100])
5380
5381 # Check that the MAC learning entry was updated.
5382 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5383 port VLAN MAC Age
5384 1 0 50:54:00:00:00:06 ?
5385 2 0 50:54:00:00:00:05 ?
5386 ])
5387
5388 # Add another bridge.
5389 AT_CHECK(
5390 [ovs-vsctl \
5391 -- add-br br1 \
5392 -- set bridge br1 datapath-type=dummy])
5393 add_of_ports br1 4 5
5394
5395 # Trace some packet arrivals in br1 to create MAC learning entries there too.
5396 OFPROTO_TRACE(
5397 [ovs-dummy],
5398 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
5399 [-generate],
5400 [5,101])
5401 OFPROTO_TRACE(
5402 [ovs-dummy],
5403 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
5404 [-generate],
5405 [4,101])
5406
5407 # Check that the MAC learning entries were added.
5408 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5409 port VLAN MAC Age
5410 4 0 50:54:00:00:00:06 ?
5411 5 0 50:54:00:00:00:07 ?
5412 ])
5413
5414 # Delete port p1 and see that its MAC learning entry disappeared, and
5415 # that the MAC learning entry for the same MAC was also deleted from br1.
5416 AT_CHECK([ovs-vsctl del-port p1])
5417 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5418 port VLAN MAC Age
5419 2 0 50:54:00:00:00:05 ?
5420 ])
5421 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
5422 port VLAN MAC Age
5423 5 0 50:54:00:00:00:07 ?
5424 ])
5425
5426 OVS_VSWITCHD_STOP
5427 AT_CLEANUP
5428
5429 AT_SETUP([ofproto-dpif - MAC table overflow])
5430 OVS_VSWITCHD_START(
5431 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
5432 add_of_ports br0 1 2 3
5433
5434 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)'
5435
5436 AT_CHECK([ovs-appctl time/stop])
5437
5438 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
5439 for i in 0 1 2 3 4 5 6 7 8 9; do
5440 OFPROTO_TRACE(
5441 [ovs-dummy],
5442 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
5443 [-generate],
5444 [1,2,100])
5445 ovs-appctl time/warp 1000
5446 done
5447
5448 # Check for the MAC learning entries.
5449 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
5450 [0], [dnl
5451 3 0 50:54:00:00:00:00
5452 3 0 50:54:00:00:00:01
5453 3 0 50:54:00:00:00:02
5454 3 0 50:54:00:00:00:03
5455 3 0 50:54:00:00:00:04
5456 3 0 50:54:00:00:00:05
5457 3 0 50:54:00:00:00:06
5458 3 0 50:54:00:00:00:07
5459 3 0 50:54:00:00:00:08
5460 3 0 50:54:00:00:00:09
5461 port VLAN MAC Age
5462 ])
5463
5464 # Trace another ARP packet on another MAC.
5465 OFPROTO_TRACE(
5466 [ovs-dummy],
5467 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
5468 [-generate],
5469 [1,2,100])
5470
5471 # Check that the new one chased the oldest one out of the table.
5472 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
5473 [0], [dnl
5474 3 0 50:54:00:00:00:01 ?
5475 3 0 50:54:00:00:00:02 ?
5476 3 0 50:54:00:00:00:03 ?
5477 3 0 50:54:00:00:00:04 ?
5478 3 0 50:54:00:00:00:05 ?
5479 3 0 50:54:00:00:00:06 ?
5480 3 0 50:54:00:00:00:07 ?
5481 3 0 50:54:00:00:00:08 ?
5482 3 0 50:54:00:00:00:09 ?
5483 3 0 50:54:00:00:00:10 ?
5484 port VLAN MAC Age
5485 ])
5486 OVS_VSWITCHD_STOP
5487 AT_CLEANUP
5488
5489 AT_SETUP([ofproto-dpif - MAC table overflow fairness])
5490 OVS_VSWITCHD_START(
5491 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
5492 add_of_ports br0 1 2 3 4 5 6
5493
5494 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)'
5495
5496 AT_CHECK([ovs-appctl time/stop])
5497
5498 # Trace packets with 2 different source MACs arriving on each of the 5
5499 # ports, filling up the 10-entry learning table.
5500 for i in 0 1 2 3 4 5 6 7 8 9; do
5501 p=`expr $i / 2 + 1`
5502 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
5503 ovs-appctl time/warp 1000
5504 done
5505
5506 # Check for the MAC learning entries.
5507 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
5508 [0], [dnl
5509 1 0 50:54:00:00:00:00
5510 1 0 50:54:00:00:00:01
5511 2 0 50:54:00:00:00:02
5512 2 0 50:54:00:00:00:03
5513 3 0 50:54:00:00:00:04
5514 3 0 50:54:00:00:00:05
5515 4 0 50:54:00:00:00:06
5516 4 0 50:54:00:00:00:07
5517 5 0 50:54:00:00:00:08
5518 5 0 50:54:00:00:00:09
5519 port VLAN MAC Age
5520 ])
5521
5522 # Now trace 16 new MACs on another port.
5523 for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
5524 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
5525 ovs-appctl time/warp 1000
5526 done
5527
5528 # Check the results.
5529 #
5530 # Our eviction algorithm on overflow is that an arbitrary (but deterministic)
5531 # one of the ports with the most learned MACs loses the least recently used
5532 # one. Thus, the new port will end up with 3 MACs, 3 of the old ports with 1
5533 # MAC each, and the other 2 of the old ports with 2 MACs each.
5534 #
5535 # (If someone changes lib/heap.c to do something different with equal-priority
5536 # nodes, then the output below could change, but it would still follow the
5537 # rules explained above.)
5538 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
5539 [0], [dnl
5540 1 0 50:54:00:00:00:01
5541 2 0 50:54:00:00:00:03
5542 3 0 50:54:00:00:00:04
5543 3 0 50:54:00:00:00:05
5544 4 0 50:54:00:00:00:07
5545 5 0 50:54:00:00:00:08
5546 5 0 50:54:00:00:00:09
5547 6 0 50:54:00:00:0d:ff
5548 6 0 50:54:00:00:0e:ff
5549 6 0 50:54:00:00:0f:ff
5550 port VLAN MAC Age
5551 ])
5552 OVS_VSWITCHD_STOP
5553 AT_CLEANUP
5554
5555 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR)
5556 #
5557 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
5558 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
5559 [AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5560 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5561
5562 on_exit 'kill `cat test-sflow.pid`'
5563 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
5564 AT_CAPTURE_FILE([sflow.log])
5565 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
5566 ovs-appctl time/stop
5567
5568 add_of_ports br0 1 2
5569 ovs-vsctl \
5570 set Interface br0 options:ifindex=1002 -- \
5571 set Interface p1 options:ifindex=1004 -- \
5572 set Interface p2 options:ifindex=1003 -- \
5573 set Bridge br0 sflow=@sf -- \
5574 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
5575 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
5576
5577 dnl open with ARP packets to seed the bridge-learning. The output
5578 dnl ifIndex numbers should be reported predictably after that.
5579 dnl Since we set sampling=1 we should see all of these packets
5580 dnl reported. Sorting the output by data-source and seqNo makes
5581 dnl it deterministic. Ensuring that we send at least two packets
5582 dnl into each port means we get to check the seq nos are
5583 dnl incrementing correctly.
5584 dnl because packets from different ports can be handled by separate
5585 dnl threads, put some sleeps
5586
5587 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)'
5588 sleep 1
5589 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)'
5590 sleep 1
5591 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)'
5592 sleep 1
5593 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)'
5594 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)'
5595
5596 dnl sleep long enough to get more than one counter sample
5597 dnl from each datasource so we can check sequence numbers
5598 ovs-appctl time/warp 2000 100
5599 OVS_VSWITCHD_STOP
5600 OVS_APP_EXIT_AND_WAIT([test-sflow])
5601
5602 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5603 /g']], [0], [dnl
5604 HEADER
5605 dgramSeqNo=1
5606 ds=127.0.0.1>2:1000
5607 fsSeqNo=1
5608 in_vlan=0
5609 in_priority=0
5610 out_vlan=0
5611 out_priority=0
5612 meanSkip=1
5613 samplePool=1
5614 dropEvents=0
5615 in_ifindex=1004
5616 in_format=0
5617 out_ifindex=2
5618 out_format=2
5619 hdr_prot=1
5620 pkt_len=46
5621 stripped=4
5622 hdr_len=42
5623 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
5624 HEADER
5625 dgramSeqNo=1
5626 ds=127.0.0.1>2:1000
5627 fsSeqNo=2
5628 in_vlan=0
5629 in_priority=0
5630 out_vlan=0
5631 out_priority=0
5632 meanSkip=1
5633 samplePool=2
5634 dropEvents=0
5635 in_ifindex=1003
5636 in_format=0
5637 out_ifindex=2
5638 out_format=2
5639 hdr_prot=1
5640 pkt_len=46
5641 stripped=4
5642 hdr_len=42
5643 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
5644 HEADER
5645 dgramSeqNo=1
5646 ds=127.0.0.1>2:1000
5647 fsSeqNo=3
5648 in_vlan=0
5649 in_priority=0
5650 out_vlan=0
5651 out_priority=0
5652 meanSkip=1
5653 samplePool=3
5654 dropEvents=0
5655 in_ifindex=1004
5656 in_format=0
5657 out_ifindex=1003
5658 out_format=0
5659 hdr_prot=1
5660 pkt_len=46
5661 stripped=4
5662 hdr_len=42
5663 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
5664 HEADER
5665 dgramSeqNo=1
5666 ds=127.0.0.1>2:1000
5667 fsSeqNo=4
5668 in_vlan=0
5669 in_priority=0
5670 out_vlan=0
5671 out_priority=0
5672 meanSkip=1
5673 samplePool=4
5674 dropEvents=0
5675 in_ifindex=1003
5676 in_format=0
5677 out_ifindex=1004
5678 out_format=0
5679 hdr_prot=1
5680 pkt_len=46
5681 stripped=4
5682 hdr_len=42
5683 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
5684 HEADER
5685 dgramSeqNo=1
5686 ds=127.0.0.1>2:1000
5687 fsSeqNo=5
5688 in_vlan=0
5689 in_priority=0
5690 out_vlan=0
5691 out_priority=0
5692 meanSkip=1
5693 samplePool=5
5694 dropEvents=0
5695 in_ifindex=1003
5696 in_format=0
5697 out_ifindex=1004
5698 out_format=0
5699 hdr_prot=1
5700 pkt_len=58
5701 stripped=4
5702 hdr_len=54
5703 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
5704 ])
5705
5706 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'ETHCOUNTERS|IFCOUNTERS|ERROR|PORTNAME|OPENFLOWPORT' | head -24 | sed 's/ /\
5707 /g']], [0], [dnl
5708 ETHCOUNTERS
5709 dot3StatsAlignmentErrors=4294967295
5710 dot3StatsFCSErrors=4294967295
5711 dot3StatsSingleCollisionFrames=4294967295
5712 dot3StatsMultipleCollisionFrames=4294967295
5713 dot3StatsSQETestErrors=4294967295
5714 dot3StatsDeferredTransmissions=4294967295
5715 dot3StatsLateCollisions=4294967295
5716 dot3StatsExcessiveCollisions=4294967295
5717 dot3StatsInternalMacTransmitErrors=4294967295
5718 dot3StatsCarrierSenseErrors=4294967295
5719 dot3StatsFrameTooLongs=4294967295
5720 dot3StatsInternalMacReceiveErrors=4294967295
5721 dot3StatsSymbolErrors=4294967295
5722 ETHCOUNTERS
5723 dot3StatsAlignmentErrors=4294967295
5724 dot3StatsFCSErrors=4294967295
5725 dot3StatsSingleCollisionFrames=4294967295
5726 dot3StatsMultipleCollisionFrames=4294967295
5727 dot3StatsSQETestErrors=4294967295
5728 dot3StatsDeferredTransmissions=4294967295
5729 dot3StatsLateCollisions=4294967295
5730 dot3StatsExcessiveCollisions=4294967295
5731 dot3StatsInternalMacTransmitErrors=4294967295
5732 dot3StatsCarrierSenseErrors=4294967295
5733 dot3StatsFrameTooLongs=4294967295
5734 dot3StatsInternalMacReceiveErrors=4294967295
5735 dot3StatsSymbolErrors=4294967295
5736 ETHCOUNTERS
5737 dot3StatsAlignmentErrors=4294967295
5738 dot3StatsFCSErrors=4294967295
5739 dot3StatsSingleCollisionFrames=4294967295
5740 dot3StatsMultipleCollisionFrames=4294967295
5741 dot3StatsSQETestErrors=4294967295
5742 dot3StatsDeferredTransmissions=4294967295
5743 dot3StatsLateCollisions=4294967295
5744 dot3StatsExcessiveCollisions=4294967295
5745 dot3StatsInternalMacTransmitErrors=4294967295
5746 dot3StatsCarrierSenseErrors=4294967295
5747 dot3StatsFrameTooLongs=4294967295
5748 dot3StatsInternalMacReceiveErrors=4294967295
5749 dot3StatsSymbolErrors=4294967295
5750 ETHCOUNTERS
5751 dot3StatsAlignmentErrors=4294967295
5752 dot3StatsFCSErrors=4294967295
5753 dot3StatsSingleCollisionFrames=4294967295
5754 dot3StatsMultipleCollisionFrames=4294967295
5755 dot3StatsSQETestErrors=4294967295
5756 dot3StatsDeferredTransmissions=4294967295
5757 dot3StatsLateCollisions=4294967295
5758 dot3StatsExcessiveCollisions=4294967295
5759 dot3StatsInternalMacTransmitErrors=4294967295
5760 dot3StatsCarrierSenseErrors=4294967295
5761 dot3StatsFrameTooLongs=4294967295
5762 dot3StatsInternalMacReceiveErrors=4294967295
5763 dot3StatsSymbolErrors=4294967295
5764 ETHCOUNTERS
5765 dot3StatsAlignmentErrors=4294967295
5766 dot3StatsFCSErrors=4294967295
5767 dot3StatsSingleCollisionFrames=4294967295
5768 dot3StatsMultipleCollisionFrames=4294967295
5769 dot3StatsSQETestErrors=4294967295
5770 dot3StatsDeferredTransmissions=4294967295
5771 dot3StatsLateCollisions=4294967295
5772 dot3StatsExcessiveCollisions=4294967295
5773 dot3StatsInternalMacTransmitErrors=4294967295
5774 dot3StatsCarrierSenseErrors=4294967295
5775 dot3StatsFrameTooLongs=4294967295
5776 dot3StatsInternalMacReceiveErrors=4294967295
5777 dot3StatsSymbolErrors=4294967295
5778 ETHCOUNTERS
5779 dot3StatsAlignmentErrors=4294967295
5780 dot3StatsFCSErrors=4294967295
5781 dot3StatsSingleCollisionFrames=4294967295
5782 dot3StatsMultipleCollisionFrames=4294967295
5783 dot3StatsSQETestErrors=4294967295
5784 dot3StatsDeferredTransmissions=4294967295
5785 dot3StatsLateCollisions=4294967295
5786 dot3StatsExcessiveCollisions=4294967295
5787 dot3StatsInternalMacTransmitErrors=4294967295
5788 dot3StatsCarrierSenseErrors=4294967295
5789 dot3StatsFrameTooLongs=4294967295
5790 dot3StatsInternalMacReceiveErrors=4294967295
5791 dot3StatsSymbolErrors=4294967295
5792 IFCOUNTERS
5793 dgramSeqNo=1
5794 ds=127.0.0.1>0:1003
5795 csSeqNo=1
5796 ifindex=1003
5797 type=6
5798 ifspeed=100000000
5799 direction=0
5800 status=0
5801 in_octets=138
5802 in_unicasts=3
5803 in_multicasts=4294967295
5804 in_broadcasts=4294967295
5805 in_discards=4294967295
5806 in_errors=4294967295
5807 in_unknownprotos=4294967295
5808 out_octets=84
5809 out_unicasts=2
5810 out_multicasts=4294967295
5811 out_broadcasts=4294967295
5812 out_discards=4294967295
5813 out_errors=4294967295
5814 promiscuous=0
5815 IFCOUNTERS
5816 dgramSeqNo=1
5817 ds=127.0.0.1>0:1004
5818 csSeqNo=1
5819 ifindex=1004
5820 type=6
5821 ifspeed=100000000
5822 direction=0
5823 status=0
5824 in_octets=84
5825 in_unicasts=2
5826 in_multicasts=4294967295
5827 in_broadcasts=4294967295
5828 in_discards=4294967295
5829 in_errors=4294967295
5830 in_unknownprotos=4294967295
5831 out_octets=138
5832 out_unicasts=3
5833 out_multicasts=4294967295
5834 out_broadcasts=4294967295
5835 out_discards=4294967295
5836 out_errors=4294967295
5837 promiscuous=0
5838 IFCOUNTERS
5839 dgramSeqNo=2
5840 ds=127.0.0.1>0:1002
5841 csSeqNo=1
5842 ifindex=1002
5843 type=6
5844 ifspeed=100000000
5845 direction=0
5846 status=0
5847 in_octets=0
5848 in_unicasts=0
5849 in_multicasts=4294967295
5850 in_broadcasts=4294967295
5851 in_discards=4294967295
5852 in_errors=4294967295
5853 in_unknownprotos=4294967295
5854 out_octets=84
5855 out_unicasts=2
5856 out_multicasts=4294967295
5857 out_broadcasts=4294967295
5858 out_discards=4294967295
5859 out_errors=4294967295
5860 promiscuous=0
5861 IFCOUNTERS
5862 dgramSeqNo=3
5863 ds=127.0.0.1>0:1002
5864 csSeqNo=2
5865 ifindex=1002
5866 type=6
5867 ifspeed=100000000
5868 direction=0
5869 status=0
5870 in_octets=0
5871 in_unicasts=0
5872 in_multicasts=4294967295
5873 in_broadcasts=4294967295
5874 in_discards=4294967295
5875 in_errors=4294967295
5876 in_unknownprotos=4294967295
5877 out_octets=84
5878 out_unicasts=2
5879 out_multicasts=4294967295
5880 out_broadcasts=4294967295
5881 out_discards=4294967295
5882 out_errors=4294967295
5883 promiscuous=0
5884 IFCOUNTERS
5885 dgramSeqNo=3
5886 ds=127.0.0.1>0:1003
5887 csSeqNo=2
5888 ifindex=1003
5889 type=6
5890 ifspeed=100000000
5891 direction=0
5892 status=0
5893 in_octets=138
5894 in_unicasts=3
5895 in_multicasts=4294967295
5896 in_broadcasts=4294967295
5897 in_discards=4294967295
5898 in_errors=4294967295
5899 in_unknownprotos=4294967295
5900 out_octets=84
5901 out_unicasts=2
5902 out_multicasts=4294967295
5903 out_broadcasts=4294967295
5904 out_discards=4294967295
5905 out_errors=4294967295
5906 promiscuous=0
5907 IFCOUNTERS
5908 dgramSeqNo=3
5909 ds=127.0.0.1>0:1004
5910 csSeqNo=2
5911 ifindex=1004
5912 type=6
5913 ifspeed=100000000
5914 direction=0
5915 status=0
5916 in_octets=84
5917 in_unicasts=2
5918 in_multicasts=4294967295
5919 in_broadcasts=4294967295
5920 in_discards=4294967295
5921 in_errors=4294967295
5922 in_unknownprotos=4294967295
5923 out_octets=138
5924 out_unicasts=3
5925 out_multicasts=4294967295
5926 out_broadcasts=4294967295
5927 out_discards=4294967295
5928 out_errors=4294967295
5929 promiscuous=0
5930 OPENFLOWPORT
5931 datapath_id=18364758544493064720
5932 port_no=1
5933 OPENFLOWPORT
5934 datapath_id=18364758544493064720
5935 port_no=1
5936 OPENFLOWPORT
5937 datapath_id=18364758544493064720
5938 port_no=2
5939 OPENFLOWPORT
5940 datapath_id=18364758544493064720
5941 port_no=2
5942 OPENFLOWPORT
5943 datapath_id=18364758544493064720
5944 port_no=65534
5945 OPENFLOWPORT
5946 datapath_id=18364758544493064720
5947 port_no=65534
5948 PORTNAME
5949 portName=br0
5950 PORTNAME
5951 portName=br0
5952 PORTNAME
5953 portName=p1
5954 PORTNAME
5955 portName=p1
5956 PORTNAME
5957 portName=p2
5958 PORTNAME
5959 portName=p2
5960 ])])
5961
5962 AT_SETUP([ofproto-dpif - basic truncate action])
5963 OVS_VSWITCHD_START
5964 add_of_ports br0 1 2 3 4 5
5965
5966 AT_CHECK([ovs-vsctl -- set Interface p1 type=dummy options:pcap=p1.pcap])
5967 AT_CHECK([ovs-vsctl -- set Interface p2 type=dummy options:pstream=punix:p2.sock])
5968 AT_CHECK([ovs-vsctl -- set Interface p3 type=dummy options:stream=unix:p2.sock])
5969 AT_CHECK([ovs-vsctl -- set Interface p4 type=dummy options:pstream=punix:p4.sock])
5970 AT_CHECK([ovs-vsctl -- set Interface p5 type=dummy options:stream=unix:p4.sock])
5971
5972 AT_DATA([flows.txt], [dnl
5973 in_port=3,actions=drop
5974 in_port=5,actions=drop
5975 in_port=1,actions=output(port=2,max_len=64),output:4
5976 ])
5977 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5978
5979 dnl Datapath actions
5980 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=6,tos=4,ttl=128,frag=no),tcp(src=8,dst=9)'], [0], [stdout])
5981 AT_CHECK([tail -1 stdout], [0],
5982 [Datapath actions: trunc(64),2,4
5983 ])
5984
5985 dnl An 170 byte packet
5986 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '000c29c8a0a4005056c0000808004500009cb4a6000040019003c0a8da01c0a8da640800cb5fa762000556f431ad0009388e08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f'])
5987
5988 AT_CHECK([ovs-ofctl parse-pcap p1.pcap], [0], [dnl
5989 icmp,in_port=ANY,vlan_tci=0x0000,dl_src=00:50:56:c0:00:08,dl_dst=00:0c:29:c8:a0:a4,nw_src=192.168.218.1,nw_dst=192.168.218.100,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0
5990 ])
5991
5992 AT_CHECK([ovs-appctl revalidator/purge], [0])
5993 dnl packet with truncated size
5994 AT_CHECK([ovs-ofctl dump-flows br0 | grep "in_port=3" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
5995 n_bytes=64
5996 ])
5997 dnl packet with original size
5998 AT_CHECK([ovs-ofctl dump-flows br0 | grep "in_port=5" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
5999 n_bytes=170
6000 ])
6001
6002 dnl More complicated case
6003 AT_CHECK([ovs-ofctl del-flows br0])
6004 AT_DATA([flows.txt], [dnl
6005 in_port=3,actions=drop
6006 in_port=5,actions=drop
6007 in_port=1,actions=output(port=2,max_len=64),output(port=2,max_len=128),output(port=4,max_len=60),output:2,output:4
6008 ])
6009 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6010
6011 dnl Datapath actions
6012 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=6,tos=4,ttl=128,frag=no),tcp(src=8,dst=9)'], [0], [stdout])
6013 AT_CHECK([tail -1 stdout], [0],
6014 [Datapath actions: trunc(64),2,trunc(128),2,trunc(60),4,2,4
6015 ])
6016
6017 dnl An 170 byte packet
6018 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '000c29c8a0a4005056c0000808004500009cb4a6000040019003c0a8da01c0a8da640800cb5fa762000556f431ad0009388e08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f'])
6019
6020 AT_CHECK([ovs-appctl revalidator/purge], [0])
6021 dnl packet size: 64 + 128 + 170 = 362
6022 AT_CHECK([ovs-ofctl dump-flows br0 | grep "in_port=3" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
6023 n_bytes=362
6024 ])
6025 dnl packet size: 60 + 170 = 230
6026 AT_CHECK([ovs-ofctl dump-flows br0 | grep "in_port=5" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
6027 n_bytes=230
6028 ])
6029
6030 dnl syntax checking
6031 AT_CHECK([ovs-ofctl add-flow br0 'actions=output(port=ALL,max_len=100)'], [1], [], [dnl
6032 ovs-ofctl: output to unsupported truncate port: ALL
6033 ])
6034
6035 OVS_VSWITCHD_STOP
6036 AT_CLEANUP
6037
6038 AT_SETUP([ofproto-dpif - truncate and output to patch port])
6039 OVS_VSWITCHD_START([add-br br1 \
6040 -- set bridge br1 datapath-type=dummy fail-mode=secure \
6041 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 ofport_request=1 \
6042 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
6043
6044 add_of_ports br0 2
6045
6046 AT_CHECK([ovs-ofctl add-flow br0 actions='output(port=1,max_len=100),output:2'])
6047 AT_CHECK([ovs-ofctl add-flow br1 actions=NORMAL])
6048
6049 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
6050 [0], [stdout])
6051 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
6052 ])
6053 dnl the output(port=1,max_len=100) fails the translation, only output:2 in datapath
6054 AT_CHECK([grep "output_trunc does not support patch port [[0-9]]*" stdout], [0], [stdout])
6055
6056 OVS_VSWITCHD_STOP
6057 AT_CLEANUP
6058
6059 AT_SETUP([ofproto-dpif - truncate and output to gre tunnel])
6060 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
6061 options:remote_ip=1.1.1.1 options:local_ip=2.2.2.2 \
6062 options:key=5 ofport_request=1\
6063 -- add-port br0 p2 -- set Interface p2 type=dummy \
6064 ofport_request=2])
6065 AT_DATA([flows.txt], [dnl
6066 actions=output(max_len=100, port=1)
6067 ])
6068 OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
6069 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6070
6071 AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0], [dnl
6072 br0 65534/100: (dummy-internal)
6073 p1 1/1: (gre: key=5, local_ip=2.2.2.2, remote_ip=1.1.1.1)
6074 p2 2/2: (dummy)
6075 ])
6076
6077 dnl Basic
6078 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=6,tos=4,ttl=128,frag=no),tcp(src=8,dst=9)'], [0], [stdout])
6079 AT_CHECK([tail -1 stdout], [0],
6080 [Datapath actions: trunc(100),set(tunnel(tun_id=0x5,src=2.2.2.2,dst=1.1.1.1,ttl=64,flags(df|key))),1
6081 ])
6082
6083 OVS_VSWITCHD_STOP
6084 AT_CLEANUP
6085
6086 AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv4 collector])
6087 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1])
6088 AT_CLEANUP
6089
6090 AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv6 collector])
6091 AT_SKIP_IF([test $HAVE_IPV6 = no])
6092 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]])
6093 AT_CLEANUP
6094
6095 dnl Test sFlow LAG structures
6096 AT_SETUP([ofproto-dpif - sFlow packet sampling - LACP structures])
6097 AT_SKIP_IF([test "$IS_WIN32" = "yes"])
6098 OVS_VSWITCHD_START([dnl
6099 add-bond br0 bond p1 p2 -- \
6100 set Port bond lacp=active bond-mode=active-backup \
6101 other_config:lacp-time="fast" \
6102 other_config:lacp-system-id=11:22:33:44:55:66 \
6103 other_config:lacp-system-priority=54321 -- \
6104 set Interface p1 type=dummy \
6105 other_config:lacp-port-id=11 \
6106 other_config:lacp-port-priority=111 \
6107 other_config:lacp-aggregation-key=3333 -- \
6108 set Interface p2 type=dummy \
6109 other_config:lacp-port-id=22 \
6110 other_config:lacp-port-priority=222 \
6111 other_config:lacp-aggregation-key=3333 ])
6112
6113 on_exit 'kill `cat test-sflow.pid`'
6114 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
6115 AT_CAPTURE_FILE([sflow.log])
6116 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
6117
6118 ovs-appctl time/stop
6119
6120 ovs-vsctl \
6121 set Interface p1 options:ifindex=1003 -- \
6122 set Bridge br0 sflow=@sf -- \
6123 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
6124 header=128 sampling=1 polling=1
6125
6126 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
6127 AT_CHECK([ovs-appctl time/warp 2000 100], [0], [ignore])
6128 AT_CHECK([ovs-appctl revalidator/purge], [0])
6129 OVS_VSWITCHD_STOP
6130 OVS_APP_EXIT_AND_WAIT([test-sflow])
6131 AT_CHECK([[sort sflow.log | $EGREP 'LACPCOUNTERS|ERROR' | head -n 1 | sed 's/ /\
6132 /g']], [0], [dnl
6133 LACPCOUNTERS
6134 sysID=11:22:33:44:55:66
6135 partnerID=00:00:00:00:00:00
6136 aggID=3333
6137 actorAdmin=0x7
6138 actorOper=0xbf
6139 partnerAdmin=0x0
6140 partnerOper=0x2
6141 LACPDUsRx=0
6142 markerPDUsRx=4294967295
6143 markerRespPDUsRx=4294967295
6144 unknownRx=4294967295
6145 illegalRx=0
6146 LACPDUsTx=1
6147 markerPDUsTx=4294967295
6148 markerRespPDUsTx=4294967295
6149 ])
6150
6151 AT_CLEANUP
6152
6153 AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel set])
6154 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
6155 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
6156
6157 dnl set up sFlow logging
6158 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
6159 AT_CAPTURE_FILE([sflow.log])
6160 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
6161 ovs-appctl time/stop
6162
6163 OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
6164 AT_CHECK([ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre \
6165 options:remote_ip=1.1.1.1 options:key=456 ofport_request=3])
6166 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy ofport_request=4])
6167
6168 AT_CHECK([ovs-ofctl add-flow br0 action=3])
6169
6170 dnl enable sflow
6171 ovs-vsctl \
6172 set Bridge br0 sflow=@sf -- \
6173 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
6174 header=128 sampling=1 polling=0
6175
6176 dnl introduce a packet that will be flooded to the tunnel
6177 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)'])
6178
6179 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
6180 for i in `seq 1 30`; do
6181 ovs-appctl time/warp 100
6182 done
6183
6184 OVS_APP_EXIT_AND_WAIT([test-sflow])
6185
6186 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
6187 /g']], [0], [dnl
6188 HEADER
6189 dgramSeqNo=1
6190 ds=127.0.0.1>2:1000
6191 fsSeqNo=1
6192 tunnel4_out_length=0
6193 tunnel4_out_protocol=47
6194 tunnel4_out_src=0.0.0.0
6195 tunnel4_out_dst=1.1.1.1
6196 tunnel4_out_src_port=0
6197 tunnel4_out_dst_port=0
6198 tunnel4_out_tcp_flags=0
6199 tunnel4_out_tos=1
6200 tunnel_out_vni=456
6201 in_vlan=0
6202 in_priority=0
6203 out_vlan=0
6204 out_priority=0
6205 meanSkip=1
6206 samplePool=1
6207 dropEvents=0
6208 in_ifindex=0
6209 in_format=0
6210 out_ifindex=1
6211 out_format=2
6212 hdr_prot=1
6213 pkt_len=46
6214 stripped=4
6215 hdr_len=42
6216 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
6217 ])
6218
6219 OVS_VSWITCHD_STOP
6220 AT_CLEANUP
6221
6222 AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel push])
6223 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
6224
6225 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 options:ifindex=1010])
6226
6227 dnl set up sFlow logging
6228 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
6229 AT_CAPTURE_FILE([sflow.log])
6230 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
6231 ovs-appctl time/stop
6232
6233 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6234 AT_CHECK([ovs-vsctl add-br int-br -- set bridge int-br datapath_type=dummy], [0])
6235 AT_CHECK([ovs-vsctl -- add-port int-br t1 -- set Interface t1 type=gre \
6236 options:remote_ip=1.1.2.92 options:key=456 ofport_request=4\
6237 -- add-port int-br vm1 -- set Interface vm1 type=dummy \
6238 options:ifindex=2011 ofport_request=5
6239 ], [0])
6240
6241 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
6242 dummy@ovs-dummy: hit:0 missed:0
6243 br0:
6244 br0 65534/100: (dummy-internal)
6245 p0 1/1: (dummy: ifindex=1010)
6246 int-br:
6247 int-br 65534/2: (dummy-internal)
6248 t1 4/4: (gre: key=456, remote_ip=1.1.2.92)
6249 vm1 5/3: (dummy: ifindex=2011)
6250 ])
6251
6252 dnl set up route to 1.1.2.92 via br0 and action=normal
6253 AT_CHECK([ovs-appctl netdev-dummy/ip4addr br0 1.1.2.88/24], [0], [OK
6254 ])
6255 AT_CHECK([ovs-appctl ovs/route/add 1.1.2.92/24 br0], [0], [OK
6256 ])
6257 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6258
6259 dnl Prime ARP Cache for 1.1.2.92
6260 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=2,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)'])
6261
6262 dnl configure sflow on int-br only
6263 ovs-vsctl \
6264 set Bridge int-br sflow=@sf -- \
6265 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
6266 header=128 sampling=1 polling=0
6267
6268 dnl set up route to 192.168.1.2 via br0
6269 AT_CHECK([ovs-appctl netdev-dummy/ip4addr br0 192.168.1.1/16], [0], [OK
6270 ])
6271 AT_CHECK([ovs-appctl ovs/route/add 192.168.0.0/16 br0], [0], [OK
6272 ])
6273
6274 dnl add rule for int-br to force packet onto tunnel. There is no ifindex
6275 dnl for this port so the sFlow output will just report that it went to
6276 dnl 1 output (out_format=2, out_ifindex=1)
6277 AT_CHECK([ovs-ofctl add-flow int-br "actions=4"])
6278
6279 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)'])
6280
6281 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
6282 for i in `seq 1 30`; do
6283 ovs-appctl time/warp 100
6284 done
6285
6286 OVS_APP_EXIT_AND_WAIT([test-sflow])
6287
6288 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
6289 /g']], [0], [dnl
6290 HEADER
6291 dgramSeqNo=1
6292 ds=127.0.0.1>2:1000
6293 fsSeqNo=1
6294 tunnel4_out_length=0
6295 tunnel4_out_protocol=47
6296 tunnel4_out_src=1.1.2.88
6297 tunnel4_out_dst=1.1.2.92
6298 tunnel4_out_src_port=0
6299 tunnel4_out_dst_port=0
6300 tunnel4_out_tcp_flags=0
6301 tunnel4_out_tos=0
6302 tunnel_out_vni=456
6303 in_vlan=0
6304 in_priority=0
6305 out_vlan=0
6306 out_priority=0
6307 meanSkip=1
6308 samplePool=1
6309 dropEvents=0
6310 in_ifindex=2011
6311 in_format=0
6312 out_ifindex=1
6313 out_format=2
6314 hdr_prot=1
6315 pkt_len=46
6316 stripped=4
6317 hdr_len=42
6318 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
6319 ])
6320
6321 OVS_VSWITCHD_STOP
6322 AT_CLEANUP
6323
6324 AT_SETUP([ofproto-dpif - sFlow packet sampling - MPLS])
6325 AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
6326 OVS_VSWITCHD_START
6327 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
6328 add_of_ports br0 1 2
6329 AT_DATA([flows.txt], [dnl
6330 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
6331 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
6332 ])
6333 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6334
6335 dnl set up sFlow logging
6336 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
6337 AT_CAPTURE_FILE([sflow.log])
6338 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
6339 ovs-appctl time/stop
6340
6341 dnl configure sflow
6342 ovs-vsctl \
6343 set Bridge br0 sflow=@sf -- \
6344 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
6345 header=128 sampling=1 polling=0
6346
6347 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)'])
6348 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)'])
6349
6350 dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
6351 for i in `seq 1 30`; do
6352 ovs-appctl time/warp 100
6353 done
6354
6355 OVS_APP_EXIT_AND_WAIT([test-sflow])
6356
6357 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
6358 /g']], [0], [dnl
6359 HEADER
6360 dgramSeqNo=1
6361 ds=127.0.0.1>2:1000
6362 fsSeqNo=1
6363 mpls_label_0=789
6364 mpls_tc_0=4
6365 mpls_ttl_0=32
6366 mpls_bos_0=0
6367 mpls_label_1=11
6368 mpls_tc_1=3
6369 mpls_ttl_1=64
6370 mpls_bos_1=1
6371 in_vlan=0
6372 in_priority=0
6373 out_vlan=0
6374 out_priority=0
6375 meanSkip=1
6376 samplePool=1
6377 dropEvents=0
6378 in_ifindex=0
6379 in_format=0
6380 out_ifindex=1
6381 out_format=2
6382 hdr_prot=1
6383 pkt_len=22
6384 stripped=4
6385 hdr_len=18
6386 hdr=50-54-00-00-00-0A-50-54-00-00-00-09-88-47-00-00-B7-40
6387 HEADER
6388 dgramSeqNo=1
6389 ds=127.0.0.1>2:1000
6390 fsSeqNo=2
6391 mpls_label_0=789
6392 mpls_tc_0=4
6393 mpls_ttl_0=32
6394 mpls_bos_0=1
6395 in_vlan=0
6396 in_priority=0
6397 out_vlan=0
6398 out_priority=0
6399 meanSkip=1
6400 samplePool=2
6401 dropEvents=0
6402 in_ifindex=0
6403 in_format=0
6404 out_ifindex=1
6405 out_format=2
6406 hdr_prot=1
6407 pkt_len=38
6408 stripped=4
6409 hdr_len=34
6410 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
6411 ])
6412
6413 OVS_VSWITCHD_STOP
6414 AT_CLEANUP
6415
6416
6417 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR)
6418 #
6419 # Test that basic NetFlow reports flow statistics correctly:
6420 # The initial packet of a flow are correctly accounted.
6421 # Later packets within a flow are correctly accounted.
6422 # Flow actions changing (in this case, due to MAC learning)
6423 # cause a record to be sent.
6424 m4_define([CHECK_NETFLOW_EXPIRATION],
6425 [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
6426 add_of_ports br0 1 2
6427
6428 ovs-appctl time/stop
6429 on_exit 'kill `cat test-netflow.pid`'
6430 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
6431 AT_CAPTURE_FILE([netflow.log])
6432 PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
6433
6434 ovs-vsctl \
6435 set Bridge br0 netflow=@nf -- \
6436 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
6437 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
6438
6439 for delay in 1000 30000; do
6440 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)'
6441 sleep 1 # ensure the order in which these two packets are processed
6442 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)'
6443
6444 ovs-appctl time/warp $delay
6445 done
6446
6447 ovs-appctl time/warp 6000
6448 ovs-appctl revalidator/wait
6449 OVS_VSWITCHD_STOP
6450 OVS_APP_EXIT_AND_WAIT([test-netflow])
6451
6452 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 42 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
6453
6454 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 42 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
6455
6456 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 84 bytes, ICMP 0:0" netflow.log | wc -l`
6457 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 42 bytes, ICMP 0:0" netflow.log | wc -l`
6458 AT_CHECK([test $separate = 2 || test $combined = 1], [0])])
6459
6460 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv4 collector])
6461 CHECK_NETFLOW_EXPIRATION([127.0.0.1])
6462 AT_CLEANUP
6463
6464 AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv6 collector])
6465 AT_SKIP_IF([test $HAVE_IPV6 = no])
6466 CHECK_NETFLOW_EXPIRATION([[[::1]]])
6467 AT_CLEANUP
6468
6469 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR)
6470 #
6471 # Test that basic NetFlow reports active expirations correctly.
6472 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
6473 [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
6474 add_of_ports br0 1 2
6475
6476 on_exit 'kill `cat test-netflow.pid`'
6477 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
6478 AT_CAPTURE_FILE([netflow.log])
6479 PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
6480
6481 ovs-vsctl \
6482 set Bridge br0 netflow=@nf -- \
6483 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
6484 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
6485
6486 AT_CHECK([ovs-appctl time/stop])
6487 n=1
6488 while test $n -le 60; do
6489 n=`expr $n + 1`
6490
6491 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)'
6492 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)'
6493
6494 ovs-appctl time/warp 1000
6495 done
6496
6497 ovs-appctl time/warp 10000
6498
6499 ovs-appctl revalidator/wait
6500 OVS_VSWITCHD_STOP
6501 OVS_APP_EXIT_AND_WAIT([test-netflow])
6502
6503 # Count the number of reported packets:
6504 # - From source to destination before MAC learning kicks in (just one).
6505 # - From source to destination after that.
6506 # - From destination to source.
6507 n_learn=0
6508 n_in=0
6509 n_out=0
6510 n_other=0
6511 n_recs=0
6512 none=0
6513 while read line; do
6514 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
6515 case $pkts in
6516 [[0-9]]*) ;;
6517 *) continue ;;
6518 esac
6519
6520 case $line in
6521 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
6522 counter=n_learn
6523 ;;
6524 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
6525 counter=n_in
6526 ;;
6527 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
6528 counter=n_out
6529 ;;
6530 *)
6531 counter=n_other
6532 ;;
6533 esac
6534 eval $counter=\`expr \$$counter + \$pkts\`
6535 n_recs=`expr $n_recs + 1`
6536 done < netflow.log
6537
6538 # There should be exactly 1 MAC learning packet,
6539 # exactly 59 other packets in that direction,
6540 # and exactly 60 packets in the other direction.
6541 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
6542 ])])
6543
6544 AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv4 collector])
6545 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1])
6546 AT_CLEANUP
6547
6548 AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv6 collector])
6549 AT_SKIP_IF([test $HAVE_IPV6 = no])
6550 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]])
6551 AT_CLEANUP
6552
6553 dnl In the absence of an IPFIX collector to verify protocol correctness, simply
6554 dnl configure bridge IPFIX and ensure that sample action generation works at the
6555 dnl datapath level.
6556 AT_SETUP([ofproto-dpif - Bridge IPFIX sanity check])
6557 OVS_VSWITCHD_START
6558 add_of_ports br0 1 2
6559
6560 dnl Sample every packet using bridge-based sampling.
6561 AT_CHECK([ovs-vsctl -- set bridge br0 ipfix=@fix -- \
6562 --id=@fix create ipfix targets=\"127.0.0.1:4739\" \
6563 sampling=1], [0], [ignore])
6564
6565 dnl Send some packets that should be sampled.
6566 for i in `seq 1 3`; do
6567 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)'])
6568 done
6569 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
6570 flow-dump from non-dpdk interfaces:
6571 packets:2, bytes:68, used:0.001s, actions:userspace(pid=0,ipfix(output_port=4294967295))
6572 ])
6573
6574 AT_CHECK([ovs-appctl revalidator/purge])
6575 dnl
6576 dnl Add a slowpath meter. The userspace action should be metered.
6577 AT_CHECK([ovs-ofctl -O OpenFlow13 add-meter br0 'meter=slowpath pktps burst stats bands=type=drop rate=3 burst_size=1'])
6578
6579 dnl Send some packets that should be sampled and metered.
6580 for i in `seq 1 3`; do
6581 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)'])
6582 done
6583 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
6584 flow-dump from non-dpdk interfaces:
6585 packets:2, bytes:68, used:0.001s, actions:sample(sample=100.0%,actions(meter(0),userspace(pid=0,ipfix(output_port=4294967295))))
6586 ])
6587
6588 dnl Remove the IPFIX configuration.
6589 AT_CHECK([ovs-vsctl clear bridge br0 ipfix])
6590 AT_CHECK([ovs-appctl revalidator/purge])
6591
6592 dnl Send some more packets, to ensure that these are not sampled.
6593 for i in `seq 1 3`; do
6594 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)'])
6595 done
6596 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
6597 flow-dump from non-dpdk interfaces:
6598 packets:2, bytes:68, used:0.001s, actions:drop
6599 ])
6600
6601 OVS_VSWITCHD_STOP(["/sending to collector failed/d"])
6602 AT_CLEANUP
6603
6604 dnl Bridge IPFIX statistics check
6605 AT_SETUP([ofproto-dpif - Bridge IPFIX statistics check])
6606 OVS_VSWITCHD_START
6607 add_of_ports br0 1 2
6608
6609 dnl Negative test check.
6610 AT_CHECK([ovs-ofctl dump-ipfix-bridge br0], [0], [dnl
6611 OFPT_ERROR (xid=0x2): NXST_NOT_CONFIGURED
6612 NXST_IPFIX_BRIDGE request (xid=0x2):
6613 ])
6614
6615 dnl Sample every packet using bridge-based sampling.
6616 AT_CHECK([ovs-vsctl -- set bridge br0 ipfix=@fix -- \
6617 --id=@fix create ipfix targets=\"127.0.0.1:4739\" \
6618 sampling=1], [0], [ignore])
6619
6620 dnl Send some packets that should be sampled.
6621 for i in `seq 1 20`; do
6622 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)'])
6623 done
6624
6625 dnl There are 4 extra IPFIX template packets.
6626 AT_CHECK([ovs-ofctl dump-ipfix-bridge br0 | sed 's/tx pkts=[[0-9]]*/tx pkts=24/' | sed 's/tx errs=[[0-9]]*/tx errs=0/'], [0], [dnl
6627 NXST_IPFIX_BRIDGE reply (xid=0x2):
6628 bridge ipfix: flows=20, current flows=0, sampled pkts=20, ipv4 ok=0, ipv6 ok=0, tx pkts=24
6629 pkts errs=20, ipv4 errs=20, ipv6 errs=0, tx errs=0
6630 ])
6631
6632 dnl Remove the IPFIX configuration.
6633 AT_CHECK([ovs-vsctl clear bridge br0 ipfix])
6634 AT_CHECK([ovs-appctl revalidator/purge])
6635
6636 dnl Send some more packets, to ensure that these are not sampled.
6637 for i in `seq 1 2`; do
6638 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)'])
6639 done
6640 AT_CHECK([ovs-ofctl dump-ipfix-bridge br0], [0], [dnl
6641 OFPT_ERROR (xid=0x2): NXST_NOT_CONFIGURED
6642 NXST_IPFIX_BRIDGE request (xid=0x2):
6643 ])
6644
6645 OVS_VSWITCHD_STOP(["/sending to collector failed/d"])
6646 AT_CLEANUP
6647
6648 dnl Flow IPFIX sanity check
6649 AT_SETUP([ofproto-dpif - Flow IPFIX sanity check])
6650 OVS_VSWITCHD_START
6651 add_of_ports br0 1 2
6652
6653 # Check for regression against a bug where an invalid target caused an
6654 # assertion failure and a crash.
6655 AT_CHECK([ovs-vsctl -- --id=@br0 get Bridge br0 \
6656 -- --id=@ipfix create IPFIX targets=\"xyzzy\" \
6657 -- --id=@cs create Flow_Sample_Collector_Set id=0 bridge=@br0 ipfix=@ipfix],
6658 [0], [ignore])
6659
6660 AT_CHECK([ovs-vsctl -- --id=@br0 get Bridge br0 \
6661 -- --id=@ipfix create IPFIX targets=\"127.0.0.1:4739\" \
6662 -- --id=@cs create Flow_Sample_Collector_Set id=1 bridge=@br0 ipfix=@ipfix],
6663 [0], [ignore])
6664
6665 AT_DATA([flows.txt], [dnl
6666 in_port=1, actions=sample(probability=65535,collector_set_id=1),output:2
6667 ])
6668
6669 AT_CHECK([ovs-ofctl add-flows br0 flows.txt], [0], [ignore])
6670
6671 dnl Send some packets that should be sampled.
6672 for i in `seq 1 3`; do
6673 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)'])
6674 done
6675 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
6676 flow-dump from non-dpdk interfaces:
6677 packets:2, bytes:68, used:0.001s, actions:userspace(pid=0,flow_sample(probability=65535,collector_set_id=1,obs_domain_id=0,obs_point_id=0,output_port=4294967295)),2
6678 ])
6679
6680 dnl Remove the flow which contains sample action.
6681 AT_CHECK([ovs-ofctl del-flows br0 in_port=1], [0], [ignore])
6682 AT_CHECK([ovs-appctl revalidator/purge])
6683
6684 dnl Send some more packets, to ensure that these are not sampled.
6685 for i in `seq 1 3`; do
6686 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)'])
6687 done
6688 AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
6689 flow-dump from non-dpdk interfaces:
6690 packets:2, bytes:68, used:0.001s, actions:drop
6691 ])
6692
6693 OVS_VSWITCHD_STOP(["/sending to collector failed/d
6694 /xyzzy/d
6695 /no collectors/d"])
6696 AT_CLEANUP
6697
6698 dnl Flow IPFIX sanity check for tunnel set
6699 AT_SETUP([ofproto-dpif - Flow IPFIX sanity check - tunnel set])
6700 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
6701 options:remote_ip=1.1.1.1 options:local_ip=2.2.2.2 \
6702 options:key=5 ofport_request=1\
6703 -- add-port br0 p2 -- set Interface p2 type=stt \
6704 options:remote_ip=1.1.1.2 options:local_ip=2.2.2.3 \
6705 options:key=6 ofport_request=2\
6706 -- add-port br0 p3 -- set Interface p3 type=dummy \
6707 ofport_request=3 \
6708 -- --id=@br0 get Bridge br0 \
6709 -- --id=@ipfix create IPFIX targets=\"127.0.0.1:4739\" \
6710 -- --id=@cs create Flow_Sample_Collector_Set id=1 bridge=@br0 ipfix=@ipfix],
6711 [<0>
6712 <1>
6713 ])
6714
6715 OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
6716
6717 dnl Add openflow sample action without sampling_port.
6718 AT_DATA([flows.txt], [dnl
6719 in_port=3, actions=sample(probability=65535,collector_set_id=1),output:1
6720 ])
6721 AT_CHECK([ovs-ofctl add-flows br0 flows.txt], [0], [ignore])
6722
6723 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),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)'], [0], [stdout])
6724 AT_CHECK([tail -1 stdout], [0], [dnl
6725 Datapath actions: userspace(pid=0,flow_sample(probability=65535,collector_set_id=1,obs_domain_id=0,obs_point_id=0,output_port=4294967295)),set(tunnel(tun_id=0x5,src=2.2.2.2,dst=1.1.1.1,tos=0x1,ttl=64,flags(df|key))),1
6726 ])
6727
6728 dnl Remove the flow which contains sample action.
6729 AT_CHECK([ovs-ofctl del-flows br0 in_port=3], [0], [ignore])
6730 AT_CHECK([ovs-appctl revalidator/purge])
6731
6732 dnl Add openflow sample action with sampling_port which is
6733 dnl equal to output port.
6734 AT_DATA([flows2.txt], [dnl
6735 in_port=3, actions=sample(probability=65535,collector_set_id=1,sampling_port=1),output:1
6736 ])
6737 AT_CHECK([ovs-ofctl add-flows br0 flows2.txt], [0], [ignore])
6738
6739 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),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)'], [0], [stdout])
6740 dnl Make sure flow sample action in datapath is behind set tunnel
6741 dnl action at egress point of tunnel port.
6742 AT_CHECK([tail -1 stdout], [0], [dnl
6743 Datapath actions: set(tunnel(tun_id=0x5,src=2.2.2.2,dst=1.1.1.1,tos=0x1,ttl=64,flags(df|key))),userspace(pid=0,flow_sample(probability=65535,collector_set_id=1,obs_domain_id=0,obs_point_id=0,output_port=1),tunnel_out_port=1),1
6744 ])
6745
6746 dnl Remove the flow which contains sample action.
6747 AT_CHECK([ovs-ofctl del-flows br0 in_port=3], [0], [ignore])
6748 AT_CHECK([ovs-appctl revalidator/purge])
6749
6750 dnl Add a rule with two sample actions and each sample action
6751 dnl has a sampling_port
6752 AT_DATA([flows3.txt], [dnl
6753 in_port=3, actions=sample(probability=65535,collector_set_id=1,sampling_port=1),output:1,sample(probability=65535,collector_set_id=1,sampling_port=2),output:2
6754 ])
6755 AT_CHECK([ovs-ofctl add-flows br0 flows3.txt], [0], [ignore])
6756
6757 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),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)'], [0], [stdout])
6758 dnl Make sure flow sample action in datapath is behind set tunnel
6759 dnl action at egress point of tunnel port.
6760 AT_CHECK([tail -1 stdout], [0], [dnl
6761 Datapath actions: set(tunnel(tun_id=0x5,src=2.2.2.2,dst=1.1.1.1,tos=0x1,ttl=64,flags(df|key))),userspace(pid=0,flow_sample(probability=65535,collector_set_id=1,obs_domain_id=0,obs_point_id=0,output_port=1),tunnel_out_port=1),1,set(tunnel(tun_id=0x6,src=2.2.2.3,dst=1.1.1.2,tos=0x1,ttl=64,tp_dst=7471,flags(df|key))),userspace(pid=0,flow_sample(probability=65535,collector_set_id=1,obs_domain_id=0,obs_point_id=0,output_port=7471),tunnel_out_port=7471),7471
6762 ])
6763
6764 dnl Remove the flow which contains sample action.
6765 AT_CHECK([ovs-ofctl del-flows br0 in_port=3], [0], [ignore])
6766 AT_CHECK([ovs-vsctl destroy Flow_Sample_Collector_Set 1], [0], [ignore])
6767
6768 OVS_VSWITCHD_STOP
6769 AT_CLEANUP
6770
6771 AT_SETUP([ofproto-dpif - clone action])
6772 OVS_VSWITCHD_START
6773 add_of_ports br0 1 2 3 4
6774
6775 AT_DATA([flows.txt], [dnl
6776 in_port=1, ip, actions=clone(set_field:192.168.3.3->ip_src),clone(set_field:192.168.4.4->ip_dst,output:2),clone(mod_dl_src:80:81:81:81:81:81,set_field:192.168.5.5->ip_dst,output:3),output:4
6777 ])
6778 AT_CHECK([ovs-ofctl add-flows br0 flows.txt], [0], [ignore])
6779
6780 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),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)'], [0], [stdout])
6781
6782 AT_CHECK([tail -1 stdout], [0], [dnl
6783 Datapath actions: clone(set(ipv4(src=10.10.10.2,dst=192.168.4.4)),2),clone(set(eth(src=80:81:81:81:81:81)),set(ipv4(src=10.10.10.2,dst=192.168.5.5)),3),4
6784 ])
6785
6786 dnl Test flow xlate openflow clone action without using datapath clone action.
6787 AT_CHECK([ovs-appctl dpif/disable-dp-clone br0], [0],
6788 [Datapath clone action disabled for bridge br0
6789 ])
6790
6791 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),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)'], [0], [stdout])
6792
6793 AT_CHECK([tail -1 stdout], [0], [dnl
6794 Datapath actions: sample(sample=100.0%,actions(set(ipv4(src=10.10.10.2,dst=192.168.4.4)),2)),sample(sample=100.0%,actions(set(eth(src=80:81:81:81:81:81)),set(ipv4(src=10.10.10.2,dst=192.168.5.5)),3)),4
6795 ])
6796
6797 OVS_VSWITCHD_STOP
6798 AT_CLEANUP
6799
6800 dnl Flow based IPFIX statistics check
6801 AT_SETUP([ofproto-dpif - Flow IPFIX statistics check])
6802 OVS_VSWITCHD_START
6803 add_of_ports br0 1 2
6804
6805 dnl Negative test check.
6806 AT_CHECK([ovs-ofctl dump-ipfix-flow br0], [0], [dnl
6807 OFPT_ERROR (xid=0x2): NXST_NOT_CONFIGURED
6808 NXST_IPFIX_FLOW request (xid=0x2):
6809 ])
6810
6811 AT_CHECK([ovs-vsctl -- --id=@br0 get Bridge br0 \
6812 -- --id=@ipfix create IPFIX targets=\"127.0.0.1:4739\" \
6813 -- --id=@cs create Flow_Sample_Collector_Set id=1 bridge=@br0 ipfix=@ipfix],
6814 [0], [ignore])
6815
6816 AT_DATA([flows.txt], [dnl
6817 in_port=1, actions=sample(probability=65535,collector_set_id=1),output:2
6818 ])
6819
6820 AT_CHECK([ovs-ofctl add-flows br0 flows.txt], [0], [ignore])
6821
6822 dnl Send some packets that should be sampled.
6823 for i in `seq 1 20`; do
6824 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)'])
6825 done
6826
6827 dnl There are 4 extra IPFIX template packets.
6828 AT_CHECK([ovs-ofctl dump-ipfix-flow br0 | sed 's/tx pkts=[[0-9]]*/tx pkts=24/' | sed 's/tx errs=[[0-9]]*/tx errs=0/'], [0], [dnl
6829 NXST_IPFIX_FLOW reply (xid=0x2): 1 ids
6830 id 1: flows=20, current flows=0, sampled pkts=20, ipv4 ok=0, ipv6 ok=0, tx pkts=24
6831 pkts errs=20, ipv4 errs=20, ipv6 errs=0, tx errs=0
6832 ])
6833
6834 dnl Remove the flow which contains sample action.
6835 AT_CHECK([ovs-ofctl del-flows br0 in_port=1], [0], [ignore])
6836 AT_CHECK([ovs-vsctl destroy Flow_Sample_Collector_Set 1], [0], [ignore])
6837 AT_CHECK([ovs-appctl revalidator/purge])
6838
6839 dnl Send some more packets, to ensure that these are not sampled.
6840 for i in `seq 1 3`; do
6841 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)'])
6842 done
6843 AT_CHECK([ovs-ofctl dump-ipfix-flow br0], [0], [dnl
6844 OFPT_ERROR (xid=0x2): NXST_NOT_CONFIGURED
6845 NXST_IPFIX_FLOW request (xid=0x2):
6846 ])
6847
6848 OVS_VSWITCHD_STOP(["/sending to collector failed/d"])
6849 AT_CLEANUP
6850
6851 AT_SETUP([ofproto-dpif - flow stats])
6852 OVS_VSWITCHD_START
6853 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
6854 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
6855
6856 ovs-appctl time/stop
6857
6858 for i in `seq 1 10`; do
6859 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)'
6860 done
6861
6862 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
6863 AT_CHECK([ovs-appctl revalidator/purge], [0])
6864 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
6865 AT_CHECK([strip_xids < stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
6866 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
6867 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=540, idle_age=1, ip actions=NORMAL
6868 ])
6869 OVS_VSWITCHD_STOP
6870 AT_CLEANUP
6871
6872 AT_SETUP([ofproto-dpif - flow stats reset_counts])
6873 OVS_VSWITCHD_START
6874 flow="ip,actions=NORMAL"
6875
6876 ovs-appctl time/stop
6877
6878 AT_CHECK([ovs-ofctl add-flow br0 $flow])
6879
6880 warp_and_dump_NXM () {
6881 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
6882 AT_CHECK([ovs-appctl revalidator/purge], [0])
6883
6884 AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br0], [0], [stdout])
6885 if [[ $5 -gt 0 ]]; then
6886 expected=" cookie=0x0, duration=$1s, table=0, n_packets=$2, n_bytes=$3, idle_age=$4, hard_age=$5, ip actions=NORMAL"
6887 else
6888 expected=" cookie=0x0, duration=$1s, table=0, n_packets=$2, n_bytes=$3, idle_age=$4, ip actions=NORMAL"
6889 fi
6890 AT_CHECK_UNQUOTED([strip_xids < stdout | sed -n 's/duration=\([[0-9]]*\)\.*[[0-9]]*s/duration=\1s/p' | sort], [0], [dnl
6891 $expected
6892 ])
6893 }
6894
6895 warp_and_dump_OF () {
6896 AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
6897 AT_CHECK([ovs-appctl revalidator/purge], [0])
6898
6899 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 dump-flows br0], [0], [stdout])
6900 if [[ $1 -lt 13 -o "$5X" = "X" ]]; then
6901 expected=" cookie=0x0, duration=$2s, table=0, n_packets=$3, n_bytes=$4, ip actions=NORMAL"
6902 else
6903 expected=" cookie=0x0, duration=$2s, table=0, n_packets=$3, n_bytes=$4, $5 ip actions=NORMAL"
6904 fi
6905 AT_CHECK_UNQUOTED([strip_xids < stdout | sed -n 's/duration=\([[0-9]]*\)\.*[[0-9]]*s/duration=\1s/p' | sort], [0], [dnl
6906 $expected
6907 ])
6908 }
6909
6910 send_packet () {
6911 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)'
6912 }
6913
6914 # OpenFlow 1.0, implicit reset_counts
6915 send_packet
6916 warp_and_dump_NXM 1 1 54 1
6917 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow10 add-flow br0 $flow])
6918 # add-flow resets duration and counts,
6919 # but idle age is inherited from the old flow
6920 warp_and_dump_NXM 1 0 0 2
6921
6922 send_packet
6923 warp_and_dump_NXM 2 1 54 1
6924 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow10 mod-flows br0 $flow])
6925 # mod-flows resets hard_age, but not counts
6926 # but duration and idle_age is inherited from the old flow
6927 warp_and_dump_NXM 3 1 54 2 1
6928
6929 # OpenFlow 1.1, implicit reset_counts
6930 send_packet
6931 warp_and_dump_OF 11 4 2 108
6932 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow11 add-flow br0 $flow])
6933 # add-flow resets duration and counts,
6934 # but idle age is inherited from the old flow
6935 warp_and_dump_NXM 1 0 0 2
6936 warp_and_dump_OF 11 2 0 0
6937
6938 send_packet
6939 warp_and_dump_OF 11 3 1 54
6940 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow11 mod-flows br0 $flow])
6941 # mod-flows resets hard_age, but not counts
6942 # but duration and idle_age is inherited from the old flow
6943 warp_and_dump_NXM 4 1 54 2 1
6944 warp_and_dump_OF 11 5 1 54
6945
6946 # OpenFlow 1.2, explicit reset_counts
6947 send_packet
6948 warp_and_dump_OF 12 6 2 108
6949 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 add-flow br0 $flow])
6950 # add-flow without flags resets duration, but not counts,
6951 # idle age is inherited from the old flow
6952 warp_and_dump_NXM 1 2 108 2
6953 warp_and_dump_OF 12 2 2 108
6954
6955 send_packet
6956 warp_and_dump_OF 12 3 3 162
6957 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 mod-flows br0 $flow])
6958 # mod-flows without flags does not reset duration nor counts,
6959 # idle age is inherited from the old flow
6960 warp_and_dump_NXM 4 3 162 2 1
6961 warp_and_dump_OF 12 5 3 162
6962
6963 send_packet
6964 warp_and_dump_OF 12 6 4 216
6965 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 add-flow br0 reset_counts,$flow])
6966 # add-flow with reset_counts resets both duration and counts,
6967 # idle age is inherited from the old flow
6968 warp_and_dump_NXM 1 0 0 2
6969 warp_and_dump_OF 12 2 0 0
6970
6971 send_packet
6972 warp_and_dump_OF 12 3 1 54
6973 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow12 mod-flows br0 reset_counts,$flow])
6974 # mod-flows with reset_counts resets counts, but not duration,
6975 # idle age is inherited from the old flow
6976 warp_and_dump_NXM 4 0 0 2 1
6977 warp_and_dump_OF 12 5 0 0
6978
6979 # OpenFlow > 1.3, explicit reset_counts
6980 flow_mods_reset_counts () {
6981 # Reset to a known state
6982 AT_CHECK([ovs-ofctl add-flow br0 $flow])
6983
6984 send_packet
6985 warp_and_dump_OF $1 1 1 54 reset_counts
6986 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 $flow])
6987 # add-flow without flags resets duration, but not counts,
6988 # idle age is inherited from the old flow
6989 warp_and_dump_NXM 1 1 54 2
6990 warp_and_dump_OF $1 2 1 54
6991
6992 send_packet
6993 warp_and_dump_OF $1 3 2 108
6994 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 $flow])
6995 # mod-flows without flags does not reset duration nor counts,
6996 # idle age is inherited from the old flow
6997 warp_and_dump_NXM 4 2 108 2 1
6998 warp_and_dump_OF $1 5 2 108
6999
7000 send_packet
7001 warp_and_dump_OF $1 6 3 162
7002 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 reset_counts,$flow])
7003 # add-flow with reset_counts resets both duration and counts,
7004 # idle age is inherited from the old flow
7005 warp_and_dump_NXM 1 0 0 2
7006 warp_and_dump_OF $1 2 0 0 reset_counts
7007
7008 send_packet
7009 warp_and_dump_OF $1 3 1 54 reset_counts
7010 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 reset_counts,$flow])
7011 # mod-flows with reset_counts resets counts, but not duration,
7012 # idle age is inherited from the old flow
7013 warp_and_dump_NXM 4 0 0 2 1
7014 warp_and_dump_OF $1 5 0 0 reset_counts
7015
7016 # Modify flow having reset_counts flag without reset_counts
7017 send_packet
7018 warp_and_dump_OF $1 6 1 54 reset_counts
7019 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 $flow])
7020 warp_and_dump_NXM 7 1 54 2 1
7021 warp_and_dump_OF $1 8 1 54 reset_counts
7022
7023 # Add flow having reset_counts flag without reset_counts
7024 send_packet
7025 warp_and_dump_OF $1 9 2 108 reset_counts
7026 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 add-flow br0 $flow])
7027 warp_and_dump_NXM 1 2 108 2
7028 warp_and_dump_OF $1 2 2 108
7029
7030 # Modify flow w/o reset_counts flag with a flow_mod having reset_counts
7031 send_packet
7032 warp_and_dump_OF $1 3 3 162
7033 AT_CHECK_UNQUOTED([ovs-ofctl -O OpenFlow$1 mod-flows br0 reset_counts,$flow])
7034 warp_and_dump_NXM 4 0 0 2 1
7035 warp_and_dump_OF $1 5 0 0
7036 }
7037
7038 # OpenFlow versions >= 1.3 should behave the same way
7039 flow_mods_reset_counts 13
7040 flow_mods_reset_counts 14
7041 flow_mods_reset_counts 15
7042
7043 OVS_VSWITCHD_STOP
7044 AT_CLEANUP
7045
7046 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
7047 OVS_VSWITCHD_START
7048 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
7049 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
7050
7051 ovs-appctl time/stop
7052
7053 for i in `seq 1 10`; do
7054 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)'
7055 done
7056
7057 ovs-appctl time/warp 100
7058 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
7059 ovs-appctl time/warp 1000
7060
7061 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
7062 AT_CHECK([strip_xids < stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
7063 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
7064 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=540, idle_age=1, ip actions=NORMAL
7065 ])
7066 OVS_VSWITCHD_STOP
7067 AT_CLEANUP
7068
7069 AT_SETUP([ofproto-dpif - idle_age and hard_age increase over time])
7070 OVS_VSWITCHD_START
7071
7072 # get_ages DURATION HARD IDLE
7073 #
7074 # Fetch the flow duration, hard age, and idle age into the variables
7075 # whose names are given as arguments. Rounds DURATION down to the
7076 # nearest integer. If hard_age doesn't appear in the output, sets
7077 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
7078 # to 0.
7079 get_ages () {
7080 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
7081
7082 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
7083 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
7084 AS_VAR_COPY([$1], [duration])
7085
7086 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
7087 if test X"$hard" = X; then
7088 hard=none
7089 else
7090 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
7091 fi
7092 AS_VAR_COPY([$2], [hard])
7093
7094 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
7095 if test X"$idle" = X; then
7096 idle=0
7097 else
7098 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
7099 fi
7100 AS_VAR_COPY([$3], [idle])
7101 }
7102
7103 # Add a flow and get its initial hard and idle age.
7104 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
7105 get_ages duration1 hard1 idle1
7106
7107 ovs-appctl time/stop
7108 # Warp time forward by 10 seconds, then modify the flow's actions.
7109 ovs-appctl time/warp 10000
7110 get_ages duration2 hard2 idle2
7111 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
7112
7113 # Warp time forward by 10 seconds.
7114 ovs-appctl time/warp 10000
7115 get_ages duration3 hard3 idle3
7116
7117 # Warp time forward 10 more seconds, then pass some packets through the flow,
7118 # then warp forward a few more times because idle times are only updated
7119 # occasionally.
7120 ovs-appctl time/warp 10000
7121 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)'
7122 ovs-appctl time/warp 3000 1000
7123 sleep 1
7124 get_ages duration4 hard4 idle4
7125
7126 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
7127 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
7128 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
7129
7130 # Duration should increase steadily over time.
7131 AT_CHECK([test $duration1 -lt $duration2])
7132 AT_CHECK([test $duration2 -lt $duration3])
7133 AT_CHECK([test $duration3 -lt $duration4])
7134
7135 # Hard age should be "none" initially because it's the same as flow_duration,
7136 # then it should increase.
7137 AT_CHECK([test $hard1 = none])
7138 AT_CHECK([test $hard2 = none])
7139 AT_CHECK([test $hard3 != none])
7140 AT_CHECK([test $hard4 != none])
7141 AT_CHECK([test $hard3 -lt $hard4])
7142
7143 # Idle age should increase from 1 to 2 to 3, then decrease.
7144 AT_CHECK([test $idle1 -lt $idle2])
7145 AT_CHECK([test $idle2 -lt $idle3])
7146 AT_CHECK([test $idle3 -gt $idle4])
7147
7148 # Check some invariant relationships.
7149 AT_CHECK([test $duration1 = $idle1])
7150 AT_CHECK([test $duration2 = $idle2])
7151 AT_CHECK([test $duration3 = $idle3])
7152 AT_CHECK([test $idle3 -gt $hard3])
7153 AT_CHECK([test $idle4 -lt $hard4])
7154 AT_CHECK([test $hard4 -lt $duration4])
7155
7156 OVS_VSWITCHD_STOP
7157 AT_CLEANUP
7158
7159 AT_SETUP([ofproto-dpif - fin_timeout])
7160 OVS_VSWITCHD_START
7161 ovs-appctl time/stop
7162 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
7163 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
7164 [NXST_FLOW reply:
7165 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
7166 ])
7167
7168 # Check that a TCP SYN packet does not change the timeout. (Because
7169 # flow stats updates are mainly what implements the fin_timeout
7170 # feature, we warp forward a couple of times to ensure that flow stats
7171 # run before re-checking the flow table.)
7172 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
7173 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
7174 warped
7175 ])
7176 AT_CHECK([ovs-appctl revalidator/purge], [0])
7177 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
7178 [NXST_FLOW reply:
7179 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
7180 ])
7181 # Check that a TCP FIN packet does change the timeout.
7182 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
7183 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
7184 warped
7185 ])
7186 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
7187 [NXST_FLOW reply:
7188 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
7189 ])
7190 OVS_VSWITCHD_STOP
7191 AT_CLEANUP
7192
7193 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
7194 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
7195 add_of_ports br0 1 2
7196 add_of_ports br1 3
7197
7198 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
7199 dummy@br0
7200 dummy@br1
7201 ])
7202 OVS_VSWITCHD_STOP
7203 AT_CLEANUP
7204
7205 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
7206 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy], [], [],
7207 [--dummy-numa="0,0,0,0,1,1,1,1"])
7208 add_pmd_of_ports br0 1 2
7209 add_of_ports br1 3
7210
7211 AT_CHECK([ovs-appctl dpif/show | sed 's/\(dummy-pmd: \).*)/\1<cleared>)/'], [0], [dnl
7212 dummy@ovs-dummy: hit:0 missed:0
7213 br0:
7214 br0 65534/100: (dummy-internal)
7215 p1 1/1: (dummy-pmd: <cleared>)
7216 p2 2/2: (dummy-pmd: <cleared>)
7217 br1:
7218 br1 65534/101: (dummy-internal)
7219 p3 3/3: (dummy)
7220 ])
7221 OVS_VSWITCHD_STOP
7222 AT_CLEANUP
7223
7224 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
7225 # bump max-idle to avoid the flows being reclaimed behind us
7226 OVS_VSWITCHD_START([add-br br1 -- \
7227 set bridge br1 datapath-type=dummy fail-mode=secure -- \
7228 set Open_vSwitch . other_config:max-idle=10000], [], [],
7229 [--dummy-numa="0,0,0,0,1,1,1,1"])
7230 add_of_ports br0 1
7231 add_pmd_of_ports br0 2
7232 add_of_ports br1 3
7233
7234 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)'])
7235 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)'])
7236 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)'])
7237 ovs-appctl revalidator/wait
7238 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
7239 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
7240 recirc_id(0),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
7241 ])
7242
7243 AT_CHECK([ovs-appctl dpif/dump-flows br1 | strip_ufid | strip_used | sort], [0], [dnl
7244 recirc_id(0),in_port(3),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
7245 ])
7246
7247 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | strip_ufid | strip_used | sort], [0], [dnl
7248 skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(p1),packet_type(ns=0,id=0),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
7249 skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(p2),packet_type(ns=0,id=0),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
7250 ])
7251
7252 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | strip_ufid | strip_used | sort], [0], [dnl
7253 skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(p3),packet_type(ns=0,id=0),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
7254 ])
7255
7256 OVS_VSWITCHD_STOP
7257 AT_CLEANUP
7258
7259 m4_define([OFPROTO_DPIF_GET_FLOW],
7260 [AT_SETUP([ofproto-dpif - ovs-appctl dpif/get-flow$1])
7261
7262 OVS_VSWITCHD_START([add-br br1 -- \
7263 set bridge br1 datapath-type=dummy fail-mode=secure -- \
7264 set Open_vSwitch . other_config:max-idle=10000], [], [],
7265 [m4_if([$1], [], [], [--dummy-numa="0,0,0,0,1,1,1,1"])])
7266
7267 func=`echo -n "$1_" | cut -c 4-`
7268 add_${func}of_ports br0 1 2
7269
7270 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)'])
7271 ovs-appctl revalidator/wait
7272 AT_CHECK([ovs-appctl dpif/dump-flows -m br0], [0], [stdout])
7273
7274 UFID=`sed -n 's/\(ufid:[[-0-9a-fA-F]]*\).*/\1/p' stdout`
7275 AT_CHECK([ovs-appctl dpctl/get-flow $UFID], [0], [dnl
7276 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
7277 ])
7278
7279 OVS_VSWITCHD_STOP
7280 AT_CLEANUP])
7281
7282 OFPROTO_DPIF_GET_FLOW([])
7283 OFPROTO_DPIF_GET_FLOW([ - pmd])
7284
7285 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
7286 OVS_VSWITCHD_START([dnl
7287 add-port br0 p1 -- set Interface p1 type=dummy
7288 ])
7289 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7290 on_exit 'kill `cat ovs-ofctl.pid`'
7291
7292 AT_CAPTURE_FILE([ofctl_monitor.log])
7293 AT_DATA([flows.txt], [dnl
7294 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
7295 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8847,controller
7296 ])
7297 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7298
7299 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
7300 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
7301 dnl
7302 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
7303 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)
7304 dnl (label 20, exp 0, [S], ttl 32)
7305 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
7306 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
7307
7308 for dl_src in 00 01; do
7309 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"])
7310 done
7311 sleep 1 # wait for the datapath flow installed
7312 AT_CHECK_UNQUOTED([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
7313 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=60:66:66:66:66:00),eth_type(0x8847),mpls(label=20,tc=0,ttl=32,bos=0,label=20,tc=0,ttl=32,bos=1), actions:userspace(pid=0,slow_path(controller))
7314 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=60:66:66:66:66:01),eth_type(0x8847),mpls(label=20/0x0,tc=0/0,ttl=32/0x0,bos=0/1,label=20/0xfffff,tc=0/7,ttl=32/0xff,bos=1/1), actions:userspace(pid=0,slow_path(controller))
7315 ])
7316
7317 OVS_VSWITCHD_STOP
7318 AT_CLEANUP
7319
7320
7321 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
7322 OVS_VSWITCHD_START([dnl
7323 add-port br0 p1 -- set Interface p1 type=dummy
7324 ])
7325 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7326 on_exit 'kill `cat ovs-ofctl.pid`'
7327
7328 AT_CAPTURE_FILE([ofctl_monitor.log])
7329 AT_DATA([flows.txt], [dnl
7330 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
7331 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8847,controller
7332 ])
7333 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7334
7335 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
7336 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
7337 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
7338 dnl
7339 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
7340 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)
7341 dnl (label 20, exp 0, ttl 32)
7342 dnl (label 20, exp 0, ttl 32)
7343 dnl (label 20, exp 0, [S], ttl 32)
7344 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
7345 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
7346
7347 for dl_src in 00 01; do
7348 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"])
7349 done
7350 sleep 1 # wait for the datapath flow installed
7351 AT_CHECK_UNQUOTED([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
7352 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=60:66:66:66:66:00),eth_type(0x8847),mpls(label=20,tc=0,ttl=32,bos=0,label=20,tc=0,ttl=32,bos=1), actions:userspace(pid=0,slow_path(controller))
7353 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=60:66:66:66:66:01),eth_type(0x8847),mpls(label=20/0x0,tc=0/0,ttl=32/0x0,bos=0/1,label=20/0xfffff,tc=0/7,ttl=32/0xff,bos=1/1), actions:userspace(pid=0,slow_path(controller))
7354 ])
7355
7356 OVS_VSWITCHD_STOP
7357 AT_CLEANUP
7358
7359 AT_SETUP([ofproto-dpif - patch ports])
7360 OVS_VSWITCHD_START([add-br br1 \
7361 -- set bridge br1 datapath-type=dummy fail-mode=secure \
7362 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
7363 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
7364
7365 add_of_ports br0 2
7366 add_of_ports br1 3
7367
7368 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
7369 ], [])
7370 AT_CHECK([ovs-appctl time/stop])
7371 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7372
7373 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
7374 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
7375
7376 for i in $(seq 1 10); do
7377 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)'
7378 if [[ $i -eq 1 ]]; then
7379 sleep 1
7380 fi
7381 done
7382
7383 for i in $(seq 1 5); do
7384 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)'
7385 if [[ $i -eq 1 ]]; then
7386 sleep 1
7387 fi
7388 done
7389
7390 AT_CHECK([ovs-appctl time/warp 500], [0],
7391 [warped
7392 ])
7393 sleep 1 # wait for log writer
7394
7395 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
7396 dummy@ovs-dummy: hit:13 missed:2
7397 br0:
7398 br0 65534/100: (dummy-internal)
7399 p2 2/2: (dummy)
7400 pbr0 1/none: (patch: peer=pbr1)
7401 br1:
7402 br1 65534/101: (dummy-internal)
7403 p3 3/3: (dummy)
7404 pbr1 1/none: (patch: peer=pbr0)
7405 ])
7406
7407 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
7408 recirc_id(0),in_port(100),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:101,3,2
7409 recirc_id(0),in_port(101),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:100,2,3
7410 ])
7411
7412 AT_CHECK([grep -e 'in_port(100).*packets:9' ovs-vswitchd.log | strip_ufid | filter_flow_dump], [0], [dnl
7413 skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(100),packet_type(ns=0,id=0),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:378, used:0.0s, actions:101,3,2
7414 ])
7415 AT_CHECK([grep -e 'in_port(101).*packets:4' ovs-vswitchd.log | strip_ufid | filter_flow_dump], [0], [dnl
7416 skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(101),packet_type(ns=0,id=0),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:168, used:0.0s, actions:100,2,3
7417 ])
7418
7419 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
7420 OFPST_PORT reply (xid=0x4): 1 ports
7421 port 1: rx pkts=5, bytes=210, drop=?, errs=?, frame=?, over=?, crc=?
7422 tx pkts=10, bytes=420, drop=?, errs=?, coll=?
7423 ])
7424
7425 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
7426 OFPST_PORT reply (xid=0x4): 1 ports
7427 port 1: rx pkts=10, bytes=420, drop=?, errs=?, frame=?, over=?, crc=?
7428 tx pkts=5, bytes=210, drop=?, errs=?, coll=?
7429 ])
7430
7431 OVS_VSWITCHD_STOP
7432 AT_CLEANUP
7433
7434 AT_SETUP([ofproto-dpif - patch ports - stack])
7435 OVS_VSWITCHD_START([add-br br1 \
7436 -- set bridge br1 datapath-type=dummy fail-mode=secure \
7437 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
7438 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
7439
7440 add_of_ports br0 2
7441 add_of_ports br1 3
7442
7443 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
7444 ], [])
7445 AT_CHECK([ovs-appctl time/stop])
7446 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7447
7448 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"])
7449 # Try to pop from empty stack, and push and leave data to stack.
7450 AT_CHECK([ovs-ofctl add-flow br1 "ip actions=pop:OXM_OF_IPV4_DST[[0..31]],push:NXM_NX_REG1[[0..31]],LOCAL"])
7451
7452 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)'
7453
7454 AT_CHECK([ovs-appctl time/warp 500], [0],
7455 [warped
7456 ])
7457
7458 OVS_WAIT_UNTIL([test `grep flow_add ovs-vswitchd.log | wc -l` -ge 1])
7459
7460 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
7461 dummy@ovs-dummy: hit:0 missed:1
7462 br0:
7463 br0 65534/100: (dummy-internal)
7464 p2 2/2: (dummy)
7465 pbr0 1/none: (patch: peer=pbr1)
7466 br1:
7467 br1 65534/101: (dummy-internal)
7468 p3 3/3: (dummy)
7469 pbr1 1/none: (patch: peer=pbr0)
7470 ])
7471
7472 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
7473 recirc_id(0),in_port(100),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=192.168.0.1,frag=no), actions:101,set(ipv4(src=255.255.255.254)),2
7474 ])
7475
7476 AT_CHECK([grep -e '|ofproto_dpif_xlate|WARN|' ovs-vswitchd.log | sed "s/^.*|WARN|//"], [0], [dnl
7477 stack underflow while processing icmp,in_port=LOCAL,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,icmp_type=8,icmp_code=0 on bridge br1
7478 ])
7479
7480 OVS_VSWITCHD_STOP(["/stack underflow/d"])
7481 AT_CLEANUP
7482
7483 AT_SETUP([ofproto-dpif - port duration])
7484 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
7485 add_of_ports br0 1 2
7486
7487 ovs-appctl time/stop
7488 ovs-appctl time/warp 10000
7489
7490 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
7491 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
7492 [dnl
7493 duration=?s
7494 duration=?s
7495 duration=?s
7496 ])
7497 OVS_VSWITCHD_STOP
7498 AT_CLEANUP
7499
7500 dnl ----------------------------------------------------------------------
7501 AT_BANNER([ofproto-dpif -- megaflows])
7502
7503 AT_SETUP([ofproto-dpif megaflow - port classification])
7504 OVS_VSWITCHD_START
7505 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7506 add_of_ports br0 1 2
7507 AT_DATA([flows.txt], [dnl
7508 table=0 in_port=1 actions=output(2)
7509 ])
7510 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7511 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)'])
7512 sleep 1
7513 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)'])
7514 sleep 1
7515 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7516 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions: <del>
7517 ])
7518 OVS_VSWITCHD_STOP
7519 AT_CLEANUP
7520
7521 AT_SETUP([ofproto-dpif megaflow - L2 classification])
7522 OVS_VSWITCHD_START
7523 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7524 add_of_ports br0 1 2
7525 AT_DATA([flows.txt], [dnl
7526 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
7527 ])
7528 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7529 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)'])
7530 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)'])
7531 sleep 1
7532 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7533 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no), actions: <del>
7534 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no), actions: <del>
7535 ])
7536 OVS_VSWITCHD_STOP
7537 AT_CLEANUP
7538
7539 AT_SETUP([ofproto-dpif megaflow - L3 classification])
7540 OVS_VSWITCHD_START
7541 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7542 add_of_ports br0 1 2
7543 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], [])
7544 AT_DATA([flows.txt], [dnl
7545 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
7546 ])
7547 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7548 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)'])
7549 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)'])
7550 sleep 1
7551 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7552 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,frag=no), actions: <del>
7553 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.4,proto=1,frag=no), actions: <del>
7554 ])
7555 OVS_VSWITCHD_STOP
7556 AT_CLEANUP
7557
7558 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
7559 OVS_VSWITCHD_START
7560 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7561 add_of_ports br0 1 2
7562 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], [])
7563 AT_DATA([flows.txt], [dnl
7564 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
7565 ])
7566 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7567 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)'])
7568 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)'])
7569 sleep 1
7570 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7571 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5,frag=no), actions: <del>
7572 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,frag=no), actions: <del>
7573 ])
7574 OVS_VSWITCHD_STOP
7575 AT_CLEANUP
7576
7577 AT_SETUP([ofproto-dpif megaflow - L4 classification])
7578 OVS_VSWITCHD_START
7579 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7580 add_of_ports br0 1 2
7581 AT_DATA([flows.txt], [dnl
7582 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
7583 ])
7584 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7585 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)'])
7586 sleep 1
7587 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)'])
7588 sleep 1
7589 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7590 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=1,frag=no),icmp(type=8), actions: <del>
7591 ])
7592 OVS_VSWITCHD_STOP
7593 AT_CLEANUP
7594
7595 m4_define([OFPROTO_DPIF_MEGAFLOW_NORMAL],
7596 [AT_SETUP([ofproto-dpif megaflow - normal$1])
7597 OVS_VSWITCHD_START([], [], [], [m4_if([$1], [], [], [--dummy-numa="0,0,0,0,1,1,1,1"])])
7598 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7599 func=`echo -n "$1_" | cut -c 4-`
7600 add_${func}of_ports br0 1 2
7601 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
7602 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)'])
7603 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)'])
7604 sleep 1
7605 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7606 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
7607 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
7608 ])
7609 OVS_VSWITCHD_STOP
7610 AT_CLEANUP])
7611
7612 OFPROTO_DPIF_MEGAFLOW_NORMAL([])
7613 OFPROTO_DPIF_MEGAFLOW_NORMAL([ - pmd])
7614
7615 AT_SETUP([ofproto-dpif megaflow - mpls])
7616 OVS_VSWITCHD_START
7617 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7618 add_of_ports br0 1 2
7619 AT_DATA([flows.txt], [dnl
7620 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
7621 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
7622 ])
7623 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7624 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)'])
7625 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)'])
7626 sleep 1
7627 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout_keep_actions], [0], [dnl
7628 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), actions:push_mpls(label=11,tc=3,ttl=64,bos=0,eth_type=0x8847),2
7629 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x8847),mpls(label=11/0x0,tc=3/0,ttl=64/0x0,bos=1/1), actions:pop_mpls(eth_type=0x800),2
7630 ])
7631 OVS_VSWITCHD_STOP
7632 AT_CLEANUP
7633
7634 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR)
7635 m4_define([CHECK_MEGAFLOW_NETFLOW],
7636 [OVS_VSWITCHD_START
7637 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7638 add_of_ports br0 1 2
7639
7640 dnl NetFlow configuration disables wildcarding relevant fields
7641 on_exit 'kill `cat test-netflow.pid`'
7642 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
7643 AT_CAPTURE_FILE([netflow.log])
7644 PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
7645 ovs-vsctl \
7646 set Bridge br0 netflow=@nf -- \
7647 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
7648 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
7649
7650 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
7651 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)'])
7652 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)'])
7653 sleep 1
7654 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7655 recirc_id(0),in_port(1),packet_type(ns=0,id=0),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/0xfc,frag=no),icmp(type=8,code=0), actions: <del>
7656 recirc_id(0),in_port(1),packet_type(ns=0,id=0),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/0xfc,frag=no),icmp(type=8,code=0), actions: <del>
7657 ])
7658 OVS_APP_EXIT_AND_WAIT([test-netflow])
7659 OVS_VSWITCHD_STOP])
7660
7661 AT_SETUP([ofproto-dpif megaflow - netflow - IPv4 collector])
7662 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
7663 AT_CLEANUP
7664
7665 AT_SETUP([ofproto-dpif megaflow - netflow - IPv6 collector])
7666 AT_SKIP_IF([test $HAVE_IPV6 = no])
7667 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
7668 AT_CLEANUP
7669
7670 m4_define([OFPROTO_DPIF_MEGAFLOW_NORMAL_ACB_BOND],
7671 [AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding - $1])
7672 OVS_VSWITCHD_START(
7673 [add-port br0 p1 -- set Interface p1 type=$1 ofport_request=1 -- \
7674 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
7675 set interface p2 type=$1 ofport_request=2 -- \
7676 set interface p3 type=$1 ofport_request=3], [], [],
7677 [m4_if([$1], [dummy-pmd], [--dummy-numa="0,0,0,0,1,1,1,1"], [])])
7678 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
7679 ])
7680 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7681
7682 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
7683 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)'])
7684 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)'])
7685 sleep 1
7686 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7687 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
7688 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
7689 ])
7690 OVS_VSWITCHD_STOP
7691 AT_CLEANUP])
7692
7693 OFPROTO_DPIF_MEGAFLOW_NORMAL_ACB_BOND([dummy])
7694 OFPROTO_DPIF_MEGAFLOW_NORMAL_ACB_BOND([dummy-pmd])
7695
7696 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
7697 OVS_VSWITCHD_START(
7698 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
7699 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
7700 set interface p2 type=dummy ofport_request=2 -- \
7701 set interface p3 type=dummy ofport_request=3])
7702 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
7703 ])
7704 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7705
7706 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
7707 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)'])
7708 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)'])
7709 sleep 1
7710 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7711 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
7712 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
7713 ])
7714 OVS_VSWITCHD_STOP
7715 AT_CLEANUP
7716
7717 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
7718 # Create bond0 on br0 with interfaces p0 and p1
7719 # and bond1 on br1 with interfaces p2 and p3
7720 # with p0 patched to p2 and p1 patched to p3.
7721 OVS_VSWITCHD_START(
7722 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
7723 other-config:lacp-time=fast \
7724 other-config:bond-rebalance-interval=0 -- \
7725 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
7726 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
7727 add-br br1 -- \
7728 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
7729 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
7730 fail-mode=secure -- \
7731 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
7732 other-config:lacp-time=fast \
7733 other-config:bond-rebalance-interval=0 -- \
7734 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
7735 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
7736
7737 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
7738 ])
7739 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7740 add_of_ports br0 7
7741 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
7742 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
7743 ovs-appctl time/stop
7744 ovs-appctl time/warp 5000
7745 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)'])
7746 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)'])
7747 sleep 1
7748 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7749 recirc_id(0),in_port(7),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
7750 recirc_id(0),in_port(7),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
7751 ])
7752 OVS_VSWITCHD_STOP
7753 AT_CLEANUP
7754
7755 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
7756 OVS_VSWITCHD_START
7757 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7758 add_of_ports br0 1 2
7759 AT_DATA([flows.txt], [dnl
7760 table=0 in_port=1,ip actions=resubmit(90)
7761 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
7762 ])
7763 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7764 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)'])
7765 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)'])
7766 sleep 1
7767 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7768 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no), actions: <del>
7769 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no), actions: <del>
7770 ])
7771 OVS_VSWITCHD_STOP
7772 AT_CLEANUP
7773
7774 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
7775 OVS_VSWITCHD_START
7776 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7777 add_of_ports br0 1 2
7778 AT_DATA([flows.txt], [dnl
7779 table=0 in_port=1,ip actions=resubmit(,1)
7780 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
7781 ])
7782 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7783 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)'])
7784 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=
7785 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
7786 sleep 1
7787 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7788 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no), actions: <del>
7789 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no), actions: <del>
7790 ])
7791 OVS_VSWITCHD_STOP
7792 AT_CLEANUP
7793
7794 AT_SETUP([ofproto-dpif megaflow - goto_table action])
7795 OVS_VSWITCHD_START
7796 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7797 add_of_ports br0 1 2
7798 AT_DATA([flows.txt], [dnl
7799 table=0 in_port=1,ip actions=goto_table(1)
7800 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
7801 ])
7802 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
7803 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)'])
7804 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)'])
7805 sleep 1
7806 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7807 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no), actions: <del>
7808 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no), actions: <del>
7809 ])
7810 OVS_VSWITCHD_STOP
7811 AT_CLEANUP
7812
7813 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
7814 AT_KEYWORDS([mirror mirrors mirroring])
7815 OVS_VSWITCHD_START
7816 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7817 add_of_ports br0 1 2 3
7818 ovs-vsctl \
7819 set Bridge br0 mirrors=@m --\
7820 --id=@p3 get Port p3 --\
7821 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
7822
7823 AT_DATA([flows.txt], [dnl
7824 in_port=1 actions=output:2
7825 ])
7826 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7827 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)'])
7828 sleep 1
7829 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)'])
7830 sleep 1
7831 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7832 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions: <del>
7833 ])
7834 OVS_VSWITCHD_STOP
7835 AT_CLEANUP
7836
7837 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
7838 OVS_VSWITCHD_START
7839 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7840 add_of_ports br0 1 2 3
7841 ovs-vsctl \
7842 set Bridge br0 mirrors=@m --\
7843 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
7844 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
7845
7846 AT_DATA([flows.txt], [dnl
7847 in_port=1 actions=output:2
7848 ])
7849 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7850 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))'])
7851 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)'])
7852 sleep 1
7853 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7854 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions: <del>
7855 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x8100),vlan(vid=11,pcp=7/0x0),encap(eth_type(0x0800),ipv4(frag=no)), actions: <del>
7856 ])
7857 OVS_VSWITCHD_STOP
7858 AT_CLEANUP
7859
7860 AT_SETUP([ofproto-dpif megaflow - move action])
7861 OVS_VSWITCHD_START
7862 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7863 add_of_ports br0 1 2
7864 AT_DATA([flows.txt], [dnl
7865 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
7866 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
7867 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
7868 ])
7869 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7870 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)'])
7871 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)'])
7872 sleep 1
7873 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7874 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.2,frag=no), actions: <del>
7875 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.4,frag=no), actions: <del>
7876 ])
7877 OVS_VSWITCHD_STOP
7878 AT_CLEANUP
7879
7880 AT_SETUP([ofproto-dpif megaflow - push action])
7881 OVS_VSWITCHD_START
7882 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7883 add_of_ports br0 1 2
7884 AT_DATA([flows.txt], [dnl
7885 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
7886 ])
7887 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7888 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)'])
7889 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)'])
7890 sleep 1
7891 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7892 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.2,frag=no), actions: <del>
7893 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.4,frag=no), actions: <del>
7894 ])
7895 OVS_VSWITCHD_STOP
7896 AT_CLEANUP
7897
7898 AT_SETUP([ofproto-dpif megaflow - learning])
7899 OVS_VSWITCHD_START
7900 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7901 add_of_ports br0 1 2
7902 AT_DATA([flows.txt], [dnl
7903 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
7904 ])
7905 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7906 ovs-appctl time/stop
7907 # We send each packet twice because the first packet in each flow causes the
7908 # flow table to change and thus revalidations, which (depending on timing)
7909 # can keep a megaflow from being installed. The revalidations are done by
7910 # the second iteration, allowing the flows to be installed.
7911 for i in 1 2; do
7912 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)'])
7913 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)'])
7914 ovs-appctl time/warp 100
7915 done
7916 sleep 1
7917 dnl The original flow is missing due to a revalidation.
7918 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7919 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no), actions: <del>
7920 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no), actions: <del>
7921 ])
7922 OVS_VSWITCHD_STOP
7923 AT_CLEANUP
7924
7925 AT_SETUP([ofproto-dpif megaflow - tunnels])
7926 OVS_VSWITCHD_START(
7927 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
7928 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7929 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
7930 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
7931 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
7932 ofport_request=3])
7933 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
7934 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
7935 ofport_request=4 options:key=flow])
7936 AT_DATA([flows.txt], [dnl
7937 in_port=1,actions=output(2)
7938 in_port=3,actions=output(4)
7939 ])
7940 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7941 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
7942 dnl will cause the packet to be dropped.
7943 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)'])
7944 sleep 1
7945 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)'])
7946 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)'])
7947 sleep 1
7948 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)'])
7949 sleep 1
7950 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7951 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(tos=0xfd/0x3,frag=no), actions: <del>
7952 recirc_id(0),in_port(3),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(tos=0x1,ttl=64,frag=no), actions: <del>
7953 recirc_id(0),in_port(3),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(tos=0xfd,ttl=128,frag=no), actions: <del>
7954 ])
7955 OVS_VSWITCHD_STOP
7956 AT_CLEANUP
7957
7958 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
7959 OVS_VSWITCHD_START
7960 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7961 add_of_ports br0 1 2
7962 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], [])
7963 AT_DATA([flows.txt], [dnl
7964 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
7965 ])
7966 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7967 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)'])
7968 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)'])
7969 sleep 1
7970 AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
7971 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,frag=no), actions: <del>
7972 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(src=10.0.0.4,proto=1,ttl=64,frag=no), actions: <del>
7973 ])
7974 OVS_VSWITCHD_STOP
7975 AT_CLEANUP
7976
7977 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
7978 OVS_VSWITCHD_START
7979 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7980 add_of_ports br0 1 2
7981 AT_DATA([flows.txt], [dnl
7982 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
7983 ])
7984 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
7985 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)'])
7986 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)'])
7987 sleep 1
7988 dnl The first packet is essentially a no-op, as the new destination MAC is the
7989 dnl same as the original. The second entry actually updates the destination
7990 dnl MAC.
7991 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
7992 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions:2
7993 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions:set(eth(dst=50:54:00:00:00:0a)),2
7994 ])
7995 OVS_VSWITCHD_STOP
7996 AT_CLEANUP
7997
7998 m4_define([OFPROTO_DPIF_MEGAFLOW_DISABLED],
7999 [AT_SETUP([ofproto-dpif megaflow - disabled$1])
8000 OVS_VSWITCHD_START([], [], [], [m4_if([$1], [], [], [--dummy-numa="0,0,0,0,1,1,1,1"])])
8001 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8002 func=`echo -n "$1_" | cut -c 4-`
8003 add_${func}of_ports br0 1 2
8004 AT_DATA([flows.txt], [dnl
8005 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
8006 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
8007 ])
8008 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
8009 ], [])
8010 AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
8011 ], [])
8012 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
8013 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
8014 for i in 1 2 3 4; do
8015 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)'])
8016 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)'])
8017 if [[ $i -eq 1 ]]; then
8018 sleep 1
8019 fi
8020 done
8021 sleep 1
8022 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
8023 skb_priority(0),skb_mark(0),ct_state(-new-est-rel-rpl-inv-trk-snat-dnat),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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), actions:2
8024 skb_priority(0),skb_mark(0),ct_state(-new-est-rel-rpl-inv-trk-snat-dnat),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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), actions:drop
8025 ])
8026 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_dump | grep 'packets:3'], [0], [dnl
8027 skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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:126, used:0.0s, actions:2
8028 skb_priority(0),skb_mark(0),ct_state(0/0xff),ct_zone(0),ct_mark(0),ct_label(0),recirc_id(0),dp_hash(0),in_port(1),packet_type(ns=0,id=0),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:126, used:0.0s, actions:drop
8029 ])
8030 OVS_VSWITCHD_STOP
8031 AT_CLEANUP])
8032
8033 OFPROTO_DPIF_MEGAFLOW_DISABLED([])
8034 OFPROTO_DPIF_MEGAFLOW_DISABLED([ - pmd])
8035
8036 AT_SETUP([ofproto-dpif - datapath port number change])
8037 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
8038 add_of_ports br0 1
8039
8040 # Trace a flow that should output to p1.
8041 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
8042 [0], [stdout])
8043 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
8044 ])
8045
8046 # Change p1's port number to 5.
8047 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
8048
8049 # Trace a flow that should output to p1 in its new location.
8050 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
8051 [0], [stdout])
8052 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
8053 ])
8054 OVS_VSWITCHD_STOP
8055 AT_CLEANUP
8056
8057 # Tests the bundling with various bfd and cfm configurations.
8058 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
8059 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
8060 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
8061 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
8062 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
8063 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
8064 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
8065 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
8066 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
8067 set Interface p0 cfm_mpid=1 -- \
8068 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
8069
8070 ovs-appctl time/stop
8071 # advance the clock to stablize everything.
8072 ovs-appctl time/warp 5000 100
8073 # cfm/show should show 'recv' fault.
8074 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
8075 fault: recv
8076 ])
8077 # bfd/show should show 'up'.
8078 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
8079 Local Session State: up
8080 Remote Session State: up
8081 Local Session State: up
8082 Remote Session State: up
8083 ])
8084 # bond/show should show 'may-enable: true' for all slaves.
8085 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
8086 may_enable: true
8087 may_enable: true
8088 may_enable: true
8089 may_enable: true
8090 ])
8091
8092 # now disable the bfd on p1.
8093 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
8094 # advance the clock to stablize everything.
8095 ovs-appctl time/warp 5000 100
8096 # cfm/show should show 'recv' fault.
8097 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
8098 fault: recv
8099 ])
8100 # bfd/show should show 'down'.
8101 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
8102 Local Session State: down
8103 Remote Session State: down
8104 ])
8105 # bond/show should show 'may-enable: false' for p0.
8106 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
8107 may_enable: false
8108 may_enable: true
8109 ])
8110
8111 # now enable the bfd on p1 and disable bfd on p0.
8112 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
8113 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
8114 # advance the clock to stablize everything.
8115 ovs-appctl time/warp 5000 100
8116 # cfm/show should show 'recv' fault.
8117 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
8118 fault: recv
8119 ])
8120 # bfd/show should show 'down'.
8121 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
8122 Local Session State: down
8123 Remote Session State: down
8124 ])
8125 # bond/show should show 'may-enable: false' for p0 and p1.
8126 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
8127 may_enable: false
8128 may_enable: true
8129 may_enable: false
8130 may_enable: true
8131 ])
8132
8133 OVS_VSWITCHD_STOP
8134 AT_CLEANUP
8135
8136 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
8137 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
8138
8139 # enable bfd on p0.
8140 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
8141 # check log.
8142 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
8143 # disable bfd on p0.
8144 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
8145 # check log.
8146 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
8147 AT_CHECK([sed -e '/^.*ofproto_dpif_monitor.*$/d' < ovs-vswitchd.log > tmp && ovs-appctl vlog/close && mv tmp ovs-vswitchd.log && ovs-appctl vlog/reopen])
8148
8149 # enable cfm on p0.
8150 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
8151 # check log.
8152 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
8153 # disable cfm on p0.
8154 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
8155 # check log.
8156 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
8157 AT_CHECK([sed -e '/^.*ofproto_dpif_monitor.*$/d' < ovs-vswitchd.log > tmp && ovs-appctl vlog/close && mv tmp ovs-vswitchd.log && ovs-appctl vlog/reopen])
8158
8159 # enable both bfd and cfm on p0.
8160 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
8161 # check log.
8162 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
8163 # disable bfd on p0.
8164 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
8165 # check log, there should not be the log of thread terminated.
8166 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
8167 ])
8168 # reenable bfd on p0.
8169 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
8170 # check log, should still be on log of thread created.
8171 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
8172 monitor thread created
8173 ])
8174 # disable bfd and cfm together.
8175 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
8176 # check log.
8177 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
8178
8179 OVS_VSWITCHD_STOP
8180 AT_CLEANUP
8181
8182 # this test helps avoid the deadlock between the main thread and monitor thread.
8183 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
8184 OVS_VSWITCHD_START
8185
8186 for i in `seq 1 199`
8187 do
8188 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])
8189 done
8190
8191 OVS_VSWITCHD_STOP
8192 AT_CLEANUP
8193 \f
8194 AT_BANNER([ofproto-dpif - flow translation resource limits])
8195
8196 dnl Resubmits to later tables do not count against the depth limit, so we
8197 dnl can do 99 of them even though the maximum depth is 64.
8198 AT_SETUP([ofproto-dpif - forward resubmit])
8199 OVS_VSWITCHD_START
8200 (for i in `seq 0 99`; do
8201 j=`expr $i + 1`
8202 echo "table=$i, actions=resubmit(,$j)"
8203 done
8204 echo "table=100, actions=local") > flows
8205 AT_CHECK([ovs-ofctl add-flows br0 flows])
8206 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
8207 [0], [stdout])
8208 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 100
8209 ])
8210 OVS_VSWITCHD_STOP
8211 AT_CLEANUP
8212
8213 dnl Resubmits to the same or an earlier table count against the depth limit,
8214 dnl so only 64 of them are allowed.
8215 AT_SETUP([ofproto-dpif - backward resubmit])
8216 OVS_VSWITCHD_START
8217 (echo "table=0, actions=resubmit(,66)"
8218 for i in `seq 2 66`; do
8219 j=`expr $i - 1`
8220 echo "table=$i, actions=resubmit(,$j)"
8221 done
8222 echo "table=1, actions=local") > flows
8223 AT_CHECK([ovs-ofctl add-flows br0 flows])
8224 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
8225 [0], [stdout])
8226 AT_CHECK([tail -1 stdout], [0],
8227 [Translation failed (Recursion too deep), packet is dropped.
8228 ])
8229 AT_CHECK([grep -c 'over max translation depth 64' stdout],
8230 [0], [1
8231 ])
8232 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
8233 AT_CLEANUP
8234
8235 AT_SETUP([ofproto-dpif - infinite resubmit])
8236 OVS_VSWITCHD_START
8237 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
8238 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
8239 [0], [stdout])
8240 AT_CHECK([tail -1 stdout], [0],
8241 [Translation failed (Recursion too deep), packet is dropped.
8242 ])
8243 AT_CHECK([grep -c 'over max translation depth 64' stdout],
8244 [0], [1
8245 ])
8246 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
8247 AT_CLEANUP
8248
8249 AT_SETUP([ofproto-dpif - exponential resubmit chain])
8250 OVS_VSWITCHD_START
8251 add_of_ports br0 1
8252 (for i in `seq 1 64`; do
8253 j=`expr $i + 1`
8254 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
8255 done
8256 echo "in_port=65, actions=local") > flows
8257 AT_CHECK([ovs-ofctl add-flows br0 flows])
8258 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
8259 AT_CHECK([tail -1 stdout], [0],
8260 [Translation failed (Too many resubmits), packet is dropped.
8261 ])
8262 AT_CHECK([grep -c 'over 4096 resubmit actions' stdout], [0], [1
8263 ])
8264 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
8265 AT_CLEANUP
8266
8267 AT_SETUP([ofproto-dpif - too many output actions])
8268 OVS_VSWITCHD_START
8269 add_of_ports br0 1
8270 (for i in `seq 1 12`; do
8271 j=`expr $i + 1`
8272 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
8273 done
8274 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
8275 AT_CHECK([ovs-ofctl add-flows br0 flows])
8276 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
8277 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
8278 [0], [1
8279 ])
8280 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' stdout], [0], [1
8281 ])
8282 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
8283 AT_CLEANUP
8284
8285 AT_SETUP([ofproto-dpif - stack too deep])
8286 OVS_VSWITCHD_START
8287 add_of_ports br0 1
8288 (for i in `seq 1 12`; do
8289 j=`expr $i + 1`
8290 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
8291 done
8292 push="push:NXM_NX_REG0[[]]"
8293 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
8294 AT_CHECK([ovs-ofctl add-flows br0 flows])
8295 AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
8296 AT_CHECK([tail -1 stdout], [0],
8297 [Translation failed (Stack too deep), packet is dropped.
8298 ])
8299 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' stdout], [0], [1
8300 ])
8301 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
8302 AT_CLEANUP
8303
8304
8305 AT_SETUP([ofproto-dpif packet-out controller])
8306 OVS_VSWITCHD_START
8307 add_of_ports br0 1 2
8308
8309 AT_CHECK([ovs-ofctl add-flow br0 'dl_dst=50:54:00:00:00:0a actions=controller'])
8310
8311 AT_CAPTURE_FILE([ofctl_monitor.log])
8312 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8313
8314 for i in 1 2 3; do
8315 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER controller '50540000000a5054000000091234'])
8316 done
8317
8318 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8319 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8320 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
8321 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8322 dnl
8323 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
8324 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8325 dnl
8326 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
8327 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8328 ])
8329
8330 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
8331 dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
8332 NXST_FLOW reply:
8333 ])
8334
8335 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
8336 table 0:
8337 active=1, lookup=0, matched=0
8338
8339 table 1:
8340 active=0, lookup=0, matched=0
8341 "
8342 for i in `seq 2 253`; do
8343 printf ' table %d: ditto\n' $i
8344 done) > expout
8345 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
8346
8347 OVS_VSWITCHD_STOP
8348 AT_CLEANUP
8349
8350 AT_SETUP([ofproto-dpif packet-out controller (patch port)])
8351 OVS_VSWITCHD_START(
8352 [-- \
8353 add-port br0 p1 -- \
8354 set interface p1 type=patch options:peer=p2 -- \
8355 add-br br1 -- \
8356 set bridge br1 datapath-type=dummy -- \
8357 set bridge br1 fail-mode=secure -- \
8358 set bridge br1 protocols='[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13]' -- \
8359 add-port br1 p2 -- \
8360 set interface p2 type=patch options:peer=p1 --])
8361
8362 AT_CAPTURE_FILE([ofctl_monitor.log])
8363 AT_CHECK([ovs-ofctl monitor br1 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8364
8365 for i in 1 2 3; do
8366 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER output:1 '50540000000a5054000000091234'])
8367 done
8368
8369 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8370 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8371 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
8372 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8373 dnl
8374 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
8375 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8376 dnl
8377 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
8378 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8379 ])
8380
8381 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
8382 table 0:
8383 active=0, lookup=0, matched=0
8384 "
8385 for i in `seq 1 253`; do
8386 printf ' table %d: ditto\n' $i
8387 done) > expout
8388 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
8389
8390 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
8391 table 0:
8392 active=0, lookup=3, matched=0
8393
8394 table 1:
8395 active=0, lookup=0, matched=0
8396 "
8397 for i in `seq 2 253`; do
8398 printf ' table %d: ditto\n' $i
8399 done) > expout
8400 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br1 ], [0], [expout])
8401
8402 OVS_VSWITCHD_STOP
8403 AT_CLEANUP
8404
8405 AT_SETUP([ofproto-dpif packet-out pipeline match field (OpenFlow 1.5)])
8406 OVS_VSWITCHD_START
8407
8408 AT_CHECK([ovs-ofctl add-tlv-map br0 "{class=0xffff,type=0,len=8}->tun_metadata2"])
8409 AT_CHECK([ovs-ofctl add-tlv-map br0 "{class=0xffff,type=1,len=4}->tun_metadata3"])
8410 AT_DATA([flows.txt], [dnl
8411 table=0,in_port=1 actions=controller
8412 table=0,tun_id=3 actions=controller
8413 table=0,metadata=5 actions=controller
8414 table=0,reg0=1,reg4=2,reg8=3,reg12=5 actions=controller
8415 table=0,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_gbp_id=0x01,tun_gbp_flags=0x03 actions=controller
8416 table=0,tun_metadata3=0x11 actions=controller
8417 ])
8418 AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
8419
8420 AT_CHECK([ovs-ofctl -O OpenFlow15 -P standard monitor br0 --detach --no-chdir --pidfile])
8421 ovs-appctl -t ovs-ofctl ofctl/send 0609000c0123456700000080
8422 ovs-appctl -t ovs-ofctl ofctl/barrier
8423 ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
8424 AT_CAPTURE_FILE([monitor.log])
8425
8426 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=1 packet=0001020304050010203040501111 actions=table"])
8427 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=2,tunnel_id=3 packet=0001020304050010203040502222 actions=table"])
8428 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=2,metadata=5 packet=0001020304050010203040503333 actions=table"])
8429 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=2,reg0=1,reg4=2,reg8=3,reg12=5 packet=0001020304050010203040503333 actions=table"])
8430 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=2,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_gbp_id=0x01,tun_gbp_flags=0x03 packet=0001020304050010203040503333 actions=table"])
8431 AT_CHECK([ovs-ofctl -O OpenFlow15 packet-out br0 "in_port=2,tun_metadata2=0x22,tun_metadata3=0x11 packet=0001020304050010203040503333 actions=table"])
8432
8433 ovs-appctl -t ovs-ofctl ofctl/barrier
8434 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8435
8436 AT_CHECK([sed 's/ (xid=0x[[0-9a-fA-F]]*)//' monitor.log], [0], [dnl
8437 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 in_port=1 (via packet_out) data_len=14 (unbuffered)
8438 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x1111
8439 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 tun_id=0x3,in_port=2 (via packet_out) data_len=14 (unbuffered)
8440 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x2222
8441 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 metadata=0x5,in_port=2 (via packet_out) data_len=14 (unbuffered)
8442 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x3333
8443 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 reg0=0x1,reg4=0x2,reg8=0x3,reg12=0x5,in_port=2 (via packet_out) data_len=14 (unbuffered)
8444 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x3333
8445 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_gbp_id=1,tun_gbp_flags=0x3,in_port=2 (via packet_out) data_len=14 (unbuffered)
8446 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x3333
8447 OFPT_PACKET_IN (OF1.5): cookie=0x0 total_len=14 tun_metadata2=0x22,tun_metadata3=0x11,in_port=2 (via packet_out) data_len=14 (unbuffered)
8448 vlan_tci=0x0000,dl_src=00:10:20:30:40:50,dl_dst=00:01:02:03:04:05,dl_type=0x3333
8449 OFPT_BARRIER_REPLY (OF1.5):
8450 ])
8451
8452 OVS_VSWITCHD_STOP
8453 AT_CLEANUP
8454
8455 AT_SETUP([ofproto-dpif packet-out goto_table])
8456 OVS_VSWITCHD_START
8457 add_of_ports br0 1 2
8458
8459 AT_DATA([flows.txt], [dnl
8460 table=0 dl_dst=50:54:00:00:00:0a actions=goto_table(1)
8461 table=1 dl_dst=50:54:00:00:00:0a actions=controller
8462 ])
8463 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
8464
8465 AT_CAPTURE_FILE([ofctl_monitor.log])
8466 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8467
8468 for i in 1 2 3; do
8469 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)'
8470 done
8471
8472 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
8473 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8474 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8475 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8476 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8477 dnl
8478 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8479 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8480 dnl
8481 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8482 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8483 ])
8484
8485 AT_CHECK([ovs-appctl revalidator/purge], [0])
8486 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
8487 n_packets=3, n_bytes=42, dl_dst=50:54:00:00:00:0a actions=goto_table:1
8488 table=1, n_packets=3, n_bytes=42, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
8489 OFPST_FLOW reply (OF1.3):
8490 ])
8491
8492 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
8493 table 0:
8494 active=1, lookup=3, matched=3
8495
8496 table 1: ditto
8497 table 2:
8498 active=0, lookup=0, matched=0
8499 "
8500 for i in `seq 3 253`; do
8501 printf ' table %d: ditto\n' $i
8502 done) > expout
8503 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
8504
8505 OVS_VSWITCHD_STOP
8506 AT_CLEANUP
8507
8508
8509 AT_SETUP([ofproto-dpif packet-out table-miss (continue)])
8510 OVS_VSWITCHD_START
8511 add_of_ports br0 1 2
8512
8513 AT_CHECK([ovs-ofctl -O OpenFlow11 add-flow br0 'table=1 dl_dst=50:54:00:00:00:0a actions=controller'])
8514 AT_CHECK([ovs-ofctl -O OpenFlow11 mod-table br0 all continue])
8515
8516 AT_CAPTURE_FILE([ofctl_monitor.log])
8517 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8518
8519 for i in 1 2 3; do
8520 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)'
8521 done
8522
8523 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
8524 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8525 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8526 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8527 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8528 dnl
8529 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8530 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8531 dnl
8532 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=14 in_port=1 (via action) data_len=14 (unbuffered)
8533 vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
8534 ])
8535
8536 AT_CHECK([ovs-appctl revalidator/purge], [0])
8537 AT_CHECK([ovs-ofctl -O OpenFlow11 dump-flows br0 | ofctl_strip | sort], [0], [dnl
8538 table=1, n_packets=3, n_bytes=42, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
8539 OFPST_FLOW reply (OF1.1):
8540 ])
8541
8542 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
8543 table 0:
8544 active=0, lookup=3, matched=0
8545
8546 table 1:
8547 active=1, lookup=3, matched=3
8548
8549 table 2:
8550 active=0, lookup=0, matched=0
8551 "
8552 for i in `seq 3 253`; do
8553 printf ' table %d: ditto\n' $i
8554 done) > expout
8555 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
8556
8557 OVS_VSWITCHD_STOP
8558 AT_CLEANUP
8559
8560 AT_SETUP([ofproto-dpif - ICMPv6])
8561 OVS_VSWITCHD_START
8562 add_of_ports br0 1
8563
8564 AT_CAPTURE_FILE([ofctl_monitor.log])
8565
8566 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8567
8568 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
8569
8570 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8571
8572 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8573 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
8574 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
8575 ])
8576
8577 OVS_VSWITCHD_STOP
8578 AT_CLEANUP
8579
8580 AT_SETUP([ofproto-dpif - ICMPv6 type match])
8581 OVS_VSWITCHD_START
8582 add_of_ports br0 1 2 3
8583
8584 AT_CHECK([ovs-ofctl add-flow br0 'icmp6,icmp_type=128,actions=2'])
8585 AT_CHECK([ovs-ofctl add-flow br0 'icmp6,icmp_type=129,actions=3'])
8586
8587 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8588
8589 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(1),eth(src=f2:49:6e:52:49:0b,dst=02:b7:d7:17:ff:72),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=128)'])
8590 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(1),eth(src=f2:49:6e:52:49:0b,dst=02:b7:d7:17:ff:72),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=128)'])
8591 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(1),eth(src=f2:49:6e:52:49:0b,dst=02:b7:d7:17:ff:72),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=129)'])
8592 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(1),eth(src=f2:49:6e:52:49:0b,dst=02:b7:d7:17:ff:72),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=129)'])
8593
8594 AT_CHECK([ovs-appctl revalidator/purge], [0])
8595
8596 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
8597 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=128), actions:2
8598 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x86dd),ipv6(proto=58,frag=no),icmpv6(type=129), actions:3
8599 ])
8600
8601 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
8602 n_packets=2, n_bytes=124, icmp6,icmp_type=128 actions=output:2
8603 n_packets=2, n_bytes=124, icmp6,icmp_type=129 actions=output:3
8604 NXST_FLOW reply:
8605 ])
8606
8607 OVS_VSWITCHD_STOP
8608 AT_CLEANUP
8609
8610 AT_SETUP([ofproto-dpif - Neighbor Discovery set-field with checksum update])
8611 OVS_VSWITCHD_START
8612 add_of_ports br0 1
8613 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])
8614
8615 AT_CAPTURE_FILE([ofctl_monitor.log])
8616
8617 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8618
8619 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
8620
8621 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
8622
8623 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8624 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via action) data_len=86 (unbuffered)
8625 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
8626 ])
8627
8628 OVS_VSWITCHD_STOP
8629 AT_CLEANUP
8630
8631 # Tests the exact match of CFI bit in installed datapath flows matching VLAN.
8632 AT_SETUP([ofproto-dpif - vlan matching])
8633 OVS_VSWITCHD_START(
8634 [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
8635 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8636
8637 AT_CHECK([ovs-ofctl del-flows br0])
8638 AT_CHECK([ovs-ofctl add-flow br0 "vlan_tci=0x000a/0x0fff,action=output:local"])
8639
8640 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))'])
8641
8642 OVS_WAIT_UNTIL([grep flow_add: ovs-vswitchd.log])
8643 AT_CHECK([grep 'in_port([[1]])' ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl
8644 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x8100),vlan(vid=10),encap(eth_type(0x0800),ipv4(frag=no)), actions: <del>
8645 ])
8646 OVS_VSWITCHD_STOP
8647 AT_CLEANUP
8648
8649 # Tests in place modification of installed datapath flows.
8650 AT_SETUP([ofproto-dpif - in place modification])
8651 OVS_VSWITCHD_START(
8652 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
8653 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8654
8655 AT_CHECK([ovs-ofctl del-flows br0])
8656 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=mod_vlan_vid:3,output:local])
8657
8658 ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
8659
8660 ovs-appctl time/stop
8661
8662 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(0x1234)'])
8663
8664 # Wait for the flow setup to be done.
8665 OVS_WAIT_UNTIL([grep 'flow_add:' ovs-vswitchd.log])
8666
8667 for i in 1 2; do
8668 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)'
8669 done
8670
8671 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8672 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:2, bytes:28, used:0.0s, actions:push_vlan(vid=3,pcp=0),100
8673 ])
8674
8675 AT_CHECK([ovs-ofctl add-flow br0 priority=60000,in_port=1,actions=mod_vlan_vid:4,output:local])
8676
8677 ovs-appctl time/warp 500
8678 ovs-appctl time/warp 500
8679
8680 for i in 1 2 3; do
8681 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)'
8682 done
8683
8684 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8685 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:5, bytes:70, used:0.0s, actions:push_vlan(vid=4,pcp=0),100
8686 ])
8687
8688 AT_CHECK([grep 'modify' ovs-vswitchd.log | strip_ufid ], [0], [dnl
8689 dpif|DBG|dummy@ovs-dummy: put[[modify]] skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(1),packet_type(ns=0,id=0),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
8690 ])
8691 OVS_VSWITCHD_STOP
8692 AT_CLEANUP
8693
8694 # Tests in place modification of installed datapath flows with vlans.
8695 AT_SETUP([ofproto-dpif - in place modification (vlan)])
8696 OVS_VSWITCHD_START(
8697 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
8698 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8699
8700 AT_CHECK([ovs-ofctl del-flows br0])
8701 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=output:local])
8702
8703 ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
8704
8705 ovs-appctl time/stop
8706
8707 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(0x1234)'])
8708
8709 # Check that a correct datapath flow is created.
8710 OVS_WAIT_UNTIL([grep 'flow_add:' ovs-vswitchd.log])
8711
8712 for i in 1 2; do
8713 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)'
8714 done
8715
8716 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8717 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:2, bytes:28, used:0.0s, actions:100
8718 ])
8719
8720 # Delete the flow. Then check that the datapath flow is modified to
8721 # drop the packets. A modified flow inherits the stats, a new
8722 # datapath flow would start from sero.
8723 AT_CHECK([ovs-ofctl del-flows br0])
8724
8725 ovs-appctl time/warp 500
8726 ovs-appctl time/warp 500
8727
8728 for i in 1 2 3; do
8729 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)'
8730 done
8731
8732 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8733 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:5, bytes:70, used:0.0s, actions:drop
8734 ])
8735
8736 # Add a flow that matches the non-presence of a vlan tag, and check
8737 # that the datapath flow is modified accordingly.
8738 AT_CHECK([ovs-ofctl add-flow br0 in_port=1,vlan_tci=0x0000/0x1fff,actions=output:local])
8739
8740 ovs-appctl time/warp 500
8741 ovs-appctl time/warp 500
8742
8743 for i in 1 2 3; do
8744 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)'
8745 done
8746
8747 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8748 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:8, bytes:112, used:0.0s, actions:100
8749 ])
8750
8751 # Check that VLAN packets will not hit the same datapath megaflow.
8752
8753 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=99,pcp=7),encap(eth_type(0x1234))'])
8754 OVS_WAIT_UNTIL([grep 'flow_add:.*vlan(vid=99' ovs-vswitchd.log])
8755
8756 for i in 1 2; do
8757 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))'
8758 done
8759
8760 AT_CHECK([ovs-appctl dpif/dump-flows br0 | strip_ufid | strip_used | sort], [0], [dnl
8761 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), packets:8, bytes:112, used:0.0s, actions:100
8762 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x8100),vlan(vid=99,pcp=7/0x0),encap(eth_type(0x1234)), packets:2, bytes:36, used:0.0s, actions:drop
8763 ])
8764
8765 # Check that the new flow matches the CFI bit, while both vid and pcp
8766 # are wildcarded.
8767 AT_CHECK([grep '\(modify\)\|\(flow_add\)' ovs-vswitchd.log | strip_ufid ], [0], [dnl
8768 dpif_netdev|DBG|flow_add: recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x1234), actions:100
8769 dpif|DBG|dummy@ovs-dummy: put[[modify]] skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(1),packet_type(ns=0,id=0),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)
8770 dpif|DBG|dummy@ovs-dummy: put[[modify]] skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(1),packet_type(ns=0,id=0),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
8771 dpif_netdev|DBG|flow_add: recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x8100),vlan(vid=99,pcp=7/0x0),encap(eth_type(0x1234)), actions:drop
8772 ])
8773 OVS_VSWITCHD_STOP
8774 AT_CLEANUP
8775
8776 AT_SETUP([ofproto-dpif - trace (unchanged)])
8777 OVS_VSWITCHD_START
8778 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
8779 AT_CHECK([grep "Final flow:" stdout], [0], [Final flow: unchanged
8780 ])
8781 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100)'], [0], [stdout])
8782 AT_CHECK([grep "Final flow:" stdout], [0], [Final flow: unchanged
8783 ])
8784
8785 OVS_VSWITCHD_STOP
8786 AT_CLEANUP
8787
8788 AT_SETUP([ofproto-dpif - conntrack - controller])
8789 OVS_VSWITCHD_START
8790
8791 add_of_ports br0 1 2
8792
8793 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
8794
8795 dnl Allow new UDP connections on p1 for dst port 2, drop everything else.
8796 AT_DATA([flows.txt], [dnl
8797 dnl Table 0
8798 dnl Store zone in reg4 and packet direction in reg3 (IN=1, OUT=2).
8799 dnl
8800 table=0,priority=100,arp,action=normal
8801 table=0,priority=10,in_port=1,ip,action=set_field:1->reg4,set_field:1->reg3,ct(zone=NXM_NX_REG4[[0..15]],table=1)
8802 table=0,priority=10,in_port=2,ip,action=set_field:1->reg4,set_field:2->reg3,ct(zone=NXM_NX_REG4[[0..15]],table=1)
8803 table=0,priority=1,action=drop
8804 dnl
8805 dnl Pass tracked traffic through ACL, drop everything else.
8806 dnl Non-REPLY/RELATED packets get the ACL lookup with the packet headers
8807 dnl in the actual packet direction in reg0 (IN=1, OUT=2). REPLY packets
8808 dnl get the ACL lookup using the conntrack tuple and the inverted direction.
8809 dnl RELATED packets get ACL lookup using the conntrack tuple in the direction
8810 dnl of the master connection, as storted in ct_mark.
8811 dnl
8812 dnl Incoming non-related packet in the original direction (ACL IN)
8813 table=1 reg3=1, ip, ct_state=-rel-rpl+trk-inv action=set_field:1->reg0,resubmit(,3),goto_table:5
8814 dnl Incoming non-related reply packet (CT ACL OUT)
8815 table=1 reg3=1, ip, ct_state=-rel+rpl+trk-inv action=set_field:2->reg0,resubmit(,3,ct),goto_table:4
8816 dnl Outgoing non-related packet (ACL OUT)
8817 table=1 reg3=2, ip, ct_state=-rel-rpl+trk-inv action=set_field:2->reg0,resubmit(,3),goto_table:5
8818 dnl Outgoing non-related reply packet (CT ACL IN)
8819 table=1 reg3=2, ip, ct_state=-rel+rpl+trk-inv action=set_field:1->reg0,resubmit(,3,ct),goto_table:4
8820 dnl
8821 dnl Related packet (CT ACL in the direction of the master connection.)
8822 table=1 ip, ct_state=+rel+trk-inv, action=move:NXM_NX_CT_MARK[[]]->NXM_NX_REG0[[]],resubmit(,3,ct),goto_table:4
8823 dnl Drop everything else.
8824 table=1 priority=0, action=drop
8825 dnl
8826 dnl "ACL table"
8827 dnl
8828 dnl Stateful accept (1->reg2) all incoming (reg0=1) IP connections with
8829 dnl UDP destination port '2'. Store rule ID (1234) in reg1, verdict
8830 dnl in reg2.
8831 table=3 priority=10, reg0=1, udp, udp_dst=2 action=set_field:1234->reg1,set_field:1->reg2
8832 dnl Stateless drop (0->reg2) everything else in both directions. (Rule ID: 1235)
8833 table=3 priority=0, action=set_field:1235->reg1,set_field:0->reg2
8834 dnl
8835 dnl Re-process stateful traffic that was not accepted by a stateful rule as
8836 dnl normal traffic in the current direction. This should also delete the
8837 dnl now stale conntrack state, so that new state can be created in it's place.
8838 dnl
8839 dnl Stateful accepts go to next table.
8840 table=4 priority=100 reg2=1, action=goto_table:5
8841 dnl Everything else is reprocessed disregarding the CT state, using the actual
8842 dnl packet direction.
8843 table=4 priority=0 action=move:NXM_NX_REG3[[]]->NXM_NX_REG0[[]],resubmit(,3),goto_table:5
8844 dnl
8845 dnl "ACL verdict processing table."
8846 dnl
8847 dnl Handle stateful (reg2=1) / stateless (reg2=2) accepts and drops (reg2=0)
8848 dnl
8849 dnl Drop all non-accepted packets.
8850 table=5 reg2=0 priority=1000 action=drop
8851 dnl Commit new non-related IP connections.
8852 table=5 priority=10 reg2=1 ct_state=+new-rel, ip, action=ct(zone=NXM_NX_REG4[[0..15]],commit,exec(move:NXM_NX_REG3[[0..31]]->NXM_NX_CT_MARK[[0..31]],move:NXM_NX_REG1[[0..31]]->NXM_NX_CT_LABEL[[96..127]])),goto_table:6
8853 dnl Commit new related connections in either direction, which inherit the mark
8854 dnl (the direction of the original direction master tuple) from the master
8855 dnl connection.
8856 table=5 priority=10 reg2=1 ct_state=+new+rel, ip, action=ct(zone=NXM_NX_REG4[[0..15]],commit,exec(move:NXM_NX_REG1[[0..31]]->NXM_NX_CT_LABEL[[96..127]])),goto_table:6
8857 dnl Forward everything else, including stateless accepts.
8858 table=5 priority=0 action=goto_table:6
8859 dnl
8860 dnl "Forwarding table"
8861 dnl
8862 table=6 action=controller
8863 ])
8864
8865 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
8866
8867 AT_CAPTURE_FILE([ofctl_monitor.log])
8868 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8869
8870 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
8871
8872 dnl OK, now start a new connection from port 1.
8873 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
8874
8875 dnl Now try a reply from port 2.
8876 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
8877
8878 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
8879 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
8880
8881 dnl Check this output. We only see the latter two packets, not the first.
8882 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8883 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 ct_state=new|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action) data_len=42 (unbuffered)
8884 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
8885 dnl
8886 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x2,reg4=0x1,in_port=2 (via action) data_len=42 (unbuffered)
8887 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
8888 ])
8889
8890 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8891
8892 dnl OK, now start a second connection from port 1
8893 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=3,dst=2)'])
8894
8895 dnl Now try a reply from port 2.
8896 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=3)'])
8897
8898
8899 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
8900 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
8901
8902 dnl Check this output. We should see both packets
8903 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8904 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 ct_state=new|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=2,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x1,reg4=0x1,in_port=1 (via action) data_len=42 (unbuffered)
8905 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=2 udp_csum:e9d4
8906 dnl
8907 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_zone=1,ct_mark=0x1,ct_label=0x4d2000000000000000000000000,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=2,reg0=0x1,reg1=0x4d2,reg2=0x1,reg3=0x2,reg4=0x1,in_port=2 (via action) data_len=42 (unbuffered)
8908 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=3 udp_csum:e9d4
8909 ])
8910
8911 OVS_VSWITCHD_STOP
8912 AT_CLEANUP
8913
8914 AT_SETUP([ofproto-dpif - conntrack - force commit])
8915 OVS_VSWITCHD_START
8916
8917 add_of_ports br0 1 2
8918
8919 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
8920
8921 dnl Allow new connections on p1->p2, but not on p2->p1.
8922 AT_DATA([flows.txt], [dnl
8923 dnl Table 0
8924 dnl
8925 table=0,priority=100,arp,action=normal
8926 table=0,priority=10,in_port=1,udp,action=ct(commit),controller
8927 table=0,priority=10,in_port=2,udp,action=ct(table=1)
8928 table=0,priority=1,action=drop
8929 dnl
8930 dnl Table 1
8931 dnl
8932 table=1,priority=10,in_port=2,ct_state=+est,udp,action=ct(force,commit),controller
8933 table=1,priority=1,action=drop
8934 ])
8935
8936 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
8937
8938 AT_CAPTURE_FILE([ofctl_monitor.log])
8939 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8940
8941 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
8942
8943 dnl OK, now start a new connection from port 1.
8944 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
8945
8946 dnl Now try a reply from port 2.
8947 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
8948
8949 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
8950 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
8951
8952 dnl Check this output. We only see the latter two packets, not the first.
8953 dnl Note that the first packet doesn't have the ct_state bits set. This
8954 dnl happens because the ct_state field is available only after recirc.
8955 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8956 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
8957 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
8958 dnl
8959 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
8960 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
8961 ])
8962
8963 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8964
8965 dnl OK, now start a second connection from port 1
8966 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=3,dst=4)'])
8967
8968 dnl Now try a reply from port 2.
8969 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=4,dst=3)'])
8970
8971 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
8972 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
8973
8974 dnl Check this output. We should see both packets
8975 dnl Note that the first packet doesn't have the ct_state bits set. This
8976 dnl happens because the ct_state field is available only after recirc.
8977 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8978 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
8979 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=4 udp_csum:e9d2
8980 dnl
8981 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=4,in_port=2 (via action) data_len=42 (unbuffered)
8982 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:e9d2
8983 ])
8984
8985 dnl
8986 dnl Check that the directionality has been changed by force commit.
8987 dnl
8988 AT_CHECK([ovs-appctl dpctl/dump-conntrack | sort], [], [dnl
8989 udp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=2,dport=1),reply=(src=10.1.1.1,dst=10.1.1.2,sport=1,dport=2)
8990 udp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=4,dport=3),reply=(src=10.1.1.1,dst=10.1.1.2,sport=3,dport=4)
8991 ])
8992
8993 OVS_VSWITCHD_STOP
8994 AT_CLEANUP
8995
8996 AT_SETUP([ofproto-dpif - conntrack - ipv6])
8997 OVS_VSWITCHD_START
8998
8999 add_of_ports br0 1 2
9000
9001 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9002
9003 dnl Allow new connections on p1->p2, but not on p2->p1.
9004 AT_DATA([flows.txt], [dnl
9005 dnl Table 0
9006 dnl
9007 table=0,priority=100,arp,action=normal
9008 table=0,priority=10,in_port=1,udp6,action=ct(commit,zone=0),controller
9009 table=0,priority=10,in_port=2,udp6,action=ct(table=1,zone=0)
9010 table=0,priority=1,action=drop
9011 dnl Table 1
9012 dnl
9013 table=1,priority=10,in_port=2,ct_state=+trk+est-new,udp6,action=controller
9014 table=1,priority=1,action=drop
9015 ])
9016
9017 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9018
9019 AT_CAPTURE_FILE([ofctl_monitor.log])
9020 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9021
9022 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x86dd),ipv6(src=2001:db8::2,dst=2001:db8::1,label=0,proto=17,tclass=0x70,hlimit=128,frag=no),udp(src=2,dst=1)'])
9023
9024 dnl OK, now start a new connection from port 1.
9025 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::1,dst=2001:db8::2,label=0,proto=17,tclass=0x70,hlimit=128,frag=no),udp(src=1,dst=2)'])
9026
9027 dnl Now try a reply from port 2.
9028 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x86dd),ipv6(src=2001:db8::2,dst=2001:db8::1,label=0,proto=17,tclass=0x70,hlimit=128,frag=no),udp(src=2,dst=1)'])
9029
9030 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
9031 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9032
9033 dnl Check this output. We only see the latter two packets, not the first.
9034 dnl Note that the first packet doesn't have the ct_state bits set. This
9035 dnl happens because the ct_state field is available only after recirc.
9036 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9037 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
9038 udp6,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,ipv6_src=2001:db8::1,ipv6_dst=2001:db8::2,ipv6_label=0x00000,nw_tos=112,nw_ecn=0,nw_ttl=128,tp_src=1,tp_dst=2 udp_csum:a466
9039 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=62 ct_state=est|rpl|trk,ct_ipv6_src=2001:db8::1,ct_ipv6_dst=2001:db8::2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=62 (unbuffered)
9040 udp6,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,ipv6_src=2001:db8::2,ipv6_dst=2001:db8::1,ipv6_label=0x00000,nw_tos=112,nw_ecn=0,nw_ttl=128,tp_src=2,tp_dst=1 udp_csum:a466
9041 ])
9042
9043 OVS_VSWITCHD_STOP
9044 AT_CLEANUP
9045
9046 AT_SETUP([ofproto-dpif - conntrack - output action])
9047 OVS_VSWITCHD_START
9048
9049 add_of_ports br0 1 2
9050
9051 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9052
9053 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9054 AT_DATA([flows.txt], [dnl
9055 dnl The flows are in two separate tables for two reasons:
9056 dnl * To make the pipeline more clear.
9057 dnl * To make megaflows more consistent (we check megaflows below). The
9058 dnl unwildcarding in megaflows depends on the internal ordering of the
9059 dnl subtables, which are sorted using the system qsort(). qsort()
9060 dnl is provided by libc and may or may not be stable, so we can't rely
9061 dnl on that. By having separate tables we have more control over which
9062 dnl subtables are visited, meaning consistent megaflows.
9063 dnl
9064 dnl Table 0
9065 dnl
9066 table=0,priority=100,arp,action=normal
9067 table=0,priority=10,in_port=1,udp,action=ct(commit,zone=0),2
9068 table=0,priority=10,in_port=2,udp,action=ct(table=1,zone=0)
9069 table=0,priority=1,action=drop
9070 dnl
9071 dnl Table 1
9072 dnl
9073 table=1,priority=10,in_port=2,ct_state=+trk+est-new,udp,action=1
9074 table=1,priority=1,action=drop
9075 ])
9076
9077 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9078
9079
9080 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9081
9082 dnl OK, now start a new connection from port 1.
9083 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9084
9085 dnl Now try a reply from port 2.
9086 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9087
9088 dnl OK, now start a second connection from port 1
9089 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9090
9091 dnl Now try a reply from port 2.
9092 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9093
9094
9095 AT_CHECK([cat ovs-vswitchd.log | strip_ufid | filter_flow_install], [0], [dnl
9096 ct_state(+new-est+trk),recirc_id(0x1),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:drop
9097 ct_state(-new+est+trk),recirc_id(0x1),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=no), actions:1
9098 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=no), actions:ct(commit),2
9099 recirc_id(0),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=no), actions:ct,recirc(0x1)
9100 ])
9101
9102 OVS_VSWITCHD_STOP
9103 AT_CLEANUP
9104
9105 AT_SETUP([ofproto-dpif - conntrack - expiration])
9106 OVS_VSWITCHD_START
9107
9108 add_of_ports br0 1 2
9109
9110 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9111
9112 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9113 AT_DATA([flows.txt], [dnl
9114 dnl Table 0
9115 dnl
9116 table=0,priority=100,arp,action=normal
9117 table=0,priority=10,in_port=1,udp,action=ct(commit,zone=0)
9118 table=0,priority=10,in_port=2,udp,action=ct(table=1,zone=0)
9119 table=0,priority=1,action=drop
9120 dnl
9121 dnl Table 1
9122 dnl
9123 table=1,priority=10,in_port=2,ct_state=+trk+est-new,udp,action=controller
9124 table=1,priority=1,action=drop
9125 ])
9126
9127 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9128
9129 AT_CAPTURE_FILE([ofctl_monitor.log])
9130 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9131
9132 AT_CHECK([ovs-appctl time/stop])
9133
9134 dnl Start a new connection from port 1.
9135 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9136
9137 dnl Now try a reply from port 2.
9138 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9139
9140 ovs-appctl time/warp 100000
9141
9142 dnl Now try another reply from port 2.
9143 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9144
9145 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 3])
9146 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9147
9148 dnl Check this output. Only one reply must be there
9149 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9150 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9151 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9152 dnl
9153 OFPT_ECHO_REQUEST (xid=0x0): 0 bytes of payload
9154 ])
9155
9156 OVS_VSWITCHD_STOP
9157 AT_CLEANUP
9158
9159 AT_SETUP([ofproto-dpif - conntrack - untrackable traffic])
9160 OVS_VSWITCHD_START
9161
9162 add_of_ports br0 1 2
9163
9164 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9165
9166 AT_DATA([flows.txt], [dnl
9167 ipv6,ct_state=-trk,action=ct(table=0,zone=0)
9168 ct_state=+trk,action=controller
9169 ])
9170
9171 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9172
9173 AT_CAPTURE_FILE([ofctl_monitor.log])
9174 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9175
9176 AT_CHECK([ovs-appctl time/stop])
9177
9178 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'])
9179
9180 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 1])
9181 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9182
9183 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9184 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 ct_state=inv|trk,in_port=2 (via action) data_len=86 (unbuffered)
9185 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
9186 ])
9187
9188 OVS_VSWITCHD_STOP
9189 AT_CLEANUP
9190
9191 AT_SETUP([ofproto-dpif - conntrack - zones])
9192 OVS_VSWITCHD_START
9193
9194 add_of_ports br0 1 2 3 4
9195
9196 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9197
9198 dnl Allow new connections on p1->p2 or p3->p4.
9199 dnl Allow only established connections p2->p1 and p4->p3
9200 dnl p1,p2 and p3,p4 are on different zones
9201 AT_DATA([flows.txt], [dnl
9202 dnl Table 0
9203 dnl
9204 table=0,priority=100,arp,action=normal
9205 table=0,priority=10,in_port=1,udp,action=ct(commit,zone=0),controller
9206 table=0,priority=10,in_port=2,udp,action=ct(table=1,zone=0)
9207 table=0,priority=10,in_port=3,udp,action=ct(commit,zone=1),controller
9208 table=0,priority=10,in_port=4,udp,action=ct(table=1,zone=1)
9209 table=0,priority=1,action=drop
9210 dnl
9211 dnl Table 1
9212 dnl
9213 table=1,priority=10,in_port=2,ct_state=+trk+est-new,udp,action=controller
9214 table=1,priority=10,in_port=4,ct_state=+trk+est-new,udp,action=controller
9215 table=1,priority=1,action=drop
9216 ])
9217
9218 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9219
9220 AT_CAPTURE_FILE([ofctl_monitor.log])
9221 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9222
9223 dnl Basic "only established" test on ports 1,2
9224
9225 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9226 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9227 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9228
9229 dnl Now use the same 5-tuples but on ports 3,4
9230
9231 AT_CHECK([ovs-appctl netdev-dummy/receive p4 'in_port(4),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9232 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9233 AT_CHECK([ovs-appctl netdev-dummy/receive p4 'in_port(4),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9234
9235 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 8])
9236 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9237
9238 dnl Check this output. We only see the latter two packets (for each zone), not the first.
9239 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9240 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
9241 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9242 dnl
9243 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9244 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9245 dnl
9246 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=3 (via action) data_len=42 (unbuffered)
9247 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9248 dnl
9249 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_zone=1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=4 (via action) data_len=42 (unbuffered)
9250 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9251 ])
9252
9253 OVS_VSWITCHD_STOP
9254 AT_CLEANUP
9255
9256 AT_SETUP([ofproto-dpif - conntrack - recirc,commit])
9257 OVS_VSWITCHD_START
9258
9259 add_of_ports br0 1 2
9260
9261 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9262
9263 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9264 AT_DATA([flows.txt], [dnl
9265 dnl Table 0
9266 dnl
9267 table=0,priority=100,arp,action=normal
9268 table=0,priority=10,udp,action=ct(table=1,zone=0)
9269 table=0,priority=1,action=drop
9270 dnl
9271 dnl Table 1
9272 dnl
9273 table=1,priority=10,in_port=1,ct_state=+trk+new,udp,action=ct(commit,zone=0),controller
9274 table=1,priority=10,ct_state=+trk+est,udp,action=controller
9275 table=1,priority=1,action=drop
9276 ])
9277
9278 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9279
9280 AT_CAPTURE_FILE([ofctl_monitor.log])
9281 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9282
9283 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9284
9285 dnl OK, now start a new connection from port 1.
9286 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9287
9288 dnl Now try a reply from port 2.
9289 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9290
9291 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
9292 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9293
9294 dnl Check this output. We only see the latter two packets, not the first.
9295 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9296 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=new|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=1 (via action) data_len=42 (unbuffered)
9297 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9298 dnl
9299 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9300 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9301 ])
9302
9303 OVS_VSWITCHD_STOP
9304 AT_CLEANUP
9305
9306 AT_SETUP([ofproto-dpif - conntrack - ICMP related])
9307 OVS_VSWITCHD_START
9308
9309 add_of_ports br0 1 2
9310
9311 dnl Allow any traffic from ns0->ns1. Only allow nd, return traffic from ns1->ns0.
9312 AT_DATA([flows.txt], [dnl
9313 dnl Table 0
9314 dnl
9315 table=0,priority=100,arp,action=normal
9316 table=0,priority=10,ip,in_port=1,udp,action=ct(commit,table=1)
9317 table=0,priority=10,ip,in_port=2,action=ct(table=1)
9318 table=0,priority=1,action=drop
9319 dnl
9320 dnl Table 1
9321 dnl
9322 table=1,priority=10,in_port=1,ct_state=+trk,action=controller
9323 table=1,priority=10,in_port=2,ct_state=+trk-inv-new,action=controller
9324 table=1,priority=1,action=drop
9325 ])
9326
9327 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9328
9329 AT_CAPTURE_FILE([ofctl_monitor.log])
9330 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9331
9332 dnl 1. Send an ICMP port unreach reply for port 8738, without any previous request
9333 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 2 ct\(table=1\) 'f64c473528c9c6f54ecb72db080045c0003d2e8700004001f351ac100004ac1000030303553f0000000045000021317040004011b138ac100003ac10000411112222000da5a06369616f0a'])
9334
9335 dnl 2. Send and UDP packet to port 5555
9336 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 1 ct\(commit,table=1\) 'c6f94ecb72dbe64c473528c9080045000021317040004011b138ac100001ac100002a28e15b3000d20966369616f0a'])
9337
9338 dnl 3. Send an ICMP port unreach reply for port 5555, related to the first packet
9339 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 2 ct\(table=1\) 'e64c473528c9c6f94ecb72db080045c0003d2e8700004001f355ac100002ac1000010303553f0000000045000021317040004011b138ac100001ac100002a28e15b3000d20966369616f0a'])
9340
9341 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
9342 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9343
9344 dnl Check this output. We only see the first and the last packet
9345 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9346 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=47 ct_state=new|trk,ct_nw_src=172.16.0.1,ct_nw_dst=172.16.0.2,ct_nw_proto=17,ct_tp_src=41614,ct_tp_dst=5555,in_port=1 (via action) data_len=47 (unbuffered)
9347 udp,vlan_tci=0x0000,dl_src=e6:4c:47:35:28:c9,dl_dst=c6:f9:4e:cb:72:db,nw_src=172.16.0.1,nw_dst=172.16.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=41614,tp_dst=5555 udp_csum:2096
9348 dnl
9349 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=75 ct_state=rel|rpl|trk,ct_nw_src=172.16.0.1,ct_nw_dst=172.16.0.2,ct_nw_proto=17,ct_tp_src=41614,ct_tp_dst=5555,in_port=2 (via action) data_len=75 (unbuffered)
9350 icmp,vlan_tci=0x0000,dl_src=c6:f9:4e:cb:72:db,dl_dst=e6:4c:47:35:28:c9,nw_src=172.16.0.2,nw_dst=172.16.0.1,nw_tos=192,nw_ecn=0,nw_ttl=64,icmp_type=3,icmp_code=3 icmp_csum:553f
9351 ])
9352
9353 OVS_VSWITCHD_STOP
9354 AT_CLEANUP
9355
9356 AT_SETUP([ofproto-dpif - conntrack - ct_mark])
9357 OVS_VSWITCHD_START
9358
9359 add_of_ports br0 1 2
9360
9361 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9362
9363 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9364 AT_DATA([flows.txt], [dnl
9365 dnl Table 0
9366 dnl
9367 table=0,arp,action=normal
9368 table=0,ip,in_port=1,udp,tp_src=1,action=ct(commit,exec(set_field:1->ct_mark)),controller
9369 table=0,ip,in_port=1,udp,tp_src=3,action=ct(commit,exec(set_field:3->ct_mark)),controller
9370 table=0,ip,in_port=1,udp,tp_src=5,action=ct(commit,exec(set_field:5->ct_mark)),controller
9371 table=0,ip,in_port=2,actions=ct(table=1)
9372 table=0,priority=0,action=drop
9373 dnl
9374 dnl Table 1
9375 dnl
9376 table=1,priority=100,ct_state=+trk+rpl,ct_mark=0/4,actions=controller
9377 table=1,priority=1,action=drop
9378 ])
9379
9380 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9381
9382 AT_CAPTURE_FILE([ofctl_monitor.log])
9383 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9384
9385 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9386 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=3,dst=4)'])
9387 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=5,dst=6)'])
9388
9389 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9390 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=4,dst=3)'])
9391 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=6,dst=5)'])
9392
9393 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 10])
9394 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9395
9396 dnl Check this output.
9397 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9398 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 ct_mark=0x1,in_port=1 (via action) data_len=42 (unbuffered)
9399 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9400 dnl
9401 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 ct_mark=0x3,in_port=1 (via action) data_len=42 (unbuffered)
9402 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=3,tp_dst=4 udp_csum:e9d2
9403 dnl
9404 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 ct_mark=0x5,in_port=1 (via action) data_len=42 (unbuffered)
9405 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=5,tp_dst=6 udp_csum:e9ce
9406 dnl
9407 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_mark=0x1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9408 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9409 dnl
9410 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_mark=0x3,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=4,in_port=2 (via action) data_len=42 (unbuffered)
9411 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:e9d2
9412 ])
9413
9414 OVS_VSWITCHD_STOP
9415 AT_CLEANUP
9416
9417 AT_SETUP([ofproto-dpif - conntrack - ct_label])
9418 OVS_VSWITCHD_START
9419
9420 add_of_ports br0 1 2
9421
9422 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9423
9424 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9425 AT_DATA([flows.txt], [dnl
9426 dnl Table 0
9427 dnl
9428 table=0,arp,action=normal
9429 table=0,ip,in_port=1,udp,tp_src=1,action=ct(commit,exec(set_field:000000000000000001->ct_label))
9430 table=0,ip,in_port=1,udp,tp_src=3,action=ct(commit,exec(set_field:000000000000000002->ct_label))
9431 table=0,ip,in_port=2,actions=ct(table=1)
9432 dnl
9433 dnl Table 1
9434 dnl
9435 table=1,priority=10,ct_state=+trk+rpl,actions=controller
9436 table=1,priority=1,action=drop
9437 ])
9438
9439 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9440
9441 AT_CAPTURE_FILE([ofctl_monitor.log])
9442 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9443
9444 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9445 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=3,dst=4)'])
9446
9447 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9448 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=4,dst=3)'])
9449
9450 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 4])
9451 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9452
9453 dnl Check this output.
9454 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9455 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_label=0x1,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9456 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9457 dnl
9458 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_label=0x2,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=3,ct_tp_dst=4,in_port=2 (via action) data_len=42 (unbuffered)
9459 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=4,tp_dst=3 udp_csum:e9d2
9460 ])
9461
9462 OVS_VSWITCHD_STOP
9463 AT_CLEANUP
9464
9465 AT_SETUP([ofproto-dpif - conntrack - ct_label datapath flow])
9466 OVS_VSWITCHD_START
9467
9468 add_of_ports br0 1 2
9469
9470 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9471
9472 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9473 AT_DATA([flows.txt], [dnl
9474 dnl The flows are in two separate tables for two reasons:
9475 dnl * To make the pipeline more clear.
9476 dnl * To make megaflows more consistent (we check megaflows below). The
9477 dnl unwildcarding in megaflows depends on the internal ordering of the
9478 dnl subtables, which are sorted using the system qsort(). qsort()
9479 dnl is provided by libc and may or may not be stable, so we can't rely
9480 dnl on that. By having separate tables we have more control over which
9481 dnl subtables are visited, meaning consistent megaflows.
9482 dnl
9483 dnl Table 0
9484 dnl
9485 table=0,arp,action=normal
9486 table=0,ip,in_port=1,udp,tp_src=1,action=ct(commit,exec(set_field:1->ct_label)),2
9487 table=0,ip,in_port=2,actions=ct(table=1)
9488 table=0,priority=0,action=drop
9489 dnl
9490 dnl Table 1
9491 dnl
9492 table=1,priority=10,ct_state=+trk+rpl,ct_label=0x1,actions=1
9493 table=1,priority=1,action=drop
9494 ])
9495
9496 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9497
9498 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9499 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9500
9501 # Give time for logs to appear.
9502 ovs-appctl revalidator/wait
9503
9504 AT_CHECK([cat ovs-vswitchd.log | strip_ufid | filter_flow_install], [0], [dnl
9505 ct_state(+rpl+trk),ct_label(0x1),recirc_id(0x1),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:1
9506 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=no),udp(src=1), actions:ct(commit,label=0x1),2
9507 recirc_id(0),in_port(2),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(frag=no), actions:ct,recirc(0x1)
9508 ])
9509
9510 OVS_VSWITCHD_STOP
9511 AT_CLEANUP
9512
9513 AT_SETUP([ofproto-dpif - conntrack - no output])
9514 OVS_VSWITCHD_START
9515
9516 add_of_ports br0 1
9517
9518 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9519
9520 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9521 AT_DATA([flows.txt], [dnl
9522 in_port=1,udp,action=ct(commit,zone=0)
9523 ])
9524
9525 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9526
9527 dnl Start a new connection from port 1.
9528 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9529
9530 AT_CHECK([cat ovs-vswitchd.log | strip_ufid | filter_flow_install], [0], [dnl
9531 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=no), actions:ct(commit)
9532 ])
9533
9534 OVS_VSWITCHD_STOP
9535 AT_CLEANUP
9536
9537 AT_SETUP([ofproto-dpif - conntrack - tcp port reuse])
9538 OVS_VSWITCHD_START
9539
9540 add_of_ports br0 1 2
9541
9542 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9543
9544 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9545 AT_DATA([flows.txt], [dnl
9546 dnl Table 0
9547 dnl
9548 table=0,priority=100,arp,action=normal
9549 table=0,priority=10,in_port=1,ip,action=ct(commit,table=1)
9550 table=0,priority=10,in_port=2,ip,action=ct(table=1)
9551 table=0,priority=1,action=drop
9552 dnl
9553 dnl Table 1
9554 dnl
9555 dnl The following two flows are separated to explicitly count the packets
9556 dnl that create a new connection
9557 table=1,priority=100,cookie=0x1,in_port=1,ip,ct_state=+trk+new-inv-rpl,action=2
9558 table=1,priority=100,in_port=1,ip,ct_state=+trk-new-inv-rpl,action=2
9559 dnl
9560 table=1,priority=100,in_port=2,ip,ct_state=+trk+est+rpl-new-inv,action=1
9561 table=1,ip,ct_state=+trk+inv,action=drop
9562 ])
9563
9564 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9565
9566 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a50540000000908004500002ca4e5400040067fe20a0101010a0101020001000259b5d93f0000000060027210dd190000020405b4'])
9567 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a08004500002c00004000400624c80a0101020a010101000200017c35468459b5d940601272101a4f0000020405b4'])
9568 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028a4e6400040067fe50a0101010a0101020001000259b5d9407c35468550107210320c0000'])
9569 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a0800450000303b5f40004006e9640a0101020a010101000200017c35468559b5d9405018721074c200007061796c6f61640a'])
9570 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028a4e7400040067fe40a0101010a0101020001000259b5d9407c35468d5010721032040000'])
9571 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a0800450000283b6040004006e96b0a0101020a010101000200017c35468d59b5d9405011721032030000'])
9572 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028a4e8400040067fe30a0101010a0101020001000259b5d9407c35468e5010721032030000'])
9573 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028a4e9400040067fe20a0101010a0101020001000259b5d9407c35468e5011721032020000'])
9574 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a0800450000283b6140004006e96a0a0101020a010101000200017c35468e59b5d9415010721032020000'])
9575
9576 AT_CHECK([ovs-appctl revalidator/purge])
9577 AT_CHECK([ovs-ofctl dump-flows br0 | grep cookie=0x1 | grep -o "n_packets=[[0-9]]*"], [0], [dnl
9578 dnl Only one new connection
9579 n_packets=1
9580 ])
9581
9582 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a50540000000908004500002cc0a74000400664200a0101010a010102000100025b7dbf1f0000000060027210f5710000020405b4'])
9583 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a08004500002c00004000400624c80a0101020a010101000200017c36468f5b7dbf2060127210329b0000020405b4'])
9584 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028c0a84000400664230a0101010a010102000100025b7dbf207c364690501072104a580000'])
9585 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a080045000030392840004006eb9b0a0101020a010101000200017c3646905b7dbf20501872108d0e00007061796c6f61640a'])
9586 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028c0a94000400664220a0101010a010102000100025b7dbf207c364698501072104a500000'])
9587 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a080045000028392940004006eba20a0101020a010101000200017c3646985b7dbf20501172104a4f0000'])
9588 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028c0aa4000400664210a0101010a010102000100025b7dbf207c364699501072104a4f0000'])
9589 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000a505400000009080045000028c0ab4000400664200a0101010a010102000100025b7dbf207c364699501172104a4e0000'])
9590 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000950540000000a080045000028392a40004006eba10a0101020a010101000200017c3646995b7dbf21501072104a4e0000'])
9591
9592 AT_CHECK([ovs-appctl revalidator/purge])
9593 AT_CHECK([ovs-ofctl dump-flows br0 | grep cookie=0x1 | grep -o "n_packets=[[0-9]]*"], [0], [dnl
9594 dnl Two new connections
9595 n_packets=2
9596 ])
9597
9598 OVS_VSWITCHD_STOP
9599 AT_CLEANUP
9600
9601 AT_SETUP([ofproto-dpif - conntrack - tcp pick up])
9602 OVS_VSWITCHD_START
9603
9604 add_of_ports br0 1 2
9605
9606 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9607
9608 dnl Allow new connections on p1->p2. Allow only established connections p2->p1
9609 AT_DATA([flows.txt], [dnl
9610 dnl Table 0
9611 dnl
9612 table=0,priority=100,arp,action=normal
9613 table=0,priority=10,in_port=1,tcp,action=ct(commit,table=1)
9614 table=0,priority=10,in_port=2,tcp,action=ct(table=1)
9615 table=0,priority=1,action=drop
9616 dnl
9617 dnl Table 1
9618 dnl
9619 table=1,priority=10,cookie=0x1,ip,ct_state=+trk+inv,action=controller
9620 table=1,priority=1,action=drop
9621 ])
9622
9623 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9624
9625 AT_CHECK([ovs-appctl revalidator/purge])
9626 AT_CHECK([ovs-ofctl dump-flows br0 | grep cookie=0x1 | grep -o "n_packets=[[0-9]]*"], [0], [dnl
9627 dnl No dropped packets
9628 n_packets=0
9629 ])
9630
9631 AT_CAPTURE_FILE([ofctl_monitor.log])
9632 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9633
9634 dnl The first two packets (SYN, SYN|ACK) are commented out. We're making
9635 dnl sure that the connection tracker is able to pick up already established
9636 dnl connections that use window scaling.
9637 dnl
9638 dnl AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000030fc2540004006289e0a0101020a01010100020001396bb359000000007002008080cc0000020405b401030307'])
9639 dnl AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a50540000000908004500003000004000400624c40a0101010a010102000100028cadbdb3396bb35a70120080365a0000020405b401030307'])
9640 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000028fc264000400628a50a0101020a01010100020001396bb35a8cadbdb45010000a629b0000'])
9641 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000029fc274000400628a30a0101020a01010100020001396bb35a8cadbdb45018000a589200000a'])
9642 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a505400000009080045000028f2c84000400632030a0101010a010102000100028cadbdb4396bb35b5010000a629a0000'])
9643 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a08004500022afc284000400626a10a0101020a01010100020001396bb35b8cadbdb45018000a941f0000 dnl
9644 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9645 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9646 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9647 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9648 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9649 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9650 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9651 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9652 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 dnl
9653 6666666666666666666666666666666666666666666666666666660a'])
9654 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a505400000009080045000028f2c94000400632020a0101010a010102000100028cadbdb4396bb55d5010000a60980000'])
9655 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a5054000000090800450001fdf2ca40004006302c0a0101010a010102000100028cadbdb4396bb55d5018000aa60c0000 dnl
9656 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9657 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9658 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9659 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9660 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9661 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9662 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9663 656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565 dnl
9664 6565656565656565656565656565656565656565656565656565656565656565656565650a'])
9665 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000028fc294000400628a20a0101020a01010100020001396bb55d8cadbf895010000a5ec30000'])
9666 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000028fc2a4000400628a10a0101020a01010100020001396bb55d8cadbf895011000a5ec20000'])
9667 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a505400000009080045000028f2cb4000400632000a0101010a010102000100028cadbf89396bb55e5010000a5ec20000'])
9668 AT_CHECK([ovs-appctl netdev-dummy/receive p2 '50540000000a505400000009080045000028f2cc4000400631ff0a0101010a010102000100028cadbf89396bb55e5011000a5ec10000'])
9669 AT_CHECK([ovs-appctl netdev-dummy/receive p1 '50540000000950540000000a080045000028258e40004006ff3d0a0101020a01010100020001396bb55e8cadbf8a5010000a5ec10000'])
9670
9671 AT_CHECK([ovs-appctl revalidator/purge])
9672
9673 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9674
9675 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9676 ])
9677
9678 AT_CHECK([ovs-ofctl dump-flows br0 | grep cookie=0x1 | grep -o "n_packets=[[0-9]]*"], [0], [dnl
9679 dnl No dropped packets
9680 n_packets=0
9681 ])
9682
9683 OVS_VSWITCHD_STOP
9684 AT_CLEANUP
9685
9686 dnl This is a truncated version of "ofproto-dpif - conntrack - controller",
9687 dnl with extra send-to-controller actions following ct_clear to show that
9688 dnl the connection tracking data has been cleared.
9689 AT_SETUP([ofproto-dpif - conntrack - ct_clear])
9690 OVS_VSWITCHD_START
9691
9692 add_of_ports br0 1 2
9693
9694 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg vconn:info ofproto_dpif:info])
9695
9696 dnl Allow new connections on p1->p2, but not on p2->p1.
9697 AT_DATA([flows.txt], [dnl
9698 dnl Table 0
9699 dnl
9700 table=0,priority=100,arp,action=normal
9701 table=0,priority=10,in_port=1,udp,action=ct(commit,zone=0),controller,ct_clear,controller
9702 table=0,priority=10,in_port=2,udp,action=ct(table=1,zone=0)
9703 table=0,priority=1,action=drop
9704 dnl
9705 dnl Table 1
9706 dnl
9707 table=1,priority=10,in_port=2,ct_state=+trk+est-new,udp,action=controller,ct_clear,controller
9708 table=1,priority=1,action=drop
9709 ])
9710
9711 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9712
9713 AT_CAPTURE_FILE([ofctl_monitor.log])
9714 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl -P nxt_packet_in --detach --no-chdir --pidfile 2> ofctl_monitor.log])
9715
9716 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9717
9718 dnl OK, now start a new connection from port 1.
9719 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.1.1.1,dst=10.1.1.2,proto=17,tos=0,ttl=64,frag=no),udp(src=1,dst=2)'])
9720
9721 dnl Now try a reply from port 2.
9722 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:0a,dst=50:54:00:00:00:09),eth_type(0x0800),ipv4(src=10.1.1.2,dst=10.1.1.1,proto=17,tos=0,ttl=64,frag=no),udp(src=2,dst=1)'])
9723
9724 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 8])
9725 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
9726
9727 dnl Check this output. We only see the latter two packets, not the first.
9728 dnl Note that the first packet doesn't have the ct_state bits set. This
9729 dnl happens because the ct_state field is available only after recirc.
9730 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
9731 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
9732 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9733 dnl
9734 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
9735 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=1,tp_dst=2 udp_csum:e9d6
9736 dnl
9737 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,in_port=2 (via action) data_len=42 (unbuffered)
9738 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9739 dnl
9740 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 in_port=2 (via action) data_len=42 (unbuffered)
9741 udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:0a,dl_dst=50:54:00:00:00:09,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=2,tp_dst=1 udp_csum:e9d6
9742 ])
9743 OVS_VSWITCHD_STOP
9744 AT_CLEANUP
9745
9746 AT_SETUP([ofproto-dpif - conntrack - ofproto/trace])
9747 OVS_VSWITCHD_START
9748
9749 add_of_ports br0 1 2 3 4
9750
9751 AT_DATA([flows.txt], [dnl
9752 dnl Table 0
9753 dnl
9754 table=0,priority=100,arp,action=normal
9755 table=0,priority=10,udp,action=ct(table=1,zone=0)
9756 table=0,priority=10,tcp,action=ct(table=2,zone=1)
9757 table=0,priority=1,action=drop
9758 dnl
9759 dnl Table 1
9760 dnl
9761 table=1,priority=10,in_port=1,ct_state=+trk+new,udp,action=ct(commit,zone=0),2
9762 table=1,priority=10,in_port=1,ct_state=+trk+est,udp,action=2
9763 table=1,priority=10,in_port=2,ct_state=+trk+est,udp,action=1
9764 table=1,priority=1,action=drop
9765 dnl
9766 dnl Table 2
9767 dnl
9768 table=2,priority=10,in_port=1,tcp,ct_state=+trk+new,tcp,action=ct(commit,zone=1),ct(table=3,zone=2)
9769 table=2,priority=10,in_port=1,tcp,ct_state=+trk+est,tcp,action=ct(table=3,zone=2)
9770 table=2,priority=1,action=drop
9771 dnl
9772 dnl Table 3
9773 dnl
9774 table=3,priority=10,in_port=1,tcp,ct_state=+trk+new,tcp,action=ct(commit,zone=2),4
9775 table=3,priority=10,in_port=1,tcp,ct_state=+trk+est,tcp,action=3
9776 table=2,priority=1,action=drop
9777 ])
9778
9779 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9780
9781 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=2,udp'], [0], [stdout])
9782 AT_CHECK([tail -1 stdout], [0],
9783 [Datapath actions: drop
9784 ])
9785
9786 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,udp'], [0], [stdout])
9787 AT_CHECK([tail -1 stdout], [0],
9788 [Datapath actions: ct(commit),2
9789 ])
9790
9791 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,tcp'], [0], [stdout])
9792 AT_CHECK([tail -1 stdout], [0],
9793 [Datapath actions: ct(commit,zone=2),4
9794 ])
9795
9796 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,tcp' --ct-next 'trk,est' --ct-next 'trk,est' ], [0], [stdout])
9797 AT_CHECK([tail -1 stdout], [0],
9798 [Datapath actions: 3
9799 ])
9800
9801 OVS_VSWITCHD_STOP
9802 AT_CLEANUP
9803
9804 AT_SETUP([ofproto - set mtu])
9805 OVS_VSWITCHD_START
9806
9807 add_of_ports br0 1
9808
9809 # Check that initial MTU is 1500 for 'br0' and 'p1'.
9810 AT_CHECK([ovs-vsctl get Interface br0 mtu], [0], [dnl
9811 1500
9812 ])
9813 AT_CHECK([ovs-vsctl get Interface p1 mtu], [0], [dnl
9814 1500
9815 ])
9816
9817 # Request new MTU for 'p1'
9818 AT_CHECK([ovs-vsctl set Interface p1 mtu_request=1600])
9819
9820 # Check that the new MTU is applied
9821 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface p1 mtu=1600])
9822 # The internal port 'br0' should have the same MTU value as p1, becase it's
9823 # the new bridge minimum.
9824 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1600])
9825
9826 AT_CHECK([ovs-vsctl del-port br0 p1])
9827
9828 # When 'p1' is deleted, the internal port should return to the default MTU
9829 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1500])
9830
9831 # New port with 'mtu_request' in the same transaction.
9832 AT_CHECK([ovs-vsctl add-port br0 p2 -- set int p2 type=dummy mtu_request=1600])
9833 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface p2 mtu=1600])
9834 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1600])
9835
9836 # Explicitly set mtu_request on the internal interface. This should prevent
9837 # the MTU from being overriden.
9838 AT_CHECK([ovs-vsctl set int br0 mtu_request=1700])
9839 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1700])
9840
9841 # The new MTU on p2 should not affect br0.
9842 AT_CHECK([ovs-vsctl set int p2 mtu_request=1400])
9843 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface p2 mtu=1400])
9844 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1700])
9845
9846 # Remove explicit mtu_request from br0. Now it should track the bridge
9847 # minimum again.
9848 AT_CHECK([ovs-vsctl set int br0 mtu_request=[[]]])
9849 AT_CHECK([ovs-vsctl --timeout=10 wait-until Interface br0 mtu=1400])
9850
9851 OVS_VSWITCHD_STOP
9852 AT_CLEANUP
9853
9854 AT_SETUP([ofproto - fragment prerequisites])
9855 OVS_VSWITCHD_START
9856
9857 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
9858
9859 add_of_ports br0 1
9860
9861 AT_DATA([flows.txt], [dnl
9862 priority=10,in_port=1,udp,tp_src=67,tp_dst=68,action=drop
9863 priority=1,in_port=1,udp,action=drop
9864 ])
9865
9866 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
9867
9868 AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:max-idle=10000])
9869
9870 ovs-appctl time/stop
9871 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'recirc_id(0),in_port(1),eth_type(0x0800),ipv4(proto=17,frag=later)'])
9872 ovs-appctl time/warp 5000
9873
9874 AT_CHECK([strip_ufid < ovs-vswitchd.log | filter_flow_install | strip_used], [0], [dnl
9875 recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x0800),ipv4(proto=17,frag=later), actions:drop
9876 ])
9877
9878 dnl Change the flow table. This will trigger revalidation of all the flows.
9879 AT_CHECK([ovs-ofctl add-flow br0 priority=5,in_port=1,action=drop])
9880 AT_CHECK([ovs-appctl revalidator/wait], [0])
9881
9882 dnl We don't want revalidators to delete any flow. If the flow has been
9883 dnl deleted it means that there's some inconsistency with the revalidation.
9884 AT_CHECK([grep flow_del ovs-vswitchd.log], [1])
9885
9886 OVS_VSWITCHD_STOP
9887 AT_CLEANUP