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 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3106 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3108 # IP_VERSION_TYPE is used in AT_SETUP
3109 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3110 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3111 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3113 ON_EXIT([kill `cat test-sflow.pid`])
3114 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3115 AT_CAPTURE_FILE([sflow.log])
3116 SFLOW_PORT=`parse_listening_port < test-sflow.log`
3117 ovs-appctl time/stop
3119 ADD_OF_PORTS([br0], 1, 2)
3121 set Interface br0 options:ifindex=1002 -- \
3122 set Interface p1 options:ifindex=1004 -- \
3123 set Interface p2 options:ifindex=1003 -- \
3124 set Bridge br0 sflow=@sf -- \
3125 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3126 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3128 dnl open with ARP packets to seed the bridge-learning. The output
3129 dnl ifIndex numbers should be reported predictably after that.
3130 dnl Since we set sampling=1 we should see all of these packets
3131 dnl reported. Sorting the output by data-source and seqNo makes
3132 dnl it deterministic. Ensuring that we send at least two packets
3133 dnl into each port means we get to check the seq nos are
3134 dnl incrementing correctly.
3135 dnl because packets from different ports can be handled by separate
3136 dnl threads, put some sleeps
3138 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)'
3140 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)'
3142 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)'
3144 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)'
3145 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)'
3147 dnl sleep long enough to get more than one counter sample
3148 dnl from each datasource so we can check sequence numbers
3149 for i in `seq 1 30`; do
3150 ovs-appctl time/warp 100
3153 ovs-appctl -t test-sflow exit
3155 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3176 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
3196 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
3216 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
3236 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
3256 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
3259 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3273 in_broadcasts=4294967295
3276 in_unknownprotos=4294967295
3279 out_multicasts=4294967295
3280 out_broadcasts=4294967295
3296 in_broadcasts=4294967295
3299 in_unknownprotos=4294967295
3302 out_multicasts=4294967295
3303 out_broadcasts=4294967295
3319 in_broadcasts=4294967295
3322 in_unknownprotos=4294967295
3325 out_multicasts=4294967295
3326 out_broadcasts=4294967295
3342 in_broadcasts=4294967295
3345 in_unknownprotos=4294967295
3348 out_multicasts=4294967295
3349 out_broadcasts=4294967295
3365 in_broadcasts=4294967295
3368 in_unknownprotos=4294967295
3371 out_multicasts=4294967295
3372 out_broadcasts=4294967295
3388 in_broadcasts=4294967295
3391 in_unknownprotos=4294967295
3394 out_multicasts=4294967295
3395 out_broadcasts=4294967295
3402 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3403 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3405 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3407 # Test that basic NetFlow reports flow statistics correctly:
3408 # The initial packet of a flow are correctly accounted.
3409 # Later packets within a flow are correctly accounted.
3410 # Flow actions changing (in this case, due to MAC learning)
3411 # cause a record to be sent.
3413 # IP_VERSION_TYPE is used in AT_SETUP
3414 m4_define([CHECK_NETFLOW_EXPIRATION],
3415 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3416 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3417 ADD_OF_PORTS([br0], 1, 2)
3419 ovs-appctl time/stop
3420 ON_EXIT([kill `cat test-netflow.pid`])
3421 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3422 AT_CAPTURE_FILE([netflow.log])
3423 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3426 set Bridge br0 netflow=@nf -- \
3427 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3428 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3430 for delay in 1000 30000; do
3431 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)'
3432 sleep 1 # ensure the order in which these two packets are processed
3433 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)'
3435 ovs-appctl time/warp $delay
3438 ovs-appctl time/warp 6000
3441 ovs-appctl -t test-netflow exit
3443 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])
3445 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])
3447 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3448 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3449 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3453 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3454 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3456 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3458 # Test that basic NetFlow reports active expirations correctly.
3460 # IP_VERSION_TYPE is used in AT_SETUP
3461 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3462 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3464 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3465 ADD_OF_PORTS([br0], 1, 2)
3467 ON_EXIT([kill `cat test-netflow.pid`])
3468 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3469 AT_CAPTURE_FILE([netflow.log])
3470 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3473 set Bridge br0 netflow=@nf -- \
3474 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3475 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3477 AT_CHECK([ovs-appctl time/stop])
3479 while test $n -le 60; do
3482 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)'
3483 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)'
3485 ovs-appctl time/warp 1000
3488 ovs-appctl time/warp 10000
3492 ovs-appctl -t test-netflow exit
3494 # Count the number of reported packets:
3495 # - From source to destination before MAC learning kicks in (just one).
3496 # - From source to destination after that.
3497 # - From destination to source.
3505 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3512 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3515 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3518 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3525 eval $counter=\`expr \$$counter + \$pkts\`
3526 n_recs=`expr $n_recs + 1`
3529 # There should be exactly 1 MAC learning packet,
3530 # exactly 59 other packets in that direction,
3531 # and exactly 60 packets in the other direction.
3532 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3537 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3538 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3540 AT_SETUP([ofproto-dpif - flow stats])
3542 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3543 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3545 ovs-appctl time/stop
3547 for i in `seq 1 10`; do
3548 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)'
3551 ovs-appctl time/warp 1000
3552 sleep 1 # wait for revalidator to update stats
3554 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3555 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3556 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3557 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3562 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3564 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3565 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3567 ovs-appctl time/stop
3569 for i in `seq 1 10`; do
3570 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)'
3573 ovs-appctl time/warp 100
3574 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3575 ovs-appctl time/warp 1000
3577 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3578 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3579 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3580 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3585 AT_SETUP([idle_age and hard_age increase over time])
3588 # get_ages DURATION HARD IDLE
3590 # Fetch the flow duration, hard age, and idle age into the variables
3591 # whose names are given as arguments. Rounds DURATION down to the
3592 # nearest integer. If hard_age doesn't appear in the output, sets
3593 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3596 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3598 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3599 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3600 AS_VAR_COPY([$1], [duration])
3602 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3603 if test X"$hard" = X; then
3606 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3608 AS_VAR_COPY([$2], [hard])
3610 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3611 if test X"$idle" = X; then
3614 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3616 AS_VAR_COPY([$3], [idle])
3619 # Add a flow and get its initial hard and idle age.
3620 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3621 get_ages duration1 hard1 idle1
3623 ovs-appctl time/stop
3624 # Warp time forward by 10 seconds, then modify the flow's actions.
3625 ovs-appctl time/warp 10000
3626 get_ages duration2 hard2 idle2
3627 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3629 # Warp time forward by 10 seconds.
3630 ovs-appctl time/warp 10000
3631 get_ages duration3 hard3 idle3
3633 # Warp time forward 10 more seconds, then pass some packets through the flow,
3634 # then warp forward a few more times because idle times are only updated
3636 ovs-appctl time/warp 10000
3637 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)'
3638 ovs-appctl time/warp 1000
3639 ovs-appctl time/warp 1000
3640 ovs-appctl time/warp 1000
3642 get_ages duration4 hard4 idle4
3644 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3645 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3646 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3648 # Duration should increase steadily over time.
3649 AT_CHECK([test $duration1 -lt $duration2])
3650 AT_CHECK([test $duration2 -lt $duration3])
3651 AT_CHECK([test $duration3 -lt $duration4])
3653 # Hard age should be "none" initially because it's the same as flow_duration,
3654 # then it should increase.
3655 AT_CHECK([test $hard1 = none])
3656 AT_CHECK([test $hard2 = none])
3657 AT_CHECK([test $hard3 != none])
3658 AT_CHECK([test $hard4 != none])
3659 AT_CHECK([test $hard3 -lt $hard4])
3661 # Idle age should increase from 1 to 2 to 3, then decrease.
3662 AT_CHECK([test $idle1 -lt $idle2])
3663 AT_CHECK([test $idle2 -lt $idle3])
3664 AT_CHECK([test $idle3 -gt $idle4])
3666 # Check some invariant relationships.
3667 AT_CHECK([test $duration1 = $idle1])
3668 AT_CHECK([test $duration2 = $idle2])
3669 AT_CHECK([test $duration3 = $idle3])
3670 AT_CHECK([test $idle3 -gt $hard3])
3671 AT_CHECK([test $idle4 -lt $hard4])
3672 AT_CHECK([test $hard4 -lt $duration4])
3677 AT_SETUP([ofproto-dpif - fin_timeout])
3679 AT_DATA([flows.txt], [dnl
3680 in_port=1 actions=output:2
3681 in_port=2 actions=mod_vlan_vid:17,output:1
3683 ovs-appctl time/stop
3684 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3685 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3687 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3690 # Check that a TCP SYN packet does not change the timeout. (Because
3691 # flow stats updates are mainly what implements the fin_timeout
3692 # feature, we warp forward a couple of times to ensure that flow stats
3693 # run before re-checking the flow table.)
3694 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3695 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3699 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3701 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3703 # Check that a TCP FIN packet does change the timeout.
3704 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3705 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3708 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3710 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3715 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3716 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3717 ADD_OF_PORTS([br0], [1], [2])
3718 ADD_OF_PORTS([br1], [3])
3720 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3727 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3728 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3729 ADD_OF_PORTS([br0], [1], [2])
3730 ADD_OF_PORTS([br1], [3])
3732 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3733 dummy@ovs-dummy: hit:0 missed:0
3735 br0 65534/100: (dummy)
3739 br1 65534/101: (dummy)
3745 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3746 # bump max-idle to avoid the flows being reclaimed behind us
3747 OVS_VSWITCHD_START([add-br br1 -- \
3748 set bridge br1 datapath-type=dummy fail-mode=secure -- \
3749 set Open_vSwitch . other_config:max-idle=10000])
3750 ADD_OF_PORTS([br0], [1], [2])
3751 ADD_OF_PORTS([br1], [3])
3753 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)'])
3754 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)'])
3755 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)'])
3756 sleep 1 # wait for upcall handlers
3757 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3758 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
3759 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
3762 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3763 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
3766 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3767 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
3768 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
3771 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3772 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
3778 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
3779 OVS_VSWITCHD_START([dnl
3780 add-port br0 p1 -- set Interface p1 type=dummy
3782 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3783 ON_EXIT([kill `cat ovs-ofctl.pid`])
3785 AT_CAPTURE_FILE([ofctl_monitor.log])
3786 AT_DATA([flows.txt], [dnl
3787 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3788 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3790 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3792 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3793 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3795 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3796 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)
3797 dnl (label 20, exp 0, [S], ttl 32)
3798 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3799 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3801 for dl_src in 00 01; do
3802 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"])
3804 sleep 1 # wait for the datapath flow installed
3805 for dl_src in 00 01; do
3806 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3807 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))
3815 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
3816 OVS_VSWITCHD_START([dnl
3817 add-port br0 p1 -- set Interface p1 type=dummy
3819 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3820 ON_EXIT([kill `cat ovs-ofctl.pid`])
3822 AT_CAPTURE_FILE([ofctl_monitor.log])
3823 AT_DATA([flows.txt], [dnl
3824 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3825 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3827 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3829 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3830 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3831 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3833 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3834 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)
3835 dnl (label 20, exp 0, ttl 32)
3836 dnl (label 20, exp 0, ttl 32)
3837 dnl (label 20, exp 0, [S], ttl 32)
3838 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3839 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3841 for dl_src in 00 01; do
3842 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"])
3844 sleep 1 # wait for the datapath flow installed
3845 for dl_src in 00 01; do
3846 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3847 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))
3854 AT_SETUP([ofproto-dpif - patch ports])
3855 OVS_VSWITCHD_START([add-br br1 \
3856 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3857 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3858 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3860 ADD_OF_PORTS([br0], [2])
3861 ADD_OF_PORTS([br1], [3])
3863 AT_CHECK([ovs-appctl time/stop])
3864 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3866 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3867 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3869 for i in $(seq 1 10); do
3870 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)'
3871 if [[ $i -eq 1 ]]; then
3876 for i in $(seq 1 5); do
3877 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)'
3878 if [[ $i -eq 1 ]]; then
3883 AT_CHECK([ovs-appctl time/warp 500], [0],
3886 sleep 1 # wait for log writer
3888 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3889 dummy@ovs-dummy: hit:13 missed:2
3891 br0 65534/100: (dummy)
3893 pbr0 1/none: (patch: peer=pbr1)
3895 br1 65534/101: (dummy)
3897 pbr1 1/none: (patch: peer=pbr0)
3900 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3901 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
3902 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
3905 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3906 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
3908 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3909 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
3912 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3913 OFPST_PORT reply (xid=0x4): 1 ports
3914 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3915 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3918 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3919 OFPST_PORT reply (xid=0x4): 1 ports
3920 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3921 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3927 AT_SETUP([ofproto-dpif - port duration])
3928 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3929 ADD_OF_PORTS([br0], 1, 2)
3931 ovs-appctl time/stop
3932 ovs-appctl time/warp 10000
3934 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3935 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3944 dnl ----------------------------------------------------------------------
3945 AT_BANNER([ofproto-dpif -- megaflows])
3947 AT_SETUP([ofproto-dpif megaflow - port classification])
3949 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3950 ADD_OF_PORTS([br0], [1], [2])
3951 AT_DATA([flows.txt], [dnl
3952 table=0 in_port=1 actions=output(2)
3954 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3955 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)'])
3957 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)'])
3959 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3960 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>
3965 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3967 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3968 ADD_OF_PORTS([br0], [1], [2])
3969 AT_DATA([flows.txt], [dnl
3970 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3972 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3973 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)'])
3974 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)'])
3976 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3977 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>
3978 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>
3983 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3985 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3986 ADD_OF_PORTS([br0], [1], [2])
3987 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], [])
3988 AT_DATA([flows.txt], [dnl
3989 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3991 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3992 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)'])
3993 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)'])
3995 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3996 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>
3997 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>
4002 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
4004 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4005 ADD_OF_PORTS([br0], [1], [2])
4006 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], [])
4007 AT_DATA([flows.txt], [dnl
4008 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
4010 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4011 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)'])
4012 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)'])
4014 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4015 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>
4016 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>
4021 AT_SETUP([ofproto-dpif megaflow - L4 classification])
4023 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4024 ADD_OF_PORTS([br0], [1], [2])
4025 AT_DATA([flows.txt], [dnl
4026 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
4028 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4029 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)'])
4031 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)'])
4033 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4034 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>
4039 AT_SETUP([ofproto-dpif megaflow - normal])
4041 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4042 ADD_OF_PORTS([br0], [1], [2])
4043 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4044 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)'])
4045 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)'])
4047 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4048 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>
4049 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>
4054 AT_SETUP([ofproto-dpif megaflow - mpls])
4056 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4057 ADD_OF_PORTS([br0], [1], [2])
4058 AT_DATA([flows.txt], [dnl
4059 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
4060 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
4062 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4063 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)'])
4064 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)'])
4066 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4067 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>
4068 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>
4073 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4075 # IP_VERSION_TYPE is used in AT_SETUP
4076 m4_define([CHECK_MEGAFLOW_NETFLOW],
4077 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4079 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4080 ADD_OF_PORTS([br0], [1], [2])
4082 dnl NetFlow configuration disables wildcarding relevant fields
4083 ON_EXIT([kill `cat test-netflow.pid`])
4084 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4085 AT_CAPTURE_FILE([netflow.log])
4086 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4088 set Bridge br0 netflow=@nf -- \
4089 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4090 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4092 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4093 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)'])
4094 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)'])
4096 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4097 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>
4098 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>
4103 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4104 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4106 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4108 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4109 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4110 set interface p2 type=dummy ofport_request=2 -- \
4111 set interface p3 type=dummy ofport_request=3])
4112 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4114 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4116 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4117 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)'])
4118 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)'])
4120 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4121 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>
4122 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>
4127 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4129 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4130 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4131 set interface p2 type=dummy ofport_request=2 -- \
4132 set interface p3 type=dummy ofport_request=3])
4133 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4135 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4137 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4138 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)'])
4139 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)'])
4141 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4142 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>
4143 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>
4148 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4149 # Create bond0 on br0 with interfaces p0 and p1
4150 # and bond1 on br1 with interfaces p2 and p3
4151 # with p0 patched to p2 and p1 patched to p3.
4153 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4154 other-config:lacp-time=fast \
4155 other-config:bond-rebalance-interval=0 -- \
4156 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4157 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4159 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4160 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4161 fail-mode=secure -- \
4162 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4163 other-config:lacp-time=fast \
4164 other-config:bond-rebalance-interval=0 -- \
4165 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4166 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4168 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4170 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4171 ADD_OF_PORTS([br0], [7])
4172 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4173 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4174 ovs-appctl time/stop
4175 ovs-appctl time/warp 5000
4176 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)'])
4177 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)'])
4179 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4180 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>
4181 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>
4186 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4188 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4189 ADD_OF_PORTS([br0], [1], [2])
4190 AT_DATA([flows.txt], [dnl
4191 table=0 in_port=1,ip actions=resubmit(90)
4192 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4194 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4195 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)'])
4196 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)'])
4198 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4199 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>
4200 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>
4205 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4207 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4208 ADD_OF_PORTS([br0], [1], [2])
4209 AT_DATA([flows.txt], [dnl
4210 table=0 in_port=1,ip actions=resubmit(,1)
4211 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4213 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4214 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)'])
4215 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=
4216 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4218 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4219 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>
4220 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>
4225 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4227 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4228 ADD_OF_PORTS([br0], [1], [2])
4229 AT_DATA([flows.txt], [dnl
4230 table=0 in_port=1,ip actions=goto_table(1)
4231 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4233 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4234 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)'])
4235 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)'])
4237 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4238 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>
4239 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>
4244 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4246 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4247 ADD_OF_PORTS([br0], [1], [2], [3])
4249 set Bridge br0 mirrors=@m --\
4250 --id=@p3 get Port p3 --\
4251 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4253 AT_DATA([flows.txt], [dnl
4254 in_port=1 actions=output:2
4256 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4257 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)'])
4259 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)'])
4261 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4262 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>
4267 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4269 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4270 ADD_OF_PORTS([br0], [1], [2], [3])
4272 set Bridge br0 mirrors=@m --\
4273 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4274 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4276 AT_DATA([flows.txt], [dnl
4277 in_port=1 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(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))'])
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=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4283 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4284 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>
4285 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>
4290 AT_SETUP([ofproto-dpif megaflow - move action])
4292 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4293 ADD_OF_PORTS([br0], [1], [2])
4294 AT_DATA([flows.txt], [dnl
4295 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4296 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4297 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4299 AT_CHECK([ovs-ofctl 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/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>
4305 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>
4310 AT_SETUP([ofproto-dpif megaflow - push action])
4312 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4313 ADD_OF_PORTS([br0], [1], [2])
4314 AT_DATA([flows.txt], [dnl
4315 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4317 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4318 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)'])
4319 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)'])
4321 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4322 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>
4323 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>
4328 AT_SETUP([ofproto-dpif megaflow - learning])
4330 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4331 ADD_OF_PORTS([br0], [1], [2])
4332 AT_DATA([flows.txt], [dnl
4333 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
4335 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4336 ovs-appctl time/stop
4337 # We send each packet twice because the first packet in each flow causes the
4338 # flow table to change and thus revalidations, which (depending on timing)
4339 # can keep a megaflow from being installed. The revalidations are done by
4340 # the second iteration, allowing the flows to be installed.
4342 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)'])
4343 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)'])
4344 ovs-appctl time/warp 100
4347 dnl The original flow is missing due to a revalidation.
4348 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4349 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>
4350 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>
4355 AT_SETUP([ofproto-dpif megaflow - tunnels])
4357 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4358 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4359 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4360 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4361 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4363 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4364 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4365 ofport_request=4 options:key=flow])
4366 AT_DATA([flows.txt], [dnl
4367 in_port=1,actions=output(2)
4368 in_port=3,actions=output(4)
4370 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4371 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4372 dnl will cause the packet to be dropped.
4373 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)'])
4375 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)'])
4376 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)'])
4378 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)'])
4380 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4381 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>
4382 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>
4383 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>
4388 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4390 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4391 ADD_OF_PORTS([br0], [1], [2])
4392 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], [])
4393 AT_DATA([flows.txt], [dnl
4394 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4396 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4397 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)'])
4398 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)'])
4400 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4401 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>
4402 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>
4407 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4409 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4410 ADD_OF_PORTS([br0], [1], [2])
4411 AT_DATA([flows.txt], [dnl
4412 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4414 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4415 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)'])
4416 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)'])
4418 dnl The megaflows do not match the same fields, since the first packet
4419 dnl is essentially a no-op. (The new destination MAC is the same as the
4420 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4421 dnl so that a packet that doesn't need its MAC address changed doesn't
4422 dnl hide one that does. Since the first entry doesn't need to change,
4423 dnl only the destination MAC address is matched (as decided by
4424 dnl ofproto-dpif). The second entry actually updates the destination
4425 dnl MAC, so both the source and destination MAC addresses are
4426 dnl un-wildcarded, since the ODP commit functions update both the source
4427 dnl and destination MAC addresses.
4428 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4429 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
4430 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
4435 AT_SETUP([ofproto-dpif megaflow - disabled])
4437 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4438 ADD_OF_PORTS([br0], [1], [2])
4439 AT_DATA([flows.txt], [dnl
4440 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4441 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4443 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4445 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4446 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4447 for i in 1 2 3 4; do
4448 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)'])
4449 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)'])
4450 if [[ $i -eq 1 ]]; then
4455 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4456 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
4457 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
4459 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
4460 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
4461 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
4466 AT_SETUP([ofproto-dpif - datapath port number change])
4467 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4468 ADD_OF_PORTS([br0], 1)
4470 # Trace a flow that should output to p1.
4471 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4473 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4476 # Change p1's port number to 5.
4477 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4479 # Trace a flow that should output to p1 in its new location.
4480 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4482 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4487 # Tests the bundling with various bfd and cfm configurations.
4488 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4489 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4490 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4491 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4492 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4493 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4494 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4495 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4496 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4497 set Interface p0 cfm_mpid=1 -- \
4498 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4500 ovs-appctl time/stop
4501 # advance the clock to stablize everything.
4502 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4503 # cfm/show should show 'recv' fault.
4504 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4507 # bfd/show should show 'up'.
4508 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4509 Local Session State: up
4510 Remote Session State: up
4511 Local Session State: up
4512 Remote Session State: up
4514 # bond/show should show 'may-enable: true' for all slaves.
4515 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4522 # now disable the bfd on p1.
4523 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4524 # advance the clock to stablize everything.
4525 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4526 # cfm/show should show 'recv' fault.
4527 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4530 # bfd/show should show 'down'.
4531 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4532 Local Session State: down
4533 Remote Session State: down
4535 # bond/show should show 'may-enable: false' for p0.
4536 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4541 # now enable the bfd on p1 and disable bfd on p0.
4542 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4543 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4544 # advance the clock to stablize everything.
4545 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4546 # cfm/show should show 'recv' fault.
4547 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4550 # bfd/show should show 'down'.
4551 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4552 Local Session State: down
4553 Remote Session State: down
4555 # bond/show should show 'may-enable: false' for p0 and p1.
4556 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4566 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4567 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4570 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4572 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4573 # disable bfd on p0.
4574 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4576 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4577 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4580 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4582 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4583 # disable cfm on p0.
4584 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4586 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4587 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4589 # enable both bfd and cfm on p0.
4590 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4592 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4593 # disable bfd on p0.
4594 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4595 # check log, there should not be the log of thread terminated.
4596 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4598 # reenable bfd on p0.
4599 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4600 # check log, should still be on log of thread created.
4601 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4602 monitor thread created
4604 # disable bfd and cfm together.
4605 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4607 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4612 # this test helps avoid the deadlock between the main thread and monitor thread.
4613 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4616 for i in `seq 1 199`
4618 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])
4624 AT_BANNER([ofproto-dpif - flow translation resource limits])
4626 AT_SETUP([ofproto-dpif - infinite resubmit])
4628 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4629 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4631 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4633 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4636 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4639 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4641 ADD_OF_PORTS([br0], 1)
4642 (for i in `seq 1 64`; do
4644 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4646 echo "in_port=65, actions=local") > flows
4647 AT_CHECK([ovs-ofctl add-flows br0 flows])
4648 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4649 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4651 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4654 AT_SETUP([ofproto-dpif - too many output actions])
4656 ADD_OF_PORTS([br0], 1)
4657 (for i in `seq 1 12`; do
4659 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4661 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4662 AT_CHECK([ovs-ofctl add-flows br0 flows])
4663 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4664 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4667 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4669 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4672 AT_SETUP([ofproto-dpif - stack too deep])
4674 ADD_OF_PORTS([br0], 1)
4675 (for i in `seq 1 12`; do
4677 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4679 push="push:NXM_NX_REG0[[]]"
4680 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4681 AT_CHECK([ovs-ofctl add-flows br0 flows])
4682 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4683 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4685 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
4688 AT_SETUP([ofproto-dpif - ICMPv6])
4690 ADD_OF_PORTS([br0], 1)
4692 AT_CAPTURE_FILE([ofctl_monitor.log])
4694 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4696 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
4698 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4700 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4701 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
4702 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