1 AT_BANNER([ofproto-dpif])
3 # Strips out uninteresting parts of flow output, as well as parts
4 # that vary from one run to another (e.g., timing and bond actions).
5 m4_define([STRIP_USED], [[sed '
6 s/used:[0-9]*\.[0-9]*/used:0.0/
8 m4_define([STRIP_XOUT], [[sed '
9 s/used:[0-9]*\.[0-9]*/used:0.0/
10 s/actions:.*/actions: <del>/
11 s/packets:[0-9]*/packets:0/
12 s/bytes:[0-9]*/bytes:0/
14 m4_define([FILTER_FLOW_INSTALL], [[
18 m4_define([FILTER_FLOW_DUMP], [[
19 grep 'flow_dump ' | sed '
21 s/used:[0-9]*\.[0-9]*/used:0.0/
24 AT_SETUP([ofproto-dpif - dummy interface])
25 # Create br0 with interfaces p1 and p7
26 # and br1 with interfaces p2 and p8
27 # with p1 and p2 connected via unix domain socket
29 [add-port br0 p1 -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
30 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
32 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
33 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
35 add-port br1 p2 -- set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
36 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
37 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
39 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
40 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
42 ovs-appctl time/warp 5000
43 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)'])
44 AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),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)'])
45 ovs-appctl time/warp 100
46 sleep 1 # wait for forwarders process packets
48 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
49 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
50 skb_priority(0),skb_mark(0/0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),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/0xff),icmp(type=8/0,code=0/0), actions: <del>
51 skb_priority(0),skb_mark(0/0),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/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
52 skb_priority(0),skb_mark(0/0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
57 AT_SETUP([ofproto-dpif, active-backup bonding])
58 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
59 # and br1 with interfaces p3, p4 and p8.
60 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
62 [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
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 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
67 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
68 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
70 add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
71 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
72 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
73 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
75 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
76 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
77 ovs-appctl netdev-dummy/set-admin-state up
78 ovs-appctl time/warp 100
79 ovs-appctl netdev-dummy/set-admin-state p2 down
81 ovs-appctl time/warp 100
82 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)'])
83 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)'])
84 ovs-appctl time/warp 100
85 ovs-appctl netdev-dummy/set-admin-state p2 up
86 ovs-appctl netdev-dummy/set-admin-state p1 down
87 ovs-appctl time/warp 100
88 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)'])
89 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)'])
90 ovs-appctl time/warp 100
91 ovs-appctl time/warp 100
93 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port([[348]])' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
94 skb_priority(0),skb_mark(0/0),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/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
95 skb_priority(0),skb_mark(0/0),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.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
96 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
97 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
98 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:09/00:00:00:00:00:00,tha=50:54:00:00:00:09/00:00:00:00:00:00), actions: <del>
99 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:0b/00:00:00:00:00:00,tha=50:54:00:00:00:0b/00:00:00:00:00:00), actions: <del>
104 AT_SETUP([ofproto-dpif, balance-slb bonding])
105 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
106 # and br1 with interfaces p4, p5, p6 and p8.
107 # p1 <-> p4, p2 <-> p5, p3 <-> p6
108 # Send some traffic, make sure the traffic are spread based on source mac.
110 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
111 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
112 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
113 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
114 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
116 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
117 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
118 fail-mode=secure -- \
119 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
120 add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
121 add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
122 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
124 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
125 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
126 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
128 ovs-appctl netdev-dummy/set-admin-state up
130 ovs-appctl time/warp 100
132 for i in `seq 0 100 |xargs printf '%02x\n'`;
134 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)"
135 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
138 ovs-appctl time/warp 100
139 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
140 # Make sure there is resonable distribution to all three ports.
141 # We don't want to make this check precise, in case hash function changes.
142 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
143 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
144 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
148 AT_SETUP([ofproto-dpif, balance-tcp bonding])
149 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
150 # and br1 with interfaces bond1(p4, p5, p6) and p8.
152 # Send some traffic, make sure the traffic are spread based on L4 headers.
154 [add-bond br0 bond0 p1 p2 p3 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 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
159 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
161 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
162 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
163 fail-mode=secure -- \
164 add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
165 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
166 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
167 set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
168 set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
169 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
170 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
172 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
173 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
174 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
178 ovs-appctl time/warp 100
179 ovs-appctl lacp/show > lacp.txt
180 ovs-appctl bond/show > bond.txt
182 for i in `seq 0 255` ;
184 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(0x010)"
185 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
188 ovs-appctl time/warp 100
189 ovs-appctl time/warp 100
190 ovs-appctl time/warp 100
191 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
192 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
193 # Make sure there is resonable distribution to all three ports.
194 # We don't want to make this check precise, in case hash function changes.
195 AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 24])
196 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24])
197 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24])
202 # Makes sure recirculation does not change the way packet is handled.
203 AT_SETUP([ofproto-dpif, balance-tcp bonding, different recirc flow ])
205 [add-bond br0 bond0 p1 p2 bond_mode=balance-tcp lacp=active \
206 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
207 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
208 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
210 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
211 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
212 fail-mode=standalone -- \
213 add-bond br1 bond1 p3 p4 bond_mode=balance-tcp lacp=active \
214 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
215 set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
216 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
217 add-port br1 br1- -- set interface br1- type=patch options:peer=br1+ ofport_request=100 -- \
219 set bridge br-int other-config:hwaddr=aa:77:aa:77:00:00 -- \
220 set bridge br-int datapath-type=dummy other-config:datapath-id=1235 \
221 fail-mode=secure -- \
222 add-port br-int br1+ -- set interface br1+ type=patch options:peer=br1- ofport_request=101 -- \
223 add-port br-int p5 -- set interface p5 ofport_request=5 type=dummy
225 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
228 # Waits for all ifaces enabled.
229 OVS_WAIT_UNTIL([test `ovs-appctl bond/show | grep -- "may_enable: true" | wc -l` -ge 4])
231 # The dl_vlan flow should not be ever matched,
232 # since recirculation should not change the flow handling.
233 AT_DATA([flows.txt], [dnl
234 table=0 priority=1 in_port=5 actions=mod_vlan_vid:1,output(101)
235 table=0 priority=2 in_port=5 dl_vlan=1 actions=drop
237 AT_CHECK([ovs-ofctl add-flows br-int flows.txt])
239 # Sends a packet to trigger recirculation.
240 # Should generate recirc_id(0x12d),dp_hash(0xcf/0xff).
241 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,proto=1,tos=0,ttl=64,frag=no)"])
243 # Forces revalidators to update all stats.
244 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [dnl
247 AT_CHECK([ovs-appctl upcall/enable-megaflows], [0], [dnl
251 # Checks the flow stats in br1, should only be one flow with non-zero
252 # 'n_packets' from internal table.
253 AT_CHECK([ovs-appctl bridge/dump-flows br1 | ofctl_strip | grep -- "n_packets" | grep -- "table_id" | sed -e 's/output:[[0-9]]\+/output/'], [0], [dnl
254 table_id=254, n_packets=1, n_bytes=64, priority=20,recirc_id=0x12d,dp_hash=0xcf/0xff,actions=output
257 # Checks the flow stats in br-int, should be only one match.
258 AT_CHECK([ovs-ofctl dump-flows br-int | ofctl_strip | sort], [0], [dnl
259 n_packets=1, n_bytes=60, priority=1,in_port=5 actions=mod_vlan_vid:1,output:101
260 priority=2,in_port=5,dl_vlan=1 actions=drop
267 AT_SETUP([ofproto-dpif - resubmit])
269 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
270 [16], [17], [18], [19], [20], [21])
271 AT_DATA([flows.txt], [dnl
272 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
273 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
274 table=0 in_port=3 priority=2000 icmp actions=output(20)
275 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
276 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
277 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
279 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
280 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])
281 AT_CHECK([tail -1 stdout], [0],
282 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
287 AT_SETUP([ofproto-dpif - goto table])
289 ADD_OF_PORTS([br0], [1], [10], [11])
290 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
291 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
292 echo "table=64 actions=output(11)" >> flows.txt
293 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
294 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])
295 AT_CHECK([tail -1 stdout], [0],
296 [Datapath actions: 10,11
301 AT_SETUP([ofproto-dpif - write actions])
303 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
304 AT_DATA([flows.txt], [dnl
305 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
306 table=1 ip actions=write_actions(output(13)),goto_table(2)
307 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
309 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
310 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])
311 AT_CHECK([tail -2 stdout], [0],
312 [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
313 Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11,set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),13
318 AT_SETUP([ofproto-dpif - clear actions])
320 ADD_OF_PORTS([br0], [1], [10], [11], [12])
321 AT_DATA([flows.txt], [dnl
322 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
323 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
325 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
326 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])
327 AT_CHECK([tail -2 stdout], [0],
328 [Megaflow: recirc_id=0,skb_priority=0,tcp,in_port=1,nw_frag=no,tp_src=8,tp_dst=9
329 Datapath actions: 10,set(tcp(src=91,dst=9)),11
334 AT_SETUP([ofproto-dpif - group chaining not supported])
336 ADD_OF_PORTS([br0], [1], [10], [11])
337 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,group:123,bucket=output:11'],
339 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
340 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
345 AT_SETUP([ofproto-dpif - all group in action list])
347 ADD_OF_PORTS([br0], [1], [10], [11])
348 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'])
349 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
350 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])
351 AT_CHECK([tail -2 stdout], [0],
352 [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
353 Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
358 AT_SETUP([ofproto-dpif - indirect group in action list])
360 ADD_OF_PORTS([br0], [1], [10])
361 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
362 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
363 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])
364 AT_CHECK([tail -1 stdout], [0],
365 [Datapath actions: 10
370 AT_SETUP([ofproto-dpif - all group in action set])
372 ADD_OF_PORTS([br0], [1], [10], [11])
373 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'])
374 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
375 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])
376 AT_CHECK([tail -2 stdout], [0],
377 [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
378 Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
383 AT_SETUP([ofproto-dpif - indirect group in action set])
385 ADD_OF_PORTS([br0], [1], [10])
386 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
387 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
388 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])
389 AT_CHECK([tail -1 stdout], [0],
390 [Datapath actions: 10
395 AT_SETUP([ofproto-dpif - select group])
397 ADD_OF_PORTS([br0], [1], [10], [11])
398 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
399 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
401 # Try a bunch of different flows and make sure that they get distributed
403 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
404 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])
405 tail -1 stdout >> results
407 sort results | uniq -c
408 AT_CHECK([sort results | uniq], [0],
409 [Datapath actions: 10
415 AT_SETUP([ofproto-dpif - select group with watch port])
417 ADD_OF_PORTS([br0], [1], [10], [11])
418 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
419 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
420 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])
421 AT_CHECK([tail -1 stdout], [0],
422 [Datapath actions: 11
427 AT_SETUP([ofproto-dpif - select group with weight])
429 ADD_OF_PORTS([br0], [1], [10], [11], [12])
430 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'])
431 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
432 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])
433 AT_CHECK([tail -1 stdout], [0],
434 [Datapath actions: 11
439 AT_SETUP([ofproto-dpif - fast failover group])
441 ADD_OF_PORTS([br0], [1], [10], [11])
442 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'])
443 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
444 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])
445 AT_CHECK([tail -1 stdout], [0],
446 [Datapath actions: drop
451 AT_SETUP([ofproto-dpif - registers])
453 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
454 AT_DATA([flows.txt], [dnl
455 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
456 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
457 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
458 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
460 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
461 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
462 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
463 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
464 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
465 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
466 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
467 in_port=9,reg0=0xdeadbeef actions=output:20
468 in_port=10,reg1=0xdeadbeef actions=output:21
469 in_port=11,reg2=0xeef22dea actions=output:22
471 dnl Sanilty check all registers
472 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
473 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
474 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
475 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
478 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
479 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])
480 AT_CHECK([tail -1 stdout], [0],
481 [Datapath actions: 20,21,22,33
486 AT_SETUP([ofproto-dpif - push-pop])
488 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
489 AT_DATA([flows.txt], [dnl
490 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
491 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
492 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
493 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
494 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
497 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
498 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])
499 AT_CHECK([tail -1 stdout], [0],
500 [Datapath actions: 33,22,21,20
505 AT_SETUP([ofproto-dpif - output])
507 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
508 AT_DATA([flows.txt], [dnl
509 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
510 in_port=2 actions=output:9
511 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
512 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
513 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
514 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
515 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
516 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
518 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
519 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])
520 AT_CHECK([tail -1 stdout], [0],
521 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
526 AT_SETUP([ofproto-dpif - dec_ttl])
528 ADD_OF_PORTS([br0], [1], [2], [3], [4])
529 AT_DATA([flows.txt], [dnl
530 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
531 table=1 in_port=1 action=dec_ttl,output:3
533 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
534 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])
535 AT_CHECK([tail -4 stdout], [0],
536 [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=2
537 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
538 This flow is handled by the userspace slow path because it:
539 - Sends "packet-in" messages to the OpenFlow controller.
541 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])
542 AT_CHECK([tail -2 stdout], [0],
543 [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=3
544 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),3,4
546 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])
547 AT_CHECK([tail -2 stdout], [0],
548 [Megaflow: recirc_id=0,skb_priority=0,ipv6,in_port=1,ipv6_src=::1,ipv6_dst=::2,ipv6_label=0x00000,nw_proto=10,nw_tos=112,nw_ecn=0,nw_ttl=128
549 Datapath actions: set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=127,frag=no)),2,set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=126,frag=no)),3,4
552 AT_CAPTURE_FILE([ofctl_monitor.log])
553 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
554 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])
555 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
556 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
557 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
558 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
563 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
564 dnl buffer to be resized just before pushing the id of the dec_ttl action.
565 dnl Thus the implementation must account for this by using the
566 dnl reallocated buffer rather than the original buffer.
568 dnl A number of similar rules are added to try and exercise
569 dnl xrealloc sufficiently that it returns a different base pointer
570 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
572 ADD_OF_PORTS([br0], [1])
573 (for i in `seq 0 255`; do
574 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
576 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
580 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
581 dnl buffer to be resized just before pushing the id of the dec_ttl action.
582 dnl Thus the implementation must account for this by using the
583 dnl reallocated buffer rather than the original buffer.
585 dnl A number of similar rules are added to try and exercise
586 dnl xrealloc sufficiently that it returns a different base pointer
587 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
589 ADD_OF_PORTS([br0], [1])
590 (for i in `seq 0 255`; do
591 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
593 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
597 dnl A note action at offset 24 in ofpacts will cause the ofpacts
598 dnl buffer to be resized just before pushing the id of the dec_ttl action.
599 dnl Thus the implementation must account for this by using the
600 dnl reallocated buffer rather than the original buffer.
602 dnl A number of similar rules are added to try and exercise
603 dnl xrealloc sufficiently that it returns a different base pointer
604 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
606 ADD_OF_PORTS([br0], [1])
607 (for i in `seq 0 255`; do
608 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
610 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
614 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
616 ADD_OF_PORTS([br0], [1], [2])
618 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
620 # "in_port" defaults to OFPP_NONE if it's not specified.
621 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"
622 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
623 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
632 AT_SETUP([ofproto-dpif - DSCP])
633 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
634 ADD_OF_PORTS([br0], [9])
635 AT_DATA([flows.txt], [dnl
636 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
638 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
639 AT_CHECK([ovs-vsctl -- \
640 set Port p1 qos=@newqos --\
641 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
642 --id=@q1 create Queue dscp=1 --\
643 --id=@q2 create Queue dscp=2], [0], [ignore])
644 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])
645 AT_CHECK([tail -2 stdout], [0],
646 [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=9,nw_src=1.1.1.1,nw_dst=2.2.2.2,nw_tos=252,nw_ecn=3,nw_ttl=128
647 Datapath actions: dnl
649 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
650 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(skb_priority(0x2)),1,dnl
652 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
653 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(skb_priority(0)),1,dnl
654 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
660 AT_SETUP([ofproto-dpif - output/flood flags])
662 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
664 AT_DATA([flows.txt], [dnl
665 in_port=local actions=local,flood
666 in_port=1 actions=flood
667 in_port=2 actions=all
668 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
669 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
671 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
672 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
673 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
675 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])
676 AT_CHECK([tail -1 stdout \
677 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
685 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])
686 AT_CHECK([tail -1 stdout \
687 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
695 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])
696 AT_CHECK([tail -1 stdout \
697 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
706 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])
707 AT_CHECK([tail -1 stdout], [0],
708 [Datapath actions: 100,1,2,4,6,7
711 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])
712 AT_CHECK([tail -1 stdout], [0],
713 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
718 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
719 OVS_VSWITCHD_START([dnl
720 add-port br0 p1 -- set Interface p1 type=dummy
722 ON_EXIT([kill `cat ovs-ofctl.pid`])
724 AT_CAPTURE_FILE([ofctl_monitor.log])
726 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
729 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)'
731 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
732 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
733 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
734 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
735 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
737 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
738 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
740 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
741 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
744 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
745 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
752 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
753 OVS_VSWITCHD_START([dnl
754 add-port br0 p1 -- set Interface p1 type=dummy
756 ON_EXIT([kill `cat ovs-ofctl.pid`])
758 AT_CAPTURE_FILE([ofctl_monitor.log])
759 AT_CHECK([ovs-ofctl del-flows br0])
761 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
763 dnl Test that missed packets are droped
765 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)'
767 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
769 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
772 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
773 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
774 OFPST_FLOW reply (OF1.3):
780 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
781 OVS_VSWITCHD_START([dnl
782 add-port br0 p1 -- set Interface p1 type=dummy
784 ON_EXIT([kill `cat ovs-ofctl.pid`])
786 AT_CAPTURE_FILE([ofctl_monitor.log])
787 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
789 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
792 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)'
794 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
795 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
796 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
797 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
798 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
800 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
801 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
803 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
804 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
807 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
808 sleep 1 # wait for revalidator to update stats
809 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
810 n_packets=3, n_bytes=180, actions=goto_table:1
811 OFPST_FLOW reply (OF1.2):
817 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
818 OVS_VSWITCHD_START([dnl
819 add-port br0 p1 -- set Interface p1 type=dummy
821 ON_EXIT([kill `cat ovs-ofctl.pid`])
823 AT_CAPTURE_FILE([ofctl_monitor.log])
824 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
826 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
829 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)'
832 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
833 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
836 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
837 sleep 1 # wait for revalidator to update stats
838 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
839 n_packets=3, n_bytes=180, actions=resubmit(1,1)
840 OFPST_FLOW reply (OF1.2):
846 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
847 OVS_VSWITCHD_START([dnl
848 add-port br0 p1 -- set Interface p1 type=dummy
850 ON_EXIT([kill `cat ovs-ofctl.pid`])
852 AT_CAPTURE_FILE([ofctl_monitor.log])
853 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
854 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
856 dnl Miss table 0, Hit table 1
857 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
860 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)'
862 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
863 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
865 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
866 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
867 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
869 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
870 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
872 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
873 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
876 dnl Hit table 0, Miss all other tables, sent to controller
877 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
880 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)'
882 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
883 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
885 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
886 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
887 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
889 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
890 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
892 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
893 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
896 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
897 sleep 1 # wait for revalidator to update stats
898 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
899 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
900 OFPST_FLOW reply (OF1.2):
906 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
907 OVS_VSWITCHD_START([dnl
908 add-port br0 p1 -- set Interface p1 type=dummy
910 ON_EXIT([kill `cat ovs-ofctl.pid`])
912 AT_CAPTURE_FILE([ofctl_monitor.log])
913 AT_DATA([flows.txt], [dnl
914 table=0 actions=goto_table(1)
915 table=2 dl_src=10:11:11:11:11:11 actions=controller
917 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
918 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
920 dnl Hit table 0, Miss table 1, Hit table 2
921 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
924 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)'
926 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
927 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
929 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
930 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
931 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
933 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
934 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
936 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
937 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
940 dnl Hit table 1, Miss all other tables, sent to controller
941 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
944 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)'
946 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
947 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
949 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
950 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
951 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
953 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
954 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
956 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
957 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
960 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
961 sleep 1 # wait for revalidator to update stats
962 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
963 n_packets=6, n_bytes=360, actions=goto_table:1
964 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
965 OFPST_FLOW reply (OF1.2):
971 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
972 OVS_VSWITCHD_START([dnl
973 add-port br0 p1 -- set Interface p1 type=dummy
975 ON_EXIT([kill `cat ovs-ofctl.pid`])
977 AT_CAPTURE_FILE([ofctl_monitor.log])
978 AT_DATA([flows.txt], [dnl
979 table=0 actions=resubmit(1,1)
980 table=2 dl_src=10:11:11:11:11:11 actions=controller
982 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
983 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
985 dnl Hit table 0, Miss table 1, Dropped
986 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
989 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)'
991 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
993 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
996 dnl Hit table 1, Dropped
997 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1000 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1002 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1004 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1007 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1008 sleep 1 # wait for revalidator to update stats
1009 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1010 n_packets=6, n_bytes=360, actions=resubmit(1,1)
1011 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1012 OFPST_FLOW reply (OF1.2):
1018 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
1019 OVS_VSWITCHD_START([dnl
1020 add-port br0 p1 -- set Interface p1 type=dummy
1022 ON_EXIT([kill `cat ovs-ofctl.pid`])
1024 AT_CAPTURE_FILE([ofctl_monitor.log])
1025 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1027 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1029 dnl Test that missed packets are droped
1031 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)'
1033 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1035 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1038 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1039 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1046 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
1047 OVS_VSWITCHD_START([dnl
1048 add-port br0 p1 -- set Interface p1 type=dummy
1050 ON_EXIT([kill `cat ovs-ofctl.pid`])
1052 AT_CAPTURE_FILE([ofctl_monitor.log])
1053 AT_CHECK([ovs-ofctl del-flows br0])
1054 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1055 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1057 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1059 dnl Test that missed packets are droped
1061 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)'
1063 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1065 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1068 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1069 sleep 1 # wait for revalidator to update stats
1070 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1071 n_packets=3, n_bytes=180, actions=goto_table:1
1072 OFPST_FLOW reply (OF1.2):
1078 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1079 OVS_VSWITCHD_START([dnl
1080 add-port br0 p1 -- set Interface p1 type=dummy
1082 ON_EXIT([kill `cat ovs-ofctl.pid`])
1084 AT_CAPTURE_FILE([ofctl_monitor.log])
1085 AT_CHECK([ovs-ofctl del-flows br0])
1086 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1087 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1089 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1091 dnl Test that missed packets are droped
1093 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)'
1095 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1097 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1100 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1101 sleep 1 # wait for revalidator to update stats
1102 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1103 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1104 OFPST_FLOW reply (OF1.2):
1110 AT_SETUP([ofproto-dpif - controller])
1111 OVS_VSWITCHD_START([dnl
1112 add-port br0 p1 -- set Interface p1 type=dummy
1114 ON_EXIT([kill `cat ovs-ofctl.pid`])
1116 AT_CAPTURE_FILE([ofctl_monitor.log])
1117 AT_DATA([flows.txt], [dnl
1118 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1119 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1120 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1122 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1123 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)
1124 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)
1125 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1126 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)
1127 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1128 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1129 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1130 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
1131 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
1132 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
1133 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
1134 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
1135 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
1136 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
1137 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
1138 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1139 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1140 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
1141 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
1143 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1146 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1149 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)'
1151 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1152 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1154 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1155 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1156 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
1158 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1159 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
1161 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1162 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
1165 dnl Singleton controller action.
1166 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1169 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)'
1171 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1172 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1174 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1175 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1176 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1178 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1179 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1181 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1182 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1185 dnl Modified controller action.
1186 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1189 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)'
1191 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1192 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1194 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1195 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1196 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
1198 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1199 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
1201 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1202 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
1205 dnl Modified VLAN controller action.
1206 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1209 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)'
1211 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1212 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1214 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1215 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1216 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1218 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1219 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1221 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1222 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1225 dnl Modified MPLS controller action.
1226 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1229 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=16,tos=0,ttl=64,frag=no)'
1231 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1232 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1234 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1235 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1236 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1238 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1239 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1241 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1242 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1245 dnl Modified MPLS controller action.
1246 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1249 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)'
1251 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1252 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1254 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1255 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1256 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1258 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1259 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1261 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1262 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1265 dnl Modified MPLS controller action.
1266 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1268 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)
1271 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)'
1273 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1274 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1276 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1277 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1278 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1280 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1281 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1283 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1284 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1287 dnl Modified MPLS controller action.
1288 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1291 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))'
1293 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1294 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1296 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1297 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1298 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1300 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1301 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1303 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1304 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1307 dnl Modified MPLS controller action.
1308 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1311 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)'
1313 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1314 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1316 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1317 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1318 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1320 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1321 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1323 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1324 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1327 dnl Modified MPLS controller action.
1328 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1331 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)'
1333 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1334 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1336 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1337 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1338 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1340 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1341 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1343 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1344 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1347 dnl Modified MPLS controller action.
1348 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1351 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)'
1353 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1354 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1356 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1357 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1358 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1360 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1361 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1363 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1364 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1367 dnl Modified MPLS controller action.
1368 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1371 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)'
1373 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1374 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1376 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1377 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1378 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1380 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1381 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1383 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1384 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1387 dnl Modified MPLS actions.
1388 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1391 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)'
1393 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1394 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1396 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1397 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1398 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1400 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1401 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1403 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1404 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
1407 dnl Modified MPLS ipv6 controller action.
1408 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1411 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)'
1413 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1414 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1416 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1417 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1418 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1420 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1421 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1423 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1424 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1428 dnl Modified MPLS pop action.
1429 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1430 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)
1431 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1433 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1436 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'
1439 # 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)'
1441 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1442 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1444 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1445 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1446 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
1448 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1449 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
1451 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1452 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
1456 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1459 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)'
1461 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1462 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1464 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1465 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1466 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:0
1468 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1469 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:0
1471 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered)
1472 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:0
1474 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered)
1475 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:0
1477 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered)
1478 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:1a03
1480 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1481 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11,tcp_flags=0x001 tcp_csum:3205
1483 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1484 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=11,tcp_flags=0x001 tcp_csum:31b8
1486 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1487 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=0x001 tcp_csum:316d
1489 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1490 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=0x001 tcp_csum:316d
1494 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1497 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'
1499 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1500 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1502 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1503 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1504 udp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1506 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1507 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1509 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered)
1510 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1512 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered)
1513 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
1515 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered)
1516 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:2c37
1518 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1519 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:4439
1521 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1522 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=11 udp_csum:43ec
1524 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1525 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1527 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
1528 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1531 dnl Modified ARP controller action.
1532 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1535 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)'
1538 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1539 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1540 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1541 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1542 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1543 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1544 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1545 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1546 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1547 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1548 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1549 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1550 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1551 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1552 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1553 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1554 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1555 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1556 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1557 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1558 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1561 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1564 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1567 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'
1570 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1571 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1572 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1573 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1574 sctp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1576 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1577 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1579 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=102 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=102 (unbuffered)
1580 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1582 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=102 (unbuffered)
1583 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1585 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=102 (unbuffered)
1586 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1588 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1589 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1591 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1592 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=2223 sctp_csum:7f12662e
1594 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1595 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
1597 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1598 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
1601 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1602 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1603 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1604 cookie=0x3, table=1, n_packets=3, n_bytes=218, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
1605 cookie=0x4, table=2, n_packets=3, n_bytes=218, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
1606 cookie=0x5, table=3, n_packets=3, n_bytes=218, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
1607 cookie=0x6, table=4, n_packets=3, n_bytes=218, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
1608 cookie=0x7, table=5, n_packets=3, n_bytes=218, in_port=84 actions=load:0x5->NXM_NX_REG4[[]],load:0x6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,CONTROLLER:65535,resubmit(85,6)
1609 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1610 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1611 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
1612 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
1613 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
1614 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
1615 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,CONTROLLER:65535
1616 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),CONTROLLER:65535
1617 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),CONTROLLER:65535
1618 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,CONTROLLER:65535
1619 cookie=0xa, n_packets=3, n_bytes=180, dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,CONTROLLER:65535
1620 cookie=0xb, n_packets=3, n_bytes=180, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
1621 cookie=0xc, n_packets=3, n_bytes=180, dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:0x3e8->OXM_OF_MPLS_LABEL[[]],load:0x7->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
1622 cookie=0xd, n_packets=3, n_bytes=180, arp,dl_src=80:88:88:88:88:88 actions=load:0x2->NXM_OF_ARP_OP[[]],CONTROLLER:65535,load:0xc0a88001->NXM_OF_ARP_SPA[[]],CONTROLLER:65535,load:0x404444444441->NXM_NX_ARP_THA[[]],load:0x1010101->NXM_OF_ARP_SPA[[]],load:0x2020202->NXM_OF_ARP_TPA[[]],CONTROLLER:65535
1623 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1624 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1632 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1633 OVS_VSWITCHD_START([dnl
1634 add-port br0 p1 -- set Interface p1 type=dummy
1636 ON_EXIT([kill `cat ovs-ofctl.pid`])
1638 AT_CAPTURE_FILE([ofctl_monitor.log])
1639 # A table-miss flow has priority 0 and no match
1640 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1642 dnl Singleton controller action.
1643 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1646 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)'
1648 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1649 ovs-appctl -t ovs-ofctl exit
1651 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1652 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1653 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1655 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1656 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1658 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1659 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1662 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1664 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1665 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1673 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1674 OVS_VSWITCHD_START([dnl
1675 add-port br0 p1 -- set Interface p1 type=dummy
1677 ON_EXIT([kill `cat ovs-ofctl.pid`])
1679 AT_CAPTURE_FILE([ofctl_monitor.log])
1680 # A table-miss flow has priority 0 and no match
1681 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1683 dnl Singleton controller action.
1684 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1687 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)'
1689 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1690 ovs-appctl -t ovs-ofctl exit
1692 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1694 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1695 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1696 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1698 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1699 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1701 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1702 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1705 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1707 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1708 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1709 OFPST_FLOW reply (OF1.3):
1715 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1717 ADD_OF_PORTS([br0], [1], [2])
1719 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1720 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'
1722 # Input some packets that should follow the arp modification slow-path.
1724 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)'
1726 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1728 # Check the packets that were output.
1729 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1730 arp,metadata=0,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
1731 arp,metadata=0,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
1732 arp,metadata=0,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
1733 arp,metadata=0,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
1734 arp,metadata=0,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
1735 arp,metadata=0,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
1736 arp,metadata=0,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
1737 arp,metadata=0,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
1738 arp,metadata=0,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
1744 AT_SETUP([ofproto-dpif - VLAN handling])
1746 [set Bridge br0 fail-mode=standalone -- \
1747 add-port br0 p1 trunks=10,12 -- \
1748 add-port br0 p2 tag=10 -- \
1749 add-port br0 p3 tag=12 \
1750 other-config:priority-tags=true -- \
1751 add-port br0 p4 tag=12 -- \
1752 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1753 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1754 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1755 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1756 other-config:priority-tags=true -- \
1757 set Interface p1 type=dummy -- \
1758 set Interface p2 type=dummy -- \
1759 set Interface p3 type=dummy -- \
1760 set Interface p4 type=dummy -- \
1761 set Interface p5 type=dummy -- \
1762 set Interface p6 type=dummy -- \
1763 set Interface p7 type=dummy -- \
1764 set Interface p8 type=dummy --])
1766 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1767 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1773 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1774 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1777 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1778 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1782 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1783 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1786 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1787 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1788 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1789 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1790 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1797 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1798 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1799 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1806 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1807 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1808 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1815 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1816 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1817 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1818 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1819 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1822 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1823 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1824 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1825 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1826 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1827 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1828 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1831 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1832 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1833 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1834 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1835 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1836 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1837 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1840 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1841 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1842 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1843 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1844 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1845 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1846 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1849 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1850 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1858 if test $vlan = none; then
1859 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1861 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))"
1864 echo "----------------------------------------------------------------------"
1865 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1867 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1868 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1870 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1872 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1878 AT_SETUP([ofproto-dpif - MPLS handling])
1879 OVS_VSWITCHD_START([dnl
1880 add-port br0 p1 -- set Interface p1 type=dummy
1882 ON_EXIT([kill `cat ovs-ofctl.pid`])
1884 AT_CAPTURE_FILE([ofctl_monitor.log])
1885 AT_DATA([flows.txt], [dnl
1886 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1887 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1888 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1890 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1892 dnl In this test, we push an MPLS tag to an ethernet packet.
1893 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1896 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)'
1898 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1899 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1901 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1902 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1903 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1904 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1905 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1906 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1907 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1909 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1910 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1911 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1912 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1913 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1914 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1916 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1917 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1918 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1919 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1920 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1921 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1924 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1925 dnl copied exactly, except for the BOS bit.
1926 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1929 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)'
1931 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1932 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1934 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1935 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1936 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1937 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1938 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1939 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1940 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1942 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1943 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1944 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1945 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1946 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1947 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1949 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1950 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1951 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1952 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1953 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1954 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1957 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1958 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1959 dnl to the MPLS ethertype of the MPLS push action which differs to that
1960 dnl of the input packet.
1961 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1964 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)'
1966 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1967 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1969 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1970 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1971 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1972 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1973 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1974 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1975 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1977 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1978 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1979 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1980 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1981 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1982 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1984 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1985 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1986 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1987 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1988 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1989 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1995 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1996 OVS_VSWITCHD_START([dnl
1997 add-port br0 p1 -- set Interface p1 type=dummy
1999 ON_EXIT([kill `cat ovs-ofctl.pid`])
2001 AT_CAPTURE_FILE([ofctl_monitor.log])
2002 AT_DATA([flows.txt], [dnl
2003 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
2004 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
2005 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
2006 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
2007 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
2008 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
2009 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
2010 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
2011 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
2012 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
2014 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
2016 dnl Modified MPLS controller action.
2017 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2018 dnl both of these in the final flow
2019 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2022 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)'
2024 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2025 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2027 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2028 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2029 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2030 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2031 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2032 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2033 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2034 00000040 00 00 00 00
2036 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2037 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2038 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2039 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2040 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2041 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2042 00000040 00 00 00 00
2044 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2045 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2046 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2047 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2048 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2049 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2050 00000040 00 00 00 00
2053 dnl Modified MPLS controller action.
2054 dnl In this test, the input packet in vlan-tagged, which should be stripped
2055 dnl before we push the MPLS and VLAN tags.
2056 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2059 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))'
2061 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2062 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2064 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2065 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2066 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2067 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2068 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2069 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2070 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2072 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2073 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2074 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2075 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2076 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2077 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2079 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2080 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2081 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2082 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2083 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2084 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2087 dnl Modified MPLS controller action.
2088 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2089 dnl both of these in the final flow
2090 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2093 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)'
2095 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2096 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2098 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2099 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2100 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2101 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2102 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2103 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2104 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2105 00000040 00 00 00 00
2107 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2108 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2109 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2110 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2111 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2112 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2113 00000040 00 00 00 00
2115 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2116 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2117 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2118 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2119 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2120 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2121 00000040 00 00 00 00
2124 dnl Modified MPLS controller action.
2125 dnl In this test, the input packet in vlan-tagged, which should be stripped
2126 dnl before we push the MPLS and VLAN tags.
2127 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2130 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))'
2132 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2133 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2135 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2136 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2137 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2138 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2139 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2140 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2141 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2143 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2144 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2145 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2146 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2147 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2148 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2150 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2151 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2152 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2153 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2154 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2155 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2158 dnl Modified MPLS controller action.
2159 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2160 dnl actions are reordered, so we see both of these in the final flow.
2161 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2164 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)'
2166 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2167 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2169 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2170 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2171 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2172 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2173 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2174 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2175 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2176 00000040 00 00 00 00
2178 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2179 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2180 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2181 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2182 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2183 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2184 00000040 00 00 00 00
2186 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2187 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2188 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2189 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2190 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2191 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2192 00000040 00 00 00 00
2195 dnl Modified MPLS controller action.
2196 dnl In this test, the input packet in vlan-tagged, which should be stripped
2197 dnl before we push the MPLS and VLAN tags.
2198 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2201 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))'
2203 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2204 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2206 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2207 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2208 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2209 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2210 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2211 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2212 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2214 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2215 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2216 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2217 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2218 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2219 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2221 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2222 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2223 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2224 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2225 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2226 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2229 dnl Modified MPLS controller action.
2230 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2231 dnl actions are reordered, so we see both of these in the final flow.
2232 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2235 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)'
2237 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2238 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2240 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2241 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2242 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2243 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2244 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2245 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2246 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2247 00000040 00 00 00 00
2249 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2250 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2251 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2252 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2253 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2254 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2255 00000040 00 00 00 00
2257 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2258 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2259 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2260 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2261 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2262 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2263 00000040 00 00 00 00
2266 dnl Modified MPLS controller action.
2267 dnl In this test, the input packet in vlan-tagged, which should be stripped
2268 dnl before we push the MPLS and VLAN tags.
2269 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2272 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))'
2274 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2275 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2277 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2278 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2279 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2280 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2281 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2282 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2283 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2285 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2286 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2287 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2288 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2289 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2290 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2292 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2293 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2294 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2295 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2296 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2297 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2300 dnl Modified MPLS controller action.
2301 dnl In this test, the input packet in vlan-tagged, which should be stripped
2302 dnl before we push the MPLS and VLAN tags.
2303 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2306 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))'
2308 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2309 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2311 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2312 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2313 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2314 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2315 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2316 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2317 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2319 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2320 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2321 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2322 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2323 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2324 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2326 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2327 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2328 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2329 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2330 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2331 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2334 dnl Modified MPLS controller action.
2335 dnl In this test, the input packet in vlan-tagged, which should be modified
2336 dnl before we push MPLS and VLAN tags.
2337 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2340 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))'
2342 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2343 ovs-appctl -t ovs-ofctl exit
2345 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2346 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2347 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2348 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2349 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2350 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2351 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2353 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2354 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2355 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2356 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2357 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2358 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2360 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2361 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2362 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2363 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2364 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2365 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2368 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2369 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2370 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
2371 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
2372 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
2373 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
2374 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2375 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2376 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2377 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2378 cookie=0xa, n_packets=3, n_bytes=180, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:58 actions=load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2379 cookie=0xa, n_packets=3, n_bytes=180, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:59 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],set_field:1->vlan_pcp,load:0x63->OXM_OF_VLAN_VID[[]],CONTROLLER:65535
2380 OFPST_FLOW reply (OF1.2):
2386 AT_SETUP([ofproto-dpif - fragment handling])
2388 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2389 AT_DATA([flows.txt], [dnl
2390 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2391 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2392 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2393 priority=50 tcp ip_frag=no actions=output:4
2394 priority=50 tcp ip_frag=first actions=output:5
2395 priority=50 tcp ip_frag=later actions=output:6
2397 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2399 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"
2400 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2401 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2402 later_flow="$base_flow,frag=later)"
2404 # mode no first later
2407 'drop 1 drop drop' \
2416 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2417 for type in no first later; do
2418 eval flow=\$${type}_flow exp_output=\$$type
2419 printf "\n%s\n" "----$mode $type-----"
2420 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2422 if test $mode = drop && test $type != no; then
2423 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2425 echo "Datapath actions: $exp_output" >> expout
2426 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2432 AT_SETUP([ofproto-dpif - exit])
2434 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2435 AT_DATA([flows.txt], [dnl
2436 in_port=1 actions=output:10,exit,output:11
2437 in_port=2 actions=output:12,resubmit:1,output:12
2438 in_port=3 actions=output:13,resubmit:2,output:14
2440 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2441 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])
2442 AT_CHECK([tail -1 stdout], [0],
2443 [Datapath actions: 10
2445 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])
2446 AT_CHECK([tail -1 stdout], [0],
2447 [Datapath actions: 12,10
2449 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])
2450 AT_CHECK([tail -1 stdout], [0],
2451 [Datapath actions: 13,12,10
2457 AT_SETUP([ofproto-dpif - mirroring, select_all])
2459 ADD_OF_PORTS([br0], 1, 2, 3)
2461 set Bridge br0 mirrors=@m --\
2462 --id=@p3 get Port p3 --\
2463 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2465 AT_DATA([flows.txt], [dnl
2466 in_port=1 actions=output:2
2467 in_port=2 actions=output:1
2469 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2471 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)"
2472 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2473 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2474 [Datapath actions: 2,3
2477 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)"
2478 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2479 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2480 [Datapath actions: 1,3
2487 AT_SETUP([ofproto-dpif - mirroring, select_src])
2489 ADD_OF_PORTS([br0], 1, 2, 3)
2491 set Bridge br0 mirrors=@m --\
2492 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2493 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2495 AT_DATA([flows.txt], [dnl
2496 in_port=1 actions=output:2
2497 in_port=2 actions=output:1
2499 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2501 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)"
2502 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2503 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2504 [Datapath actions: 2,3
2507 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)"
2508 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2509 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2510 [Datapath actions: 1
2515 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2517 ADD_OF_PORTS([br0], 1, 2)
2519 set Bridge br0 mirrors=@m --\
2520 --id=@p2 get Port p2 --\
2521 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2523 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2525 # "in_port" defaults to OFPP_NONE if it's not specified.
2526 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"
2527 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2528 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2529 [Datapath actions: 1,2
2536 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2538 ADD_OF_PORTS([br0], 1, 2, 3)
2540 set Bridge br0 mirrors=@m --\
2541 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2542 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2544 AT_DATA([flows.txt], [dnl
2545 in_port=1 actions=output:2
2546 in_port=2 actions=output:1
2548 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2550 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)"
2551 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2552 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2553 [Datapath actions: 2,3
2556 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)"
2557 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2558 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2559 [Datapath actions: 1
2566 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2568 ADD_OF_PORTS([br0], 1, 2, 3)
2570 set Bridge br0 mirrors=@m --\
2571 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2572 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2574 AT_DATA([flows.txt], [dnl
2575 in_port=1, actions=output:2
2577 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2579 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)"
2580 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2581 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2582 [Datapath actions: 2
2585 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))"
2586 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2587 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2588 [Datapath actions: 2
2591 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))"
2592 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2593 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2594 [Datapath actions: 2,3
2601 AT_SETUP([ofproto-dpif - mirroring, output_port])
2603 ADD_OF_PORTS([br0], 1, 2, 3)
2605 set Bridge br0 mirrors=@m --\
2606 --id=@p3 get Port p3 --\
2607 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2609 AT_DATA([flows.txt], [dnl
2610 in_port=1 actions=mod_vlan_vid:17,output:2
2611 in_port=2 actions=output:1
2613 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2615 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)"
2616 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2617 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2618 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2621 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)"
2622 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2623 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2624 [Datapath actions: 1,3
2630 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2632 ADD_OF_PORTS([br0], 1, 2)
2634 set Bridge br0 mirrors=@m --\
2635 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2637 AT_DATA([flows.txt], [dnl
2638 in_port=1 actions=output:2
2639 in_port=2 actions=mod_vlan_vid:17,output:1
2641 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2643 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)"
2644 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2645 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2647 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2648 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2650 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2652 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)"
2653 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2654 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2656 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2657 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2659 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2664 # Two testcases below are for the ofproto/trace command
2665 # The first one tests all correct syntax:
2666 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2667 # ofproto/trace br_name br_flow [-generate|packet]
2668 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2669 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2670 ADD_OF_PORTS([br0], 1, 2, 3)
2672 AT_DATA([flows.txt], [dnl
2673 in_port=1 actions=output:2
2674 in_port=2 actions=output:1
2676 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2678 odp_flow="in_port(1)"
2680 # Test command: ofproto/trace odp_flow with in_port as a name.
2681 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2682 AT_CHECK([tail -1 stdout], [0], [dnl
2686 odp_flow="in_port(1)"
2687 # Test command: ofproto/trace odp_flow
2688 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2689 AT_CHECK([tail -1 stdout], [0], [dnl
2693 # Test command: ofproto/trace dp_name odp_flow
2694 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2695 AT_CHECK([tail -1 stdout], [0], [dnl
2698 # Test commmand: ofproto/trace br_name br_flow
2699 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2700 AT_CHECK([tail -1 stdout], [0], [dnl
2704 # Delete the inserted flows
2705 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2706 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2708 # This section beflow tests the [-generate] option
2709 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2710 br_flow="arp,metadata=0,in_port=3,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=ff:ff:ff:ff:ff:ff"
2712 # Test command: ofproto/trace odp_flow
2713 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2714 # Check for no MAC learning entry
2715 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2719 # Test command: ofproto/trace br_name br_flow
2720 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2721 # Check for no MAC learning entry
2722 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2726 # Test command: ofproto/trace odp_flow -generate
2727 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2728 # Check for the MAC learning entry
2729 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2731 3 0 50:54:00:00:00:05 ?
2734 # Test command: ofproto/trace dp_name odp_flow -generate
2735 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2736 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2737 -generate], [0], [stdout])
2738 # Check for both MAC learning entries
2739 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2741 3 0 50:54:00:00:00:05 ?
2742 1 0 50:54:00:00:00:06 ?
2745 # Test command: ofproto/trace br_name br_flow -generate
2746 AT_CHECK([ovs-appctl ofproto/trace br0 \
2747 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2748 -generate], [0], [stdout])
2749 # Check for both MAC learning entries.
2750 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2752 3 0 50:54:00:00:00:05 ?
2753 1 0 50:54:00:00:00:06 ?
2754 2 0 50:54:00:00:00:07 ?
2757 # This section beflow tests the [packet] option
2758 # The ovs-tcpundump of packets between port1 and port2
2759 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2760 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2762 # Construct the MAC learning table
2763 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2764 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2765 -generate], [0], [stdout])
2767 # Construct the MAC learning table
2768 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2769 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2770 -generate], [0], [stdout])
2772 # Test command: ofproto/trace odp_flow packet
2773 AT_CHECK([ovs-appctl ofproto/trace \
2774 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2775 AT_CHECK([tail -1 stdout], [0], [dnl
2778 AT_CHECK([head -n 2 stdout], [0], [dnl
2780 Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,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_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
2783 # Test command: ofproto/trace dp_name odp_flow packet
2784 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2785 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2786 AT_CHECK([tail -1 stdout], [0], [dnl
2789 AT_CHECK([head -n 2 stdout], [0], [dnl
2791 Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,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_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
2794 # Test command: ofproto/trace br_name br_flow packet
2795 AT_CHECK([ovs-appctl ofproto/trace br0 \
2796 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2797 AT_CHECK([tail -1 stdout], [0], [dnl
2800 AT_CHECK([head -n 2 stdout], [0], [dnl
2802 Flow: pkt_mark=0x1,skb_priority=0x2,arp,metadata=0,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_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
2808 # The second test tests the corner cases
2809 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2811 ADD_OF_PORTS([br0], 1, 2)
2814 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2815 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2817 generate="-generate"
2818 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2820 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2826 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2828 AT_CHECK([tail -2 stderr], [0], [dnl
2829 Cannot find the datapath
2830 ovs-appctl: ovs-vswitchd: server returned an error
2833 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2839 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2841 AT_CHECK([tail -2 stderr], [0], [dnl
2842 Cannot find the datapath
2843 ovs-appctl: ovs-vswitchd: server returned an error
2846 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2852 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2854 AT_CHECK([tail -2 stderr], [0], [dnl
2855 Cannot find the datapath
2856 ovs-appctl: ovs-vswitchd: server returned an error
2859 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2865 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2867 AT_CHECK([tail -2 stderr], [0], [dnl
2868 Cannot find the datapath
2869 ovs-appctl: ovs-vswitchd: server returned an error
2872 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2878 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2880 AT_CHECK([tail -2 stderr], [0], [dnl
2882 ovs-appctl: ovs-vswitchd: server returned an error
2885 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2891 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2893 AT_CHECK([tail -2 stderr], [0], [dnl
2894 Must specify bridge name
2895 ovs-appctl: ovs-vswitchd: server returned an error
2898 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2899 AT_CHECK([ovs-appctl ofproto/trace \
2900 ovs-dummy "$odp_flow" garbage_option],
2901 [2], [stdout],[stderr])
2902 AT_CHECK([tail -2 stderr], [0], [dnl
2903 Trailing garbage in packet data
2904 ovs-appctl: ovs-vswitchd: server returned an error
2907 # Test incorrect command: ofproto/trace with 4 arguments
2908 AT_CHECK([ovs-appctl ofproto/trace \
2909 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2910 AT_CHECK([tail -2 stderr], [0], [dnl
2911 "ofproto/trace" command takes at most 3 arguments
2912 ovs-appctl: ovs-vswitchd: server returned an error
2915 # Test incorrect command: ofproto/trace with 0 argument
2916 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2917 AT_CHECK([tail -2 stderr], [0], [dnl
2918 "ofproto/trace" command requires at least 1 arguments
2919 ovs-appctl: ovs-vswitchd: server returned an error
2925 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2927 ADD_OF_PORTS([br0], 1, 2, 3)
2929 AT_DATA([flows.txt], [dnl
2930 in_port=1 actions=output:2
2931 in_port=2 actions=output:1
2933 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2935 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2936 AT_CHECK([tail -1 stdout], [0], [dnl
2937 Datapath actions: push_vlan(vid=123,pcp=0),2
2944 m4_define([OFPROTO_TRACE],
2946 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2947 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2949 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2952 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2955 AT_SETUP([ofproto-dpif - MAC learning])
2956 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2957 ADD_OF_PORTS([br0], 1, 2, 3)
2959 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)'
2961 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2964 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2968 # Check for the MAC learning entry.
2969 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2971 3 0 50:54:00:00:00:05 ?
2974 # Trace a packet arrival destined for the learned MAC.
2975 # (This will also learn a MAC.)
2978 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2982 # Check for both MAC learning entries.
2983 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2985 3 0 50:54:00:00:00:05 ?
2986 1 0 50:54:00:00:00:06 ?
2989 # Trace a packet arrival that updates the first learned MAC entry.
2992 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2996 # Check that the MAC learning entry was updated.
2997 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2999 1 0 50:54:00:00:00:06 ?
3000 2 0 50:54:00:00:00:05 ?
3003 # Add another bridge.
3007 -- set bridge br1 datapath-type=dummy])
3008 ADD_OF_PORTS([br1], 4, 5)
3010 # Trace some packet arrivals in br1 to create MAC learning entries there too.
3013 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
3018 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
3022 # Check that the MAC learning entries were added.
3023 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3025 4 0 50:54:00:00:00:06 ?
3026 5 0 50:54:00:00:00:07 ?
3029 # Delete port p1 and see that its MAC learning entry disappeared, and
3030 # that the MAC learning entry for the same MAC was also deleted from br1.
3031 AT_CHECK([ovs-vsctl del-port p1])
3032 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3034 2 0 50:54:00:00:00:05 ?
3036 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3038 5 0 50:54:00:00:00:07 ?
3044 AT_SETUP([ofproto-dpif - MAC table overflow])
3046 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
3047 ADD_OF_PORTS([br0], 1, 2, 3)
3049 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)'
3051 AT_CHECK([ovs-appctl time/stop])
3053 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
3054 for i in 0 1 2 3 4 5 6 7 8 9; do
3057 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
3060 ovs-appctl time/warp 1000
3063 # Check for the MAC learning entries.
3064 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3066 3 0 50:54:00:00:00:00
3067 3 0 50:54:00:00:00:01
3068 3 0 50:54:00:00:00:02
3069 3 0 50:54:00:00:00:03
3070 3 0 50:54:00:00:00:04
3071 3 0 50:54:00:00:00:05
3072 3 0 50:54:00:00:00:06
3073 3 0 50:54:00:00:00:07
3074 3 0 50:54:00:00:00:08
3075 3 0 50:54:00:00:00:09
3079 # Trace another ARP packet on another MAC.
3082 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3086 # Check that the new one chased the oldest one out of the table.
3087 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3089 3 0 50:54:00:00:00:01 ?
3090 3 0 50:54:00:00:00:02 ?
3091 3 0 50:54:00:00:00:03 ?
3092 3 0 50:54:00:00:00:04 ?
3093 3 0 50:54:00:00:00:05 ?
3094 3 0 50:54:00:00:00:06 ?
3095 3 0 50:54:00:00:00:07 ?
3096 3 0 50:54:00:00:00:08 ?
3097 3 0 50:54:00:00:00:09 ?
3098 3 0 50:54:00:00:00:10 ?
3104 AT_SETUP([ofproto-dpif - MAC table overflow fairness])
3106 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
3107 ADD_OF_PORTS([br0], 1, 2, 3, 4, 5, 6)
3109 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)'
3111 AT_CHECK([ovs-appctl time/stop])
3113 # Trace packets with 2 different source MACs arriving on each of the 5
3114 # ports, filling up the 10-entry learning table.
3115 for i in 0 1 2 3 4 5 6 7 8 9; do
3117 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
3118 ovs-appctl time/warp 1000
3121 # Check for the MAC learning entries.
3122 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3124 1 0 50:54:00:00:00:00
3125 1 0 50:54:00:00:00:01
3126 2 0 50:54:00:00:00:02
3127 2 0 50:54:00:00:00:03
3128 3 0 50:54:00:00:00:04
3129 3 0 50:54:00:00:00:05
3130 4 0 50:54:00:00:00:06
3131 4 0 50:54:00:00:00:07
3132 5 0 50:54:00:00:00:08
3133 5 0 50:54:00:00:00:09
3137 # Now trace 16 new MACs on another port.
3138 for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
3139 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
3140 ovs-appctl time/warp 1000
3143 # Check the results.
3145 # Our eviction algorithm on overflow is that an arbitrary (but deterministic)
3146 # one of the ports with the most learned MACs loses the least recently used
3147 # one. Thus, the new port will end up with 3 MACs, 3 of the old ports with 1
3148 # MAC each, and the other 2 of the old ports with 2 MACs each.
3150 # (If someone changes lib/heap.c to do something different with equal-priority
3151 # nodes, then the output below could change, but it would still follow the
3152 # rules explained above.)
3153 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3155 1 0 50:54:00:00:00:01
3156 2 0 50:54:00:00:00:03
3157 3 0 50:54:00:00:00:04
3158 3 0 50:54:00:00:00:05
3159 4 0 50:54:00:00:00:07
3160 5 0 50:54:00:00:00:08
3161 5 0 50:54:00:00:00:09
3162 6 0 50:54:00:00:0d:ff
3163 6 0 50:54:00:00:0e:ff
3164 6 0 50:54:00:00:0f:ff
3170 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3172 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3174 # IP_VERSION_TYPE is used in AT_SETUP
3175 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3176 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3177 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3179 ON_EXIT([kill `cat test-sflow.pid`])
3180 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3181 AT_CAPTURE_FILE([sflow.log])
3182 SFLOW_PORT=`parse_listening_port < test-sflow.log`
3183 ovs-appctl time/stop
3185 ADD_OF_PORTS([br0], 1, 2)
3187 set Interface br0 options:ifindex=1002 -- \
3188 set Interface p1 options:ifindex=1004 -- \
3189 set Interface p2 options:ifindex=1003 -- \
3190 set Bridge br0 sflow=@sf -- \
3191 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3192 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3194 dnl open with ARP packets to seed the bridge-learning. The output
3195 dnl ifIndex numbers should be reported predictably after that.
3196 dnl Since we set sampling=1 we should see all of these packets
3197 dnl reported. Sorting the output by data-source and seqNo makes
3198 dnl it deterministic. Ensuring that we send at least two packets
3199 dnl into each port means we get to check the seq nos are
3200 dnl incrementing correctly.
3201 dnl because packets from different ports can be handled by separate
3202 dnl threads, put some sleeps
3204 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)'
3206 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)'
3208 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)'
3210 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)'
3211 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)'
3213 dnl sleep long enough to get more than one counter sample
3214 dnl from each datasource so we can check sequence numbers
3215 for i in `seq 1 30`; do
3216 ovs-appctl time/warp 100
3219 ovs-appctl -t test-sflow exit
3221 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3242 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-05-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-05-C0-A8-00-02-00-00-00-00-00-00-C0-A8-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
3262 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-07-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-07-C0-A8-00-01-00-00-00-00-00-00-C0-A8-00-02-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
3282 hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-01-C0-A8-00-02-08-00-F7-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
3302 hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-02-C0-A8-00-01-00-00-FF-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
3322 hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-67-00-00-00-00-00-0A-80-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-01-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-02-00-00-00-00-00-00
3325 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3339 in_broadcasts=4294967295
3342 in_unknownprotos=4294967295
3345 out_multicasts=4294967295
3346 out_broadcasts=4294967295
3362 in_broadcasts=4294967295
3365 in_unknownprotos=4294967295
3368 out_multicasts=4294967295
3369 out_broadcasts=4294967295
3385 in_broadcasts=4294967295
3388 in_unknownprotos=4294967295
3391 out_multicasts=4294967295
3392 out_broadcasts=4294967295
3408 in_broadcasts=4294967295
3411 in_unknownprotos=4294967295
3414 out_multicasts=4294967295
3415 out_broadcasts=4294967295
3431 in_broadcasts=4294967295
3434 in_unknownprotos=4294967295
3437 out_multicasts=4294967295
3438 out_broadcasts=4294967295
3454 in_broadcasts=4294967295
3457 in_unknownprotos=4294967295
3460 out_multicasts=4294967295
3461 out_broadcasts=4294967295
3468 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3469 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3471 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3473 # Test that basic NetFlow reports flow statistics correctly:
3474 # The initial packet of a flow are correctly accounted.
3475 # Later packets within a flow are correctly accounted.
3476 # Flow actions changing (in this case, due to MAC learning)
3477 # cause a record to be sent.
3479 # IP_VERSION_TYPE is used in AT_SETUP
3480 m4_define([CHECK_NETFLOW_EXPIRATION],
3481 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3482 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3483 ADD_OF_PORTS([br0], 1, 2)
3485 ovs-appctl time/stop
3486 ON_EXIT([kill `cat test-netflow.pid`])
3487 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3488 AT_CAPTURE_FILE([netflow.log])
3489 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3492 set Bridge br0 netflow=@nf -- \
3493 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3494 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3496 for delay in 1000 30000; do
3497 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)'
3498 sleep 1 # ensure the order in which these two packets are processed
3499 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)'
3501 ovs-appctl time/warp $delay
3504 ovs-appctl time/warp 6000
3507 ovs-appctl -t test-netflow exit
3509 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
3511 AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
3513 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3514 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3515 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3519 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3520 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3522 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3524 # Test that basic NetFlow reports active expirations correctly.
3526 # IP_VERSION_TYPE is used in AT_SETUP
3527 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3528 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3530 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3531 ADD_OF_PORTS([br0], 1, 2)
3533 ON_EXIT([kill `cat test-netflow.pid`])
3534 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3535 AT_CAPTURE_FILE([netflow.log])
3536 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3539 set Bridge br0 netflow=@nf -- \
3540 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3541 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3543 AT_CHECK([ovs-appctl time/stop])
3545 while test $n -le 60; do
3548 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)'
3549 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)'
3551 ovs-appctl time/warp 1000
3554 ovs-appctl time/warp 10000
3558 ovs-appctl -t test-netflow exit
3560 # Count the number of reported packets:
3561 # - From source to destination before MAC learning kicks in (just one).
3562 # - From source to destination after that.
3563 # - From destination to source.
3571 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3578 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3581 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3584 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3591 eval $counter=\`expr \$$counter + \$pkts\`
3592 n_recs=`expr $n_recs + 1`
3595 # There should be exactly 1 MAC learning packet,
3596 # exactly 59 other packets in that direction,
3597 # and exactly 60 packets in the other direction.
3598 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3603 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3604 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3606 AT_SETUP([ofproto-dpif - flow stats])
3608 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3609 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3611 ovs-appctl time/stop
3613 for i in `seq 1 10`; do
3614 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)'
3617 ovs-appctl time/warp 1000
3618 sleep 1 # wait for revalidator to update stats
3620 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3621 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3622 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3623 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3628 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3630 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3631 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3633 ovs-appctl time/stop
3635 for i in `seq 1 10`; do
3636 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)'
3639 ovs-appctl time/warp 100
3640 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3641 ovs-appctl time/warp 1000
3643 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3644 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3645 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3646 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3651 AT_SETUP([idle_age and hard_age increase over time])
3654 # get_ages DURATION HARD IDLE
3656 # Fetch the flow duration, hard age, and idle age into the variables
3657 # whose names are given as arguments. Rounds DURATION down to the
3658 # nearest integer. If hard_age doesn't appear in the output, sets
3659 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3662 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3664 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3665 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3666 AS_VAR_COPY([$1], [duration])
3668 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3669 if test X"$hard" = X; then
3672 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3674 AS_VAR_COPY([$2], [hard])
3676 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3677 if test X"$idle" = X; then
3680 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3682 AS_VAR_COPY([$3], [idle])
3685 # Add a flow and get its initial hard and idle age.
3686 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3687 get_ages duration1 hard1 idle1
3689 ovs-appctl time/stop
3690 # Warp time forward by 10 seconds, then modify the flow's actions.
3691 ovs-appctl time/warp 10000
3692 get_ages duration2 hard2 idle2
3693 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3695 # Warp time forward by 10 seconds.
3696 ovs-appctl time/warp 10000
3697 get_ages duration3 hard3 idle3
3699 # Warp time forward 10 more seconds, then pass some packets through the flow,
3700 # then warp forward a few more times because idle times are only updated
3702 ovs-appctl time/warp 10000
3703 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)'
3704 ovs-appctl time/warp 1000
3705 ovs-appctl time/warp 1000
3706 ovs-appctl time/warp 1000
3708 get_ages duration4 hard4 idle4
3710 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3711 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3712 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3714 # Duration should increase steadily over time.
3715 AT_CHECK([test $duration1 -lt $duration2])
3716 AT_CHECK([test $duration2 -lt $duration3])
3717 AT_CHECK([test $duration3 -lt $duration4])
3719 # Hard age should be "none" initially because it's the same as flow_duration,
3720 # then it should increase.
3721 AT_CHECK([test $hard1 = none])
3722 AT_CHECK([test $hard2 = none])
3723 AT_CHECK([test $hard3 != none])
3724 AT_CHECK([test $hard4 != none])
3725 AT_CHECK([test $hard3 -lt $hard4])
3727 # Idle age should increase from 1 to 2 to 3, then decrease.
3728 AT_CHECK([test $idle1 -lt $idle2])
3729 AT_CHECK([test $idle2 -lt $idle3])
3730 AT_CHECK([test $idle3 -gt $idle4])
3732 # Check some invariant relationships.
3733 AT_CHECK([test $duration1 = $idle1])
3734 AT_CHECK([test $duration2 = $idle2])
3735 AT_CHECK([test $duration3 = $idle3])
3736 AT_CHECK([test $idle3 -gt $hard3])
3737 AT_CHECK([test $idle4 -lt $hard4])
3738 AT_CHECK([test $hard4 -lt $duration4])
3743 AT_SETUP([ofproto-dpif - fin_timeout])
3745 AT_DATA([flows.txt], [dnl
3746 in_port=1 actions=output:2
3747 in_port=2 actions=mod_vlan_vid:17,output:1
3749 ovs-appctl time/stop
3750 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3751 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3753 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3756 # Check that a TCP SYN packet does not change the timeout. (Because
3757 # flow stats updates are mainly what implements the fin_timeout
3758 # feature, we warp forward a couple of times to ensure that flow stats
3759 # run before re-checking the flow table.)
3760 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3761 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3765 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3767 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3769 # Check that a TCP FIN packet does change the timeout.
3770 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3771 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3774 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3776 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3781 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3782 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3783 ADD_OF_PORTS([br0], [1], [2])
3784 ADD_OF_PORTS([br1], [3])
3786 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3793 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3794 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3795 ADD_OF_PORTS([br0], [1], [2])
3796 ADD_OF_PORTS([br1], [3])
3798 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3799 dummy@ovs-dummy: hit:0 missed:0
3801 br0 65534/100: (dummy)
3805 br1 65534/101: (dummy)
3811 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3812 # bump max-idle to avoid the flows being reclaimed behind us
3813 OVS_VSWITCHD_START([add-br br1 -- \
3814 set bridge br1 datapath-type=dummy fail-mode=secure -- \
3815 set Open_vSwitch . other_config:max-idle=10000])
3816 ADD_OF_PORTS([br0], [1], [2])
3817 ADD_OF_PORTS([br1], [3])
3819 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)'])
3820 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)'])
3821 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)'])
3822 sleep 1 # wait for upcall handlers
3823 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3824 skb_priority(0),recirc_id(0),in_port(1),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/0xff), packets:0, bytes:0, used:never, actions:drop
3825 skb_priority(0),recirc_id(0),in_port(2),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/0xff), packets:0, bytes:0, used:never, actions:drop
3828 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3829 skb_priority(0),recirc_id(0),in_port(3),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/0xff), packets:0, bytes:0, used:never, actions:drop
3832 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3833 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3834 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3837 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3838 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3844 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
3845 OVS_VSWITCHD_START([dnl
3846 add-port br0 p1 -- set Interface p1 type=dummy
3848 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3849 ON_EXIT([kill `cat ovs-ofctl.pid`])
3851 AT_CAPTURE_FILE([ofctl_monitor.log])
3852 AT_DATA([flows.txt], [dnl
3853 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3854 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3856 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3858 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3859 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3861 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3862 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)
3863 dnl (label 20, exp 0, [S], ttl 32)
3864 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3865 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3867 for dl_src in 00 01; do
3868 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"])
3870 sleep 1 # wait for the datapath flow installed
3871 for dl_src in 00 01; do
3872 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3873 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), actions:userspace(pid=0,slow_path(controller))
3881 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
3882 OVS_VSWITCHD_START([dnl
3883 add-port br0 p1 -- set Interface p1 type=dummy
3885 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3886 ON_EXIT([kill `cat ovs-ofctl.pid`])
3888 AT_CAPTURE_FILE([ofctl_monitor.log])
3889 AT_DATA([flows.txt], [dnl
3890 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3891 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3893 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3895 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3896 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3897 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3899 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3900 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)
3901 dnl (label 20, exp 0, ttl 32)
3902 dnl (label 20, exp 0, ttl 32)
3903 dnl (label 20, exp 0, [S], ttl 32)
3904 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3905 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3907 for dl_src in 00 01; do
3908 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"])
3910 sleep 1 # wait for the datapath flow installed
3911 for dl_src in 00 01; do
3912 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3913 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), actions:userspace(pid=0,slow_path(controller))
3920 AT_SETUP([ofproto-dpif - patch ports])
3921 OVS_VSWITCHD_START([add-br br1 \
3922 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3923 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3924 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3926 ADD_OF_PORTS([br0], [2])
3927 ADD_OF_PORTS([br1], [3])
3929 AT_CHECK([ovs-appctl time/stop])
3930 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3932 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3933 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3935 for i in $(seq 1 10); do
3936 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)'
3937 if [[ $i -eq 1 ]]; then
3942 for i in $(seq 1 5); do
3943 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)'
3944 if [[ $i -eq 1 ]]; then
3949 AT_CHECK([ovs-appctl time/warp 500], [0],
3952 sleep 1 # wait for log writer
3954 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3955 dummy@ovs-dummy: hit:13 missed:2
3957 br0 65534/100: (dummy)
3959 pbr0 1/none: (patch: peer=pbr1)
3961 br1 65534/101: (dummy)
3963 pbr1 1/none: (patch: peer=pbr0)
3966 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3967 skb_priority(0),skb_mark(0/0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions:101,3,2
3968 skb_priority(0),skb_mark(0/0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions:100,2,3
3971 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3972 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:9, bytes:540, used:0.0s, actions:101,3,2
3974 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3975 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:4, bytes:240, used:0.0s, actions:100,2,3
3978 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3979 OFPST_PORT reply (xid=0x4): 1 ports
3980 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3981 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3984 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3985 OFPST_PORT reply (xid=0x4): 1 ports
3986 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3987 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3993 AT_SETUP([ofproto-dpif - port duration])
3994 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3995 ADD_OF_PORTS([br0], 1, 2)
3997 ovs-appctl time/stop
3998 ovs-appctl time/warp 10000
4000 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
4001 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
4010 dnl ----------------------------------------------------------------------
4011 AT_BANNER([ofproto-dpif -- megaflows])
4013 AT_SETUP([ofproto-dpif megaflow - port classification])
4015 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4016 ADD_OF_PORTS([br0], [1], [2])
4017 AT_DATA([flows.txt], [dnl
4018 table=0 in_port=1 actions=output(2)
4020 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4021 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)'])
4023 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)'])
4025 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4026 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(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/0xff),icmp(type=8/0,code=0/0), actions: <del>
4031 AT_SETUP([ofproto-dpif megaflow - L2 classification])
4033 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4034 ADD_OF_PORTS([br0], [1], [2])
4035 AT_DATA([flows.txt], [dnl
4036 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
4038 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4039 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)'])
4040 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)'])
4042 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4043 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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/0xff),icmp(type=8/0,code=0/0), actions: <del>
4044 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4049 AT_SETUP([ofproto-dpif megaflow - L3 classification])
4051 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4052 ADD_OF_PORTS([br0], [1], [2])
4053 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], [])
4054 AT_DATA([flows.txt], [dnl
4055 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
4057 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4058 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)'])
4059 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)'])
4061 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4062 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4063 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4068 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
4070 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4071 ADD_OF_PORTS([br0], [1], [2])
4072 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], [])
4073 AT_DATA([flows.txt], [dnl
4074 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
4076 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4077 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)'])
4078 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)'])
4080 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4081 skb_priority(0),skb_mark(0/0),in_port(1),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(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,dst=fe80::2/::,label=0/0,proto=10/0,tclass=0x70/0,hlimit=128/0,frag=no/0xff), actions: <del>
4082 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,dst=2001:db8:3c4d:1:2:3:4:1/::,label=0/0,proto=99/0,tclass=0x70/0,hlimit=64/0,frag=no/0xff), actions: <del>
4087 AT_SETUP([ofproto-dpif megaflow - L4 classification])
4089 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4090 ADD_OF_PORTS([br0], [1], [2])
4091 AT_DATA([flows.txt], [dnl
4092 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
4094 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4095 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)'])
4097 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)'])
4099 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4100 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0xff,code=0/0), actions: <del>
4105 AT_SETUP([ofproto-dpif megaflow - normal])
4107 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4108 ADD_OF_PORTS([br0], [1], [2])
4109 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4110 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)'])
4111 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)'])
4113 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4114 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4115 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4120 AT_SETUP([ofproto-dpif megaflow - mpls])
4122 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4123 ADD_OF_PORTS([br0], [1], [2])
4124 AT_DATA([flows.txt], [dnl
4125 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
4126 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
4128 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4129 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)'])
4130 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)'])
4132 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4133 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), actions: <del>
4134 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), actions: <del>
4139 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4141 # IP_VERSION_TYPE is used in AT_SETUP
4142 m4_define([CHECK_MEGAFLOW_NETFLOW],
4143 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4145 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4146 ADD_OF_PORTS([br0], [1], [2])
4148 dnl NetFlow configuration disables wildcarding relevant fields
4149 ON_EXIT([kill `cat test-netflow.pid`])
4150 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4151 AT_CAPTURE_FILE([netflow.log])
4152 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4154 set Bridge br0 netflow=@nf -- \
4155 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4156 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4158 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4159 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)'])
4160 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)'])
4162 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4163 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), actions: <del>
4164 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), actions: <del>
4169 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4170 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4172 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4174 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4175 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4176 set interface p2 type=dummy ofport_request=2 -- \
4177 set interface p3 type=dummy ofport_request=3])
4178 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4180 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4182 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4183 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)'])
4184 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)'])
4186 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4187 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4188 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4193 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4195 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4196 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4197 set interface p2 type=dummy ofport_request=2 -- \
4198 set interface p3 type=dummy ofport_request=3])
4199 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4201 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4203 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4204 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)'])
4205 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)'])
4207 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4208 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4209 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4214 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4215 # Create bond0 on br0 with interfaces p0 and p1
4216 # and bond1 on br1 with interfaces p2 and p3
4217 # with p0 patched to p2 and p1 patched to p3.
4219 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4220 other-config:lacp-time=fast \
4221 other-config:bond-rebalance-interval=0 -- \
4222 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4223 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4225 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4226 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4227 fail-mode=secure -- \
4228 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4229 other-config:lacp-time=fast \
4230 other-config:bond-rebalance-interval=0 -- \
4231 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4232 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4234 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4236 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4237 ADD_OF_PORTS([br0], [7])
4238 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4239 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4240 ovs-appctl time/stop
4241 ovs-appctl time/warp 5000
4242 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)'])
4243 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)'])
4245 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4246 skb_priority(0),skb_mark(0/0),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/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4247 skb_priority(0),skb_mark(0/0),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.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4252 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4254 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4255 ADD_OF_PORTS([br0], [1], [2])
4256 AT_DATA([flows.txt], [dnl
4257 table=0 in_port=1,ip actions=resubmit(90)
4258 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4260 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4261 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)'])
4262 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)'])
4264 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4265 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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/0xff),icmp(type=8/0,code=0/0), actions: <del>
4266 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4271 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4273 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4274 ADD_OF_PORTS([br0], [1], [2])
4275 AT_DATA([flows.txt], [dnl
4276 table=0 in_port=1,ip actions=resubmit(,1)
4277 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4279 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4280 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)'])
4281 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=
4282 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4284 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4285 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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/0xff),icmp(type=8/0,code=0/0), actions: <del>
4286 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4291 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4293 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4294 ADD_OF_PORTS([br0], [1], [2])
4295 AT_DATA([flows.txt], [dnl
4296 table=0 in_port=1,ip actions=goto_table(1)
4297 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4299 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4300 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)'])
4301 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)'])
4303 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4304 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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/0xff),icmp(type=8/0,code=0/0), actions: <del>
4305 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4310 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4312 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4313 ADD_OF_PORTS([br0], [1], [2], [3])
4315 set Bridge br0 mirrors=@m --\
4316 --id=@p3 get Port p3 --\
4317 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4319 AT_DATA([flows.txt], [dnl
4320 in_port=1 actions=output:2
4322 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4323 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)'])
4325 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)'])
4327 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4328 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(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/0xff),icmp(type=8/0,code=0/0), actions: <del>
4333 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4335 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4336 ADD_OF_PORTS([br0], [1], [2], [3])
4338 set Bridge br0 mirrors=@m --\
4339 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4340 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4342 AT_DATA([flows.txt], [dnl
4343 in_port=1 actions=output:2
4345 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4346 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))'])
4347 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)'])
4349 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4350 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8100),vlan(vid=11/0xfff,pcp=7/0x0,cfi=1/1),encap(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/0xff),icmp(type=8/0,code=0/0)), actions: <del>
4351 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4356 AT_SETUP([ofproto-dpif megaflow - move action])
4358 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4359 ADD_OF_PORTS([br0], [1], [2])
4360 AT_DATA([flows.txt], [dnl
4361 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4362 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4363 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4365 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4366 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)'])
4367 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)'])
4369 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4370 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4371 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4376 AT_SETUP([ofproto-dpif megaflow - push action])
4378 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4379 ADD_OF_PORTS([br0], [1], [2])
4380 AT_DATA([flows.txt], [dnl
4381 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4383 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4384 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)'])
4385 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)'])
4387 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4388 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4389 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4394 AT_SETUP([ofproto-dpif megaflow - learning])
4396 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4397 ADD_OF_PORTS([br0], [1], [2])
4398 AT_DATA([flows.txt], [dnl
4399 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
4401 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4402 ovs-appctl time/stop
4403 # We send each packet twice because the first packet in each flow causes the
4404 # flow table to change and thus revalidations, which (depending on timing)
4405 # can keep a megaflow from being installed. The revalidations are done by
4406 # the second iteration, allowing the flows to be installed.
4408 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)'])
4409 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)'])
4410 ovs-appctl time/warp 100
4413 dnl The original flow is missing due to a revalidation.
4414 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4415 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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/0xff),icmp(type=8/0,code=0/0), actions: <del>
4416 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4421 AT_SETUP([ofproto-dpif megaflow - tunnels])
4423 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4424 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4425 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4426 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4427 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4429 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4430 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4431 ofport_request=4 options:key=flow])
4432 AT_DATA([flows.txt], [dnl
4433 in_port=1,actions=output(2)
4434 in_port=3,actions=output(4)
4436 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4437 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4438 dnl will cause the packet to be dropped.
4439 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)'])
4441 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)'])
4442 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)'])
4444 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)'])
4446 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4447 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0x3,ttl=128/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4448 skb_priority(0),skb_mark(0/0),in_port(3),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=0xfd/0xff,ttl=128/0xff,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4449 skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0x1/0xff,ttl=64/0xff,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4454 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4456 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4457 ADD_OF_PORTS([br0], [1], [2])
4458 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], [])
4459 AT_DATA([flows.txt], [dnl
4460 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4462 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4463 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)'])
4464 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)'])
4466 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4467 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4468 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),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/0,code=0/0), actions: <del>
4473 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4475 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4476 ADD_OF_PORTS([br0], [1], [2])
4477 AT_DATA([flows.txt], [dnl
4478 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4480 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4481 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)'])
4482 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)'])
4484 dnl The megaflows do not match the same fields, since the first packet
4485 dnl is essentially a no-op. (The new destination MAC is the same as the
4486 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4487 dnl so that a packet that doesn't need its MAC address changed doesn't
4488 dnl hide one that does. Since the first entry doesn't need to change,
4489 dnl only the destination MAC address is matched (as decided by
4490 dnl ofproto-dpif). The second entry actually updates the destination
4491 dnl MAC, so both the source and destination MAC addresses are
4492 dnl un-wildcarded, since the ODP commit functions update both the source
4493 dnl and destination MAC addresses.
4494 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4495 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/ff:ff:ff:ff:ff:ff),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/0xff),icmp(type=8/0,code=0/0), actions:2
4496 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
4501 AT_SETUP([ofproto-dpif megaflow - disabled])
4503 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4504 ADD_OF_PORTS([br0], [1], [2])
4505 AT_DATA([flows.txt], [dnl
4506 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4507 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4509 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4511 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4512 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4513 for i in 1 2 3 4; do
4514 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)'])
4515 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)'])
4516 if [[ $i -eq 1 ]]; then
4521 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4522 skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), actions:2
4523 skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), actions:drop
4525 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
4526 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:2
4527 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
4532 AT_SETUP([ofproto-dpif - datapath port number change])
4533 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4534 ADD_OF_PORTS([br0], 1)
4536 # Trace a flow that should output to p1.
4537 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4539 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4542 # Change p1's port number to 5.
4543 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4545 # Trace a flow that should output to p1 in its new location.
4546 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4548 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4553 # Tests the bundling with various bfd and cfm configurations.
4554 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4555 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4556 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4557 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4558 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4559 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4560 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4561 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4562 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4563 set Interface p0 cfm_mpid=1 -- \
4564 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4566 ovs-appctl time/stop
4567 # advance the clock to stablize everything.
4568 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4569 # cfm/show should show 'recv' fault.
4570 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4573 # bfd/show should show 'up'.
4574 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4575 Local Session State: up
4576 Remote Session State: up
4577 Local Session State: up
4578 Remote Session State: up
4580 # bond/show should show 'may-enable: true' for all slaves.
4581 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4588 # now disable the bfd on p1.
4589 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4590 # advance the clock to stablize everything.
4591 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4592 # cfm/show should show 'recv' fault.
4593 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4596 # bfd/show should show 'down'.
4597 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4598 Local Session State: down
4599 Remote Session State: down
4601 # bond/show should show 'may-enable: false' for p0.
4602 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4607 # now enable the bfd on p1 and disable bfd on p0.
4608 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4609 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4610 # advance the clock to stablize everything.
4611 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4612 # cfm/show should show 'recv' fault.
4613 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4616 # bfd/show should show 'down'.
4617 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4618 Local Session State: down
4619 Remote Session State: down
4621 # bond/show should show 'may-enable: false' for p0 and p1.
4622 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4632 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4633 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4636 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4638 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4639 # disable bfd on p0.
4640 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4642 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4643 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4646 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4648 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4649 # disable cfm on p0.
4650 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4652 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4653 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4655 # enable both bfd and cfm on p0.
4656 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4658 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4659 # disable bfd on p0.
4660 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4661 # check log, there should not be the log of thread terminated.
4662 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4664 # reenable bfd on p0.
4665 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4666 # check log, should still be on log of thread created.
4667 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4668 monitor thread created
4670 # disable bfd and cfm together.
4671 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4673 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4678 # this test helps avoid the deadlock between the main thread and monitor thread.
4679 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4682 for i in `seq 1 199`
4684 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])
4690 AT_BANNER([ofproto-dpif - flow translation resource limits])
4692 AT_SETUP([ofproto-dpif - infinite resubmit])
4694 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4695 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4697 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4699 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4702 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4705 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4707 ADD_OF_PORTS([br0], 1)
4708 (for i in `seq 1 64`; do
4710 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4712 echo "in_port=65, actions=local") > flows
4713 AT_CHECK([ovs-ofctl add-flows br0 flows])
4714 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4715 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4717 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4720 AT_SETUP([ofproto-dpif - too many output actions])
4722 ADD_OF_PORTS([br0], 1)
4723 (for i in `seq 1 12`; do
4725 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4727 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4728 AT_CHECK([ovs-ofctl add-flows br0 flows])
4729 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4730 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4733 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4735 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4738 AT_SETUP([ofproto-dpif - stack too deep])
4740 ADD_OF_PORTS([br0], 1)
4741 (for i in `seq 1 12`; do
4743 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4745 push="push:NXM_NX_REG0[[]]"
4746 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4747 AT_CHECK([ovs-ofctl add-flows br0 flows])
4748 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4749 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4751 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
4754 AT_SETUP([ofproto-dpif - ICMPv6])
4756 ADD_OF_PORTS([br0], 1)
4758 AT_CAPTURE_FILE([ofctl_monitor.log])
4760 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4762 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
4764 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4766 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4767 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
4768 icmp6,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=00:00:86:05:80:da,dl_dst=00:60:97:07:69:ea,ipv6_src=fe80::200:86ff:fe05:80da,ipv6_dst=fe80::260:97ff:fe07:69ea,ipv6_label=0x00000,nw_tos=0,nw_ecn=0,nw_ttl=255,icmp_type=135,icmp_code=0,nd_target=fe80::260:97ff:fe07:69ea,nd_sll=00:00:86:05:80:da,nd_tll=00:00:00:00:00:00