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 WAIT_FOR_DUMMY_PORTS([p3], [p4])
74 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
76 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
77 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
78 ovs-appctl netdev-dummy/set-admin-state up
79 ovs-appctl time/warp 100
80 ovs-appctl netdev-dummy/set-admin-state p2 down
82 ovs-appctl time/warp 100
83 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)'])
84 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)'])
85 ovs-appctl time/warp 100
86 ovs-appctl netdev-dummy/set-admin-state p2 up
87 ovs-appctl netdev-dummy/set-admin-state p1 down
88 ovs-appctl time/warp 100
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: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)'])
90 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)'])
91 ovs-appctl time/warp 100
92 ovs-appctl time/warp 100
94 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port([[348]])' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
95 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>
96 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>
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: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>
98 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>
99 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>
100 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>
105 AT_SETUP([ofproto-dpif, balance-slb bonding])
106 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
107 # and br1 with interfaces p4, p5, p6 and p8.
108 # p1 <-> p4, p2 <-> p5, p3 <-> p6
109 # Send some traffic, make sure the traffic are spread based on source mac.
111 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
112 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
113 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
114 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
115 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
117 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
118 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
119 fail-mode=secure -- \
120 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
121 add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
122 add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
123 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
124 WAIT_FOR_DUMMY_PORTS([p4], [p5], [p6])
125 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
126 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
127 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
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
176 OVS_WAIT_WHILE([ovs-appctl bond/show | grep "may_enable: false"])
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 - group actions have no effect afterwards])
372 ADD_OF_PORTS([br0], [1], [10])
373 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=set_field:192.168.3.90->ip_src,output:10'])
374 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234,output:10'])
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 -1 stdout], [0],
377 [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)),10
382 AT_SETUP([ofproto-dpif - all group in action set])
384 ADD_OF_PORTS([br0], [1], [10], [11])
385 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'])
386 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
387 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])
388 AT_CHECK([tail -2 stdout], [0],
389 [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
390 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
395 AT_SETUP([ofproto-dpif - indirect group in action set])
397 ADD_OF_PORTS([br0], [1], [10])
398 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
399 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
400 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00: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])
401 AT_CHECK([tail -1 stdout], [0],
402 [Datapath actions: 10
407 AT_SETUP([ofproto-dpif - select group])
409 ADD_OF_PORTS([br0], [1], [10], [11])
410 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
411 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
413 # Try a bunch of different flows and make sure that they get distributed
415 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
416 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])
417 tail -1 stdout >> results
419 sort results | uniq -c
420 AT_CHECK([sort results | uniq], [0],
421 [Datapath actions: 10
427 AT_SETUP([ofproto-dpif - select group with watch port])
429 ADD_OF_PORTS([br0], [1], [10], [11])
430 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
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 - select group with weight])
441 ADD_OF_PORTS([br0], [1], [10], [11], [12])
442 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'])
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: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])
445 AT_CHECK([tail -1 stdout], [0],
446 [Datapath actions: 11
451 AT_SETUP([ofproto-dpif - fast failover group])
453 ADD_OF_PORTS([br0], [1], [10], [11])
454 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'])
455 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
456 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])
457 AT_CHECK([tail -1 stdout], [0],
458 [Datapath actions: drop
463 AT_SETUP([ofproto-dpif - registers])
465 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
466 AT_DATA([flows.txt], [dnl
467 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
468 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
469 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
470 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
472 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
473 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
474 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
475 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
476 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
477 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
478 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
479 in_port=9,reg0=0xdeadbeef actions=output:20
480 in_port=10,reg1=0xdeadbeef actions=output:21
481 in_port=11,reg2=0xeef22dea actions=output:22
483 dnl Sanilty check all registers
484 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
485 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
486 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
487 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
490 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
491 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])
492 AT_CHECK([tail -1 stdout], [0],
493 [Datapath actions: 20,21,22,33
498 AT_SETUP([ofproto-dpif - push-pop])
500 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
501 AT_DATA([flows.txt], [dnl
502 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
503 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
504 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
505 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
506 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
509 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
510 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])
511 AT_CHECK([tail -1 stdout], [0],
512 [Datapath actions: 33,22,21,20
517 AT_SETUP([ofproto-dpif - output])
519 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
520 AT_DATA([flows.txt], [dnl
521 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
522 in_port=2 actions=output:9
523 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
524 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
525 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
526 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
527 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
528 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
530 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
531 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])
532 AT_CHECK([tail -1 stdout], [0],
533 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
538 AT_SETUP([ofproto-dpif - dec_ttl])
540 ADD_OF_PORTS([br0], [1], [2], [3], [4])
541 AT_DATA([flows.txt], [dnl
542 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
543 table=1 in_port=1 action=dec_ttl,output:3
545 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
547 AT_CHECK([tail -4 stdout], [0],
548 [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
549 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
550 This flow is handled by the userspace slow path because it:
551 - Sends "packet-in" messages to the OpenFlow controller.
553 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])
554 AT_CHECK([tail -2 stdout], [0],
555 [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
556 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
558 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])
559 AT_CHECK([tail -2 stdout], [0],
560 [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
561 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
564 AT_CAPTURE_FILE([ofctl_monitor.log])
565 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
566 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])
567 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
568 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
569 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
570 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
575 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
576 dnl buffer to be resized just before pushing the id of the dec_ttl action.
577 dnl Thus the implementation must account for this by using the
578 dnl reallocated buffer rather than the original buffer.
580 dnl A number of similar rules are added to try and exercise
581 dnl xrealloc sufficiently that it returns a different base pointer
582 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
584 ADD_OF_PORTS([br0], [1])
585 (for i in `seq 0 255`; do
586 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
588 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
592 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
593 dnl buffer to be resized just before pushing the id of the dec_ttl action.
594 dnl Thus the implementation must account for this by using the
595 dnl reallocated buffer rather than the original buffer.
597 dnl A number of similar rules are added to try and exercise
598 dnl xrealloc sufficiently that it returns a different base pointer
599 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
601 ADD_OF_PORTS([br0], [1])
602 (for i in `seq 0 255`; do
603 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
605 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
609 dnl A note action at offset 24 in ofpacts will cause the ofpacts
610 dnl buffer to be resized just before pushing the id of the dec_ttl action.
611 dnl Thus the implementation must account for this by using the
612 dnl reallocated buffer rather than the original buffer.
614 dnl A number of similar rules are added to try and exercise
615 dnl xrealloc sufficiently that it returns a different base pointer
616 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
618 ADD_OF_PORTS([br0], [1])
619 (for i in `seq 0 255`; do
620 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
622 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
626 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
628 ADD_OF_PORTS([br0], [1], [2])
630 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
632 # "in_port" defaults to OFPP_NONE if it's not specified.
633 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"
634 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
635 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
644 AT_SETUP([ofproto-dpif - DSCP])
645 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
646 ADD_OF_PORTS([br0], [9])
647 AT_DATA([flows.txt], [dnl
648 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
650 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
651 AT_CHECK([ovs-vsctl -- \
652 set Port p1 qos=@newqos --\
653 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
654 --id=@q1 create Queue dscp=1 --\
655 --id=@q2 create Queue dscp=2], [0], [ignore])
656 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])
657 AT_CHECK([tail -2 stdout], [0],
658 [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
659 Datapath actions: dnl
661 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
662 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
664 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
665 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
666 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
672 AT_SETUP([ofproto-dpif - output/flood flags])
674 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
676 AT_DATA([flows.txt], [dnl
677 in_port=local actions=local,flood
678 in_port=1 actions=flood
679 in_port=2 actions=all
680 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
681 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
683 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
684 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
685 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
687 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])
688 AT_CHECK([tail -1 stdout \
689 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
697 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])
698 AT_CHECK([tail -1 stdout \
699 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
707 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])
708 AT_CHECK([tail -1 stdout \
709 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
718 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])
719 AT_CHECK([tail -1 stdout], [0],
720 [Datapath actions: 100,1,2,4,6,7
723 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])
724 AT_CHECK([tail -1 stdout], [0],
725 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
730 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
731 OVS_VSWITCHD_START([dnl
732 add-port br0 p1 -- set Interface p1 type=dummy
734 ON_EXIT([kill `cat ovs-ofctl.pid`])
736 AT_CAPTURE_FILE([ofctl_monitor.log])
738 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
741 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)'
743 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
744 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
745 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
746 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
747 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
749 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
750 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
752 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
753 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
756 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
757 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
764 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
765 OVS_VSWITCHD_START([dnl
766 add-port br0 p1 -- set Interface p1 type=dummy
768 ON_EXIT([kill `cat ovs-ofctl.pid`])
770 AT_CAPTURE_FILE([ofctl_monitor.log])
771 AT_CHECK([ovs-ofctl del-flows br0])
773 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
775 dnl Test that missed packets are droped
777 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)'
779 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
781 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
784 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
785 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
786 OFPST_FLOW reply (OF1.3):
792 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
793 OVS_VSWITCHD_START([dnl
794 add-port br0 p1 -- set Interface p1 type=dummy
796 ON_EXIT([kill `cat ovs-ofctl.pid`])
798 AT_CAPTURE_FILE([ofctl_monitor.log])
799 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
801 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
804 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)'
806 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
807 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
808 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
809 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
810 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
812 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
813 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
815 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
816 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
819 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
820 sleep 1 # wait for revalidator to update stats
821 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
822 n_packets=3, n_bytes=180, actions=goto_table:1
823 OFPST_FLOW reply (OF1.2):
829 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
830 OVS_VSWITCHD_START([dnl
831 add-port br0 p1 -- set Interface p1 type=dummy
833 ON_EXIT([kill `cat ovs-ofctl.pid`])
835 AT_CAPTURE_FILE([ofctl_monitor.log])
836 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
838 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
841 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)'
844 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
845 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
848 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
849 sleep 1 # wait for revalidator to update stats
850 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
851 n_packets=3, n_bytes=180, actions=resubmit(1,1)
852 OFPST_FLOW reply (OF1.2):
858 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
859 OVS_VSWITCHD_START([dnl
860 add-port br0 p1 -- set Interface p1 type=dummy
862 ON_EXIT([kill `cat ovs-ofctl.pid`])
864 AT_CAPTURE_FILE([ofctl_monitor.log])
865 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
866 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
868 dnl Miss table 0, Hit table 1
869 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
872 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)'
874 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
875 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
877 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
878 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
879 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
881 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
882 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
884 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
885 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
888 dnl Hit table 0, Miss all other tables, sent to controller
889 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
892 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)'
894 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
895 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
897 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
898 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
899 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
901 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
902 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
904 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
905 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
908 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
909 sleep 1 # wait for revalidator to update stats
910 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
911 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
912 OFPST_FLOW reply (OF1.2):
918 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
919 OVS_VSWITCHD_START([dnl
920 add-port br0 p1 -- set Interface p1 type=dummy
922 ON_EXIT([kill `cat ovs-ofctl.pid`])
924 AT_CAPTURE_FILE([ofctl_monitor.log])
925 AT_DATA([flows.txt], [dnl
926 table=0 actions=goto_table(1)
927 table=2 dl_src=10:11:11:11:11:11 actions=controller
929 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
930 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
932 dnl Hit table 0, Miss table 1, Hit table 2
933 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
936 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)'
938 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
939 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
941 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
942 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
943 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
945 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
946 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
948 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
949 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
952 dnl Hit table 1, Miss all other tables, sent to controller
953 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
956 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)'
958 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
959 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
961 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
962 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
963 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
965 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
966 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
968 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
969 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
972 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
973 sleep 1 # wait for revalidator to update stats
974 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
975 n_packets=6, n_bytes=360, actions=goto_table:1
976 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
977 OFPST_FLOW reply (OF1.2):
983 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
984 OVS_VSWITCHD_START([dnl
985 add-port br0 p1 -- set Interface p1 type=dummy
987 ON_EXIT([kill `cat ovs-ofctl.pid`])
989 AT_CAPTURE_FILE([ofctl_monitor.log])
990 AT_DATA([flows.txt], [dnl
991 table=0 actions=resubmit(1,1)
992 table=2 dl_src=10:11:11:11:11:11 actions=controller
994 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
995 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
997 dnl Hit table 0, Miss table 1, Dropped
998 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1001 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)'
1003 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1005 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1008 dnl Hit table 1, Dropped
1009 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1012 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)'
1014 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1016 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1019 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1020 sleep 1 # wait for revalidator to update stats
1021 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1022 n_packets=6, n_bytes=360, actions=resubmit(1,1)
1023 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1024 OFPST_FLOW reply (OF1.2):
1030 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
1031 OVS_VSWITCHD_START([dnl
1032 add-port br0 p1 -- set Interface p1 type=dummy
1034 ON_EXIT([kill `cat ovs-ofctl.pid`])
1036 AT_CAPTURE_FILE([ofctl_monitor.log])
1037 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1039 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1041 dnl Test that missed packets are droped
1043 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)'
1045 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1047 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1050 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1051 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1058 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
1059 OVS_VSWITCHD_START([dnl
1060 add-port br0 p1 -- set Interface p1 type=dummy
1062 ON_EXIT([kill `cat ovs-ofctl.pid`])
1064 AT_CAPTURE_FILE([ofctl_monitor.log])
1065 AT_CHECK([ovs-ofctl del-flows br0])
1066 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1067 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1069 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1071 dnl Test that missed packets are droped
1073 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)'
1075 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1077 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1080 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1081 sleep 1 # wait for revalidator to update stats
1082 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1083 n_packets=3, n_bytes=180, actions=goto_table:1
1084 OFPST_FLOW reply (OF1.2):
1090 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1091 OVS_VSWITCHD_START([dnl
1092 add-port br0 p1 -- set Interface p1 type=dummy
1094 ON_EXIT([kill `cat ovs-ofctl.pid`])
1096 AT_CAPTURE_FILE([ofctl_monitor.log])
1097 AT_CHECK([ovs-ofctl del-flows br0])
1098 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1099 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1101 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1103 dnl Test that missed packets are droped
1105 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)'
1107 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1109 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1112 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1113 sleep 1 # wait for revalidator to update stats
1114 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1115 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1116 OFPST_FLOW reply (OF1.2):
1122 AT_SETUP([ofproto-dpif - controller])
1123 OVS_VSWITCHD_START([dnl
1124 add-port br0 p1 -- set Interface p1 type=dummy
1126 ON_EXIT([kill `cat ovs-ofctl.pid`])
1128 AT_CAPTURE_FILE([ofctl_monitor.log])
1129 AT_DATA([flows.txt], [dnl
1130 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1131 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1132 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1134 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1135 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)
1136 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)
1137 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1138 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)
1139 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1140 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1141 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1142 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
1143 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
1144 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
1145 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
1146 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
1147 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
1148 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
1149 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
1150 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1151 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1152 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
1153 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
1155 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1158 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1161 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)'
1163 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1164 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1166 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1167 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1168 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
1170 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1171 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
1173 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1174 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
1177 dnl Singleton controller action.
1178 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1181 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)'
1183 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1184 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1186 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1187 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1188 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
1190 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1191 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
1193 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1194 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
1197 dnl Modified controller action.
1198 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1201 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)'
1203 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1204 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1206 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1207 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1208 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
1210 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1211 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
1213 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1214 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
1217 dnl Modified VLAN controller action.
1218 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1221 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)'
1223 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1224 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1226 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1227 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1228 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
1230 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1231 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
1233 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1234 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
1237 dnl Modified MPLS controller action.
1238 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1241 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)'
1243 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1244 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1246 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1247 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1248 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
1250 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1251 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
1253 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1254 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
1257 dnl Modified MPLS controller action.
1258 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1261 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)'
1263 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1264 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1266 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1267 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1268 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
1270 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1271 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
1273 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1274 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
1277 dnl Modified MPLS controller action.
1278 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1280 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)
1283 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)'
1285 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1286 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1288 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1289 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1290 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
1292 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1293 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
1295 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1296 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
1299 dnl Modified MPLS controller action.
1300 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1303 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))'
1305 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1306 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1308 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1309 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1310 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
1312 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1313 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
1315 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1316 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
1319 dnl Modified MPLS controller action.
1320 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1323 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)'
1325 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1326 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1328 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1329 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1330 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
1332 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1333 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
1335 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1336 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
1339 dnl Modified MPLS controller action.
1340 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1343 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)'
1345 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1346 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1348 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1349 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1350 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
1352 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1353 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
1355 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1356 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
1359 dnl Modified MPLS controller action.
1360 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1363 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)'
1365 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1366 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1368 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1369 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1370 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
1372 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1373 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
1375 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1376 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
1379 dnl Modified MPLS controller action.
1380 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1383 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)'
1385 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1386 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1388 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1389 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1390 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
1392 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1393 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
1395 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1396 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
1399 dnl Modified MPLS actions.
1400 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1403 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)'
1405 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1406 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1408 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1409 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1410 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
1412 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1413 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
1415 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1416 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
1419 dnl Modified MPLS ipv6 controller action.
1420 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1423 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)'
1425 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1426 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1428 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1429 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1430 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
1432 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1433 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
1435 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1436 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
1440 dnl Modified MPLS pop action.
1441 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1442 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)
1443 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1445 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1448 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'
1451 # 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)'
1453 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1454 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1456 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1457 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1458 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
1460 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1461 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
1463 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1464 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
1468 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1471 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)'
1473 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1474 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1476 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1477 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1478 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
1480 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1481 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
1483 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)
1484 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
1486 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)
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=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
1489 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)
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=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
1492 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)
1493 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
1495 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)
1496 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
1498 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)
1499 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
1501 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)
1502 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
1506 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1509 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'
1511 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1512 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1514 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1515 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1516 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
1518 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1519 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
1521 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)
1522 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
1524 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)
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=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
1527 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)
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=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:2c37
1530 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)
1531 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
1533 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)
1534 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
1536 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)
1537 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
1539 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)
1540 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
1543 dnl Modified ARP controller action.
1544 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1547 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)'
1550 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1551 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1552 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
1559 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1560 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
1561 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1562 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
1563 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1564 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
1565 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1566 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
1567 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1568 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
1569 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1570 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
1573 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1576 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1579 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'
1582 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1583 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1584 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1585 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1586 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
1588 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1589 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
1591 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)
1592 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
1594 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)
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=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
1597 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)
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=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
1600 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)
1601 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
1603 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)
1604 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
1606 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)
1607 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
1609 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)
1610 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
1613 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1614 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1615 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1616 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)
1617 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)
1618 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)
1619 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)
1620 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)
1621 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1622 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1623 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
1624 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
1625 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
1626 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
1627 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
1628 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
1629 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
1630 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
1631 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
1632 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
1633 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
1634 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
1635 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1636 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1644 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1645 OVS_VSWITCHD_START([dnl
1646 add-port br0 p1 -- set Interface p1 type=dummy
1648 ON_EXIT([kill `cat ovs-ofctl.pid`])
1650 AT_CAPTURE_FILE([ofctl_monitor.log])
1651 # A table-miss flow has priority 0 and no match
1652 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1654 dnl Singleton controller action.
1655 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1658 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)'
1660 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1661 ovs-appctl -t ovs-ofctl exit
1663 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1664 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1665 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
1667 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1668 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
1670 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1671 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
1674 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1676 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1677 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1685 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1686 OVS_VSWITCHD_START([dnl
1687 add-port br0 p1 -- set Interface p1 type=dummy
1689 ON_EXIT([kill `cat ovs-ofctl.pid`])
1691 AT_CAPTURE_FILE([ofctl_monitor.log])
1692 # A table-miss flow has priority 0 and no match
1693 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1695 dnl Singleton controller action.
1696 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1699 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)'
1701 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1702 ovs-appctl -t ovs-ofctl exit
1704 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1706 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1707 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1708 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
1710 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1711 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
1713 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1714 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
1717 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1719 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1720 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1721 OFPST_FLOW reply (OF1.3):
1727 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1729 ADD_OF_PORTS([br0], [1], [2])
1731 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1732 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'
1734 # Input some packets that should follow the arp modification slow-path.
1736 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)'
1738 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1740 # Check the packets that were output.
1741 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1742 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
1743 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
1744 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
1745 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
1746 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
1747 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
1748 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
1749 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
1750 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
1756 AT_SETUP([ofproto-dpif - VLAN handling])
1758 [set Bridge br0 fail-mode=standalone -- \
1759 add-port br0 p1 trunks=10,12 -- \
1760 add-port br0 p2 tag=10 -- \
1761 add-port br0 p3 tag=12 \
1762 other-config:priority-tags=true -- \
1763 add-port br0 p4 tag=12 -- \
1764 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1765 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1766 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1767 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1768 other-config:priority-tags=true -- \
1769 set Interface p1 type=dummy -- \
1770 set Interface p2 type=dummy -- \
1771 set Interface p3 type=dummy -- \
1772 set Interface p4 type=dummy -- \
1773 set Interface p5 type=dummy -- \
1774 set Interface p6 type=dummy -- \
1775 set Interface p7 type=dummy -- \
1776 set Interface p8 type=dummy --])
1778 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1779 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1785 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1786 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1789 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1790 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1794 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1795 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1798 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1799 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1800 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1801 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1802 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1809 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1810 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1811 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1818 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1819 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1820 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1827 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1828 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1829 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1830 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1831 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1834 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1835 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1836 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1837 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1838 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1839 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1840 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1843 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1844 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1845 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1846 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1847 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1848 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1849 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1852 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1853 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1854 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1855 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1856 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1857 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1858 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1861 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1862 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1870 if test $vlan = none; then
1871 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1873 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))"
1876 echo "----------------------------------------------------------------------"
1877 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1879 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1880 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1882 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1884 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1890 AT_SETUP([ofproto-dpif - MPLS handling])
1891 OVS_VSWITCHD_START([dnl
1892 add-port br0 p1 -- set Interface p1 type=dummy
1894 ON_EXIT([kill `cat ovs-ofctl.pid`])
1896 AT_CAPTURE_FILE([ofctl_monitor.log])
1897 AT_DATA([flows.txt], [dnl
1898 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1899 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1900 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1902 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1904 dnl In this test, we push an MPLS tag to an ethernet packet.
1905 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1908 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)'
1910 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1911 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1913 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1914 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1915 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
1916 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1917 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1918 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1919 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1921 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1922 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
1923 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1924 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1925 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1926 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1928 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1929 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
1930 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1931 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1932 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1933 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1936 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1937 dnl copied exactly, except for the BOS bit.
1938 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1941 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)'
1943 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1944 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1946 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1947 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1948 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
1949 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1950 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1951 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1952 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1954 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1955 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
1956 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1957 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1958 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1959 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1961 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1962 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
1963 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1964 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1965 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1966 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1969 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1970 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1971 dnl to the MPLS ethertype of the MPLS push action which differs to that
1972 dnl of the input packet.
1973 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1976 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)'
1978 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1979 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1981 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1982 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1983 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
1984 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1985 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1986 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1987 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1989 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1990 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
1991 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1992 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1993 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1994 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1996 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1997 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
1998 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1999 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
2000 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
2001 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
2007 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
2008 OVS_VSWITCHD_START([dnl
2009 add-port br0 p1 -- set Interface p1 type=dummy
2011 ON_EXIT([kill `cat ovs-ofctl.pid`])
2013 AT_CAPTURE_FILE([ofctl_monitor.log])
2014 AT_DATA([flows.txt], [dnl
2015 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
2016 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
2017 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
2018 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
2019 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
2020 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
2021 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
2022 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
2023 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
2024 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
2026 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
2028 dnl Modified MPLS controller action.
2029 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2030 dnl both of these in the final flow
2031 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2034 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)'
2036 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2037 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2039 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2040 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2041 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
2042 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2043 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2044 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2045 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2046 00000040 00 00 00 00
2048 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2049 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
2050 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2051 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2052 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2053 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2054 00000040 00 00 00 00
2056 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2057 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
2058 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2059 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2060 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2061 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2062 00000040 00 00 00 00
2065 dnl Modified MPLS controller action.
2066 dnl In this test, the input packet in vlan-tagged, which should be stripped
2067 dnl before we push the MPLS and VLAN tags.
2068 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2071 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))'
2073 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2074 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2076 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2077 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2078 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
2079 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2080 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2081 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2082 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2084 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2085 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
2086 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2087 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2088 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2089 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2091 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2092 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
2093 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2094 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2095 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2096 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2099 dnl Modified MPLS controller action.
2100 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2101 dnl both of these in the final flow
2102 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2105 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)'
2107 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2108 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2110 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2111 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2112 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
2113 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2114 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2115 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2116 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2117 00000040 00 00 00 00
2119 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2120 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
2121 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2122 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2123 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2124 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2125 00000040 00 00 00 00
2127 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2128 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
2129 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2130 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2131 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2132 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2133 00000040 00 00 00 00
2136 dnl Modified MPLS controller action.
2137 dnl In this test, the input packet in vlan-tagged, which should be stripped
2138 dnl before we push the MPLS and VLAN tags.
2139 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2142 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))'
2144 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2145 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2147 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2148 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2149 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
2150 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2151 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2152 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2153 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2155 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2156 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
2157 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2158 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2159 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2160 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2162 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2163 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
2164 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2165 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2166 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2167 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2170 dnl Modified MPLS controller action.
2171 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2172 dnl actions are reordered, so we see both of these in the final flow.
2173 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2176 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)'
2178 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2179 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2181 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2182 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2183 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
2184 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2185 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2186 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2187 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2188 00000040 00 00 00 00
2190 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2191 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
2192 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2193 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2194 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2195 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2196 00000040 00 00 00 00
2198 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2199 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
2200 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2201 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2202 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2203 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2204 00000040 00 00 00 00
2207 dnl Modified MPLS controller action.
2208 dnl In this test, the input packet in vlan-tagged, which should be stripped
2209 dnl before we push the MPLS and VLAN tags.
2210 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2213 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))'
2215 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2216 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2218 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2219 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2220 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
2221 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2222 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2223 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2224 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2226 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2227 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
2228 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2229 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2230 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2231 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2233 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2234 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
2235 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2236 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2237 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2238 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2241 dnl Modified MPLS controller action.
2242 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2243 dnl actions are reordered, so we see both of these in the final flow.
2244 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2247 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)'
2249 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2250 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2252 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2253 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2254 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
2255 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2256 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2257 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2258 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2259 00000040 00 00 00 00
2261 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2262 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
2263 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2264 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2265 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2266 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2267 00000040 00 00 00 00
2269 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2270 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
2271 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2272 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2273 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2274 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2275 00000040 00 00 00 00
2278 dnl Modified MPLS controller action.
2279 dnl In this test, the input packet in vlan-tagged, which should be stripped
2280 dnl before we push the MPLS and VLAN tags.
2281 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2284 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))'
2286 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2287 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2289 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2290 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2291 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
2292 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2293 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2294 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2295 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2297 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2298 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
2299 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2300 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2301 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2302 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2304 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2305 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
2306 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2307 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2308 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2309 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2312 dnl Modified MPLS controller action.
2313 dnl In this test, the input packet in vlan-tagged, which should be stripped
2314 dnl before we push the MPLS and VLAN tags.
2315 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2318 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))'
2320 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2321 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2323 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2324 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2325 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
2326 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2327 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2328 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2329 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2331 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2332 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
2333 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2334 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2335 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2336 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2338 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2339 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
2340 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2341 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2342 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2343 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2346 dnl Modified MPLS controller action.
2347 dnl In this test, the input packet in vlan-tagged, which should be modified
2348 dnl before we push MPLS and VLAN tags.
2349 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2352 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))'
2354 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2355 ovs-appctl -t ovs-ofctl exit
2357 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2358 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2359 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
2360 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2361 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2362 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2363 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2365 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2366 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
2367 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2368 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2369 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2370 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2372 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2373 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
2374 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2375 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2376 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2377 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2380 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2381 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2382 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
2383 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
2384 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
2385 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
2386 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
2387 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
2388 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
2389 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
2390 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
2391 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
2392 OFPST_FLOW reply (OF1.2):
2398 AT_SETUP([ofproto-dpif - fragment handling])
2400 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2401 AT_DATA([flows.txt], [dnl
2402 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2403 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2404 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2405 priority=50 tcp ip_frag=no actions=output:4
2406 priority=50 tcp ip_frag=first actions=output:5
2407 priority=50 tcp ip_frag=later actions=output:6
2409 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2411 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"
2412 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2413 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2414 later_flow="$base_flow,frag=later)"
2416 # mode no first later
2419 'drop 1 drop drop' \
2428 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2429 for type in no first later; do
2430 eval flow=\$${type}_flow exp_output=\$$type
2431 printf "\n%s\n" "----$mode $type-----"
2432 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2434 if test $mode = drop && test $type != no; then
2435 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2437 echo "Datapath actions: $exp_output" >> expout
2438 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2444 AT_SETUP([ofproto-dpif - exit])
2446 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2447 AT_DATA([flows.txt], [dnl
2448 in_port=1 actions=output:10,exit,output:11
2449 in_port=2 actions=output:12,resubmit:1,output:12
2450 in_port=3 actions=output:13,resubmit:2,output:14
2452 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2453 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])
2454 AT_CHECK([tail -1 stdout], [0],
2455 [Datapath actions: 10
2457 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])
2458 AT_CHECK([tail -1 stdout], [0],
2459 [Datapath actions: 12,10
2461 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])
2462 AT_CHECK([tail -1 stdout], [0],
2463 [Datapath actions: 13,12,10
2469 AT_SETUP([ofproto-dpif - mirroring, select_all])
2471 ADD_OF_PORTS([br0], 1, 2, 3)
2473 set Bridge br0 mirrors=@m --\
2474 --id=@p3 get Port p3 --\
2475 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2477 AT_DATA([flows.txt], [dnl
2478 in_port=1 actions=output:2
2479 in_port=2 actions=output:1
2481 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2483 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)"
2484 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2485 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2486 [Datapath actions: 2,3
2489 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)"
2490 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2491 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2492 [Datapath actions: 1,3
2499 AT_SETUP([ofproto-dpif - mirroring, select_src])
2501 ADD_OF_PORTS([br0], 1, 2, 3)
2503 set Bridge br0 mirrors=@m --\
2504 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2505 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2507 AT_DATA([flows.txt], [dnl
2508 in_port=1 actions=output:2
2509 in_port=2 actions=output:1
2511 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2513 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)"
2514 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2515 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2516 [Datapath actions: 2,3
2519 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)"
2520 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2521 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2522 [Datapath actions: 1
2527 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2529 ADD_OF_PORTS([br0], 1, 2)
2531 set Bridge br0 mirrors=@m --\
2532 --id=@p2 get Port p2 --\
2533 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2535 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2537 # "in_port" defaults to OFPP_NONE if it's not specified.
2538 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"
2539 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2540 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2541 [Datapath actions: 1,2
2548 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2550 ADD_OF_PORTS([br0], 1, 2, 3)
2552 set Bridge br0 mirrors=@m --\
2553 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2554 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2556 AT_DATA([flows.txt], [dnl
2557 in_port=1 actions=output:2
2558 in_port=2 actions=output:1
2560 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2562 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)"
2563 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2564 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2565 [Datapath actions: 2,3
2568 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)"
2569 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2570 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2571 [Datapath actions: 1
2578 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2580 ADD_OF_PORTS([br0], 1, 2, 3)
2582 set Bridge br0 mirrors=@m --\
2583 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2584 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2586 AT_DATA([flows.txt], [dnl
2587 in_port=1, actions=output:2
2589 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2591 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)"
2592 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2593 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2594 [Datapath actions: 2
2597 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))"
2598 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2599 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2600 [Datapath actions: 2
2603 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))"
2604 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2605 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2606 [Datapath actions: 2,3
2613 AT_SETUP([ofproto-dpif - mirroring, output_port])
2615 ADD_OF_PORTS([br0], 1, 2, 3)
2617 set Bridge br0 mirrors=@m --\
2618 --id=@p3 get Port p3 --\
2619 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2621 AT_DATA([flows.txt], [dnl
2622 in_port=1 actions=mod_vlan_vid:17,output:2
2623 in_port=2 actions=output:1
2625 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2627 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)"
2628 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2629 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2630 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2633 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)"
2634 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2635 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2636 [Datapath actions: 1,3
2642 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2644 ADD_OF_PORTS([br0], 1, 2)
2646 set Bridge br0 mirrors=@m --\
2647 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2649 AT_DATA([flows.txt], [dnl
2650 in_port=1 actions=output:2
2651 in_port=2 actions=mod_vlan_vid:17,output:1
2653 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2655 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)"
2656 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2657 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2659 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2660 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2662 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2664 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)"
2665 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2666 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2668 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2669 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2671 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2676 # Two testcases below are for the ofproto/trace command
2677 # The first one tests all correct syntax:
2678 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2679 # ofproto/trace br_name br_flow [-generate|packet]
2680 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2681 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2682 ADD_OF_PORTS([br0], 1, 2, 3)
2684 AT_DATA([flows.txt], [dnl
2685 in_port=1 actions=output:2
2686 in_port=2 actions=output:1
2688 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2690 odp_flow="in_port(p1)"
2692 # Test command: ofproto/trace odp_flow with in_port as a name.
2693 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2694 AT_CHECK([tail -1 stdout], [0], [dnl
2698 odp_flow="in_port(1)"
2699 # Test command: ofproto/trace odp_flow
2700 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2701 AT_CHECK([tail -1 stdout], [0], [dnl
2705 # Test command: ofproto/trace dp_name odp_flow
2706 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2707 AT_CHECK([tail -1 stdout], [0], [dnl
2710 # Test commmand: ofproto/trace br_name br_flow
2711 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2712 AT_CHECK([tail -1 stdout], [0], [dnl
2716 # Delete the inserted flows
2717 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2718 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2720 # This section beflow tests the [-generate] option
2721 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2722 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"
2724 # Test command: ofproto/trace odp_flow
2725 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2726 # Check for no MAC learning entry
2727 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2731 # Test command: ofproto/trace br_name br_flow
2732 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2733 # Check for no MAC learning entry
2734 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2738 # Test command: ofproto/trace odp_flow -generate
2739 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2740 # Check for the MAC learning entry
2741 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2743 3 0 50:54:00:00:00:05 ?
2746 # Test command: ofproto/trace dp_name odp_flow -generate
2747 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2748 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2749 -generate], [0], [stdout])
2750 # Check for both MAC learning entries
2751 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2753 3 0 50:54:00:00:00:05 ?
2754 1 0 50:54:00:00:00:06 ?
2757 # Test command: ofproto/trace br_name br_flow -generate
2758 AT_CHECK([ovs-appctl ofproto/trace br0 \
2759 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2760 -generate], [0], [stdout])
2761 # Check for both MAC learning entries.
2762 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2764 3 0 50:54:00:00:00:05 ?
2765 1 0 50:54:00:00:00:06 ?
2766 2 0 50:54:00:00:00:07 ?
2769 # This section beflow tests the [packet] option
2770 # The ovs-tcpundump of packets between port1 and port2
2771 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2772 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2774 # Construct the MAC learning table
2775 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2776 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2777 -generate], [0], [stdout])
2779 # Construct the MAC learning table
2780 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2781 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2782 -generate], [0], [stdout])
2784 # Test command: ofproto/trace odp_flow packet
2785 AT_CHECK([ovs-appctl ofproto/trace \
2786 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2787 AT_CHECK([tail -1 stdout], [0], [dnl
2790 AT_CHECK([head -n 2 stdout], [0], [dnl
2792 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
2795 # Test command: ofproto/trace dp_name odp_flow packet
2796 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2797 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2798 AT_CHECK([tail -1 stdout], [0], [dnl
2801 AT_CHECK([head -n 2 stdout], [0], [dnl
2803 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
2806 # Test command: ofproto/trace br_name br_flow packet
2807 AT_CHECK([ovs-appctl ofproto/trace br0 \
2808 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2809 AT_CHECK([tail -1 stdout], [0], [dnl
2812 AT_CHECK([head -n 2 stdout], [0], [dnl
2814 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
2820 # The second test tests the corner cases
2821 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2823 ADD_OF_PORTS([br0], 1, 2)
2826 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2827 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2829 generate="-generate"
2830 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2832 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2838 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2840 AT_CHECK([tail -2 stderr], [0], [dnl
2841 Cannot find the datapath
2842 ovs-appctl: ovs-vswitchd: server returned an error
2845 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2851 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2853 AT_CHECK([tail -2 stderr], [0], [dnl
2854 Cannot find the datapath
2855 ovs-appctl: ovs-vswitchd: server returned an error
2858 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2864 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2866 AT_CHECK([tail -2 stderr], [0], [dnl
2867 Cannot find the datapath
2868 ovs-appctl: ovs-vswitchd: server returned an error
2871 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2877 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2879 AT_CHECK([tail -2 stderr], [0], [dnl
2880 Cannot find the datapath
2881 ovs-appctl: ovs-vswitchd: server returned an error
2884 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2890 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2892 AT_CHECK([tail -2 stderr], [0], [dnl
2894 ovs-appctl: ovs-vswitchd: server returned an error
2897 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2903 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2905 AT_CHECK([tail -2 stderr], [0], [dnl
2906 Must specify bridge name
2907 ovs-appctl: ovs-vswitchd: server returned an error
2910 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2911 AT_CHECK([ovs-appctl ofproto/trace \
2912 ovs-dummy "$odp_flow" garbage_option],
2913 [2], [stdout],[stderr])
2914 AT_CHECK([tail -2 stderr], [0], [dnl
2915 Trailing garbage in packet data
2916 ovs-appctl: ovs-vswitchd: server returned an error
2919 # Test incorrect command: ofproto/trace with 4 arguments
2920 AT_CHECK([ovs-appctl ofproto/trace \
2921 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2922 AT_CHECK([tail -2 stderr], [0], [dnl
2923 "ofproto/trace" command takes at most 3 arguments
2924 ovs-appctl: ovs-vswitchd: server returned an error
2927 # Test incorrect command: ofproto/trace with 0 argument
2928 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2929 AT_CHECK([tail -2 stderr], [0], [dnl
2930 "ofproto/trace" command requires at least 1 arguments
2931 ovs-appctl: ovs-vswitchd: server returned an error
2937 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2939 ADD_OF_PORTS([br0], 1, 2, 3)
2941 AT_DATA([flows.txt], [dnl
2942 in_port=1 actions=output:2
2943 in_port=2 actions=output:1
2945 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2947 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2948 AT_CHECK([tail -1 stdout], [0], [dnl
2949 Datapath actions: push_vlan(vid=123,pcp=0),2
2956 m4_define([OFPROTO_TRACE],
2958 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2959 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2961 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2964 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2967 AT_SETUP([ofproto-dpif - MAC learning])
2968 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2969 ADD_OF_PORTS([br0], 1, 2, 3)
2971 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)'
2973 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2976 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2980 # Check for the MAC learning entry.
2981 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2983 3 0 50:54:00:00:00:05 ?
2986 # Trace a packet arrival destined for the learned MAC.
2987 # (This will also learn a MAC.)
2990 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2994 # Check for both MAC learning entries.
2995 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2997 3 0 50:54:00:00:00:05 ?
2998 1 0 50:54:00:00:00:06 ?
3001 # Trace a packet arrival that updates the first learned MAC entry.
3004 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
3008 # Check that the MAC learning entry was updated.
3009 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3011 1 0 50:54:00:00:00:06 ?
3012 2 0 50:54:00:00:00:05 ?
3015 # Add another bridge.
3019 -- set bridge br1 datapath-type=dummy])
3020 ADD_OF_PORTS([br1], 4, 5)
3022 # Trace some packet arrivals in br1 to create MAC learning entries there too.
3025 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
3030 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
3034 # Check that the MAC learning entries were added.
3035 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3037 4 0 50:54:00:00:00:06 ?
3038 5 0 50:54:00:00:00:07 ?
3041 # Delete port p1 and see that its MAC learning entry disappeared, and
3042 # that the MAC learning entry for the same MAC was also deleted from br1.
3043 AT_CHECK([ovs-vsctl del-port p1])
3044 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3046 2 0 50:54:00:00:00:05 ?
3048 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3050 5 0 50:54:00:00:00:07 ?
3056 AT_SETUP([ofproto-dpif - MAC table overflow])
3058 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
3059 ADD_OF_PORTS([br0], 1, 2, 3)
3061 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)'
3063 AT_CHECK([ovs-appctl time/stop])
3065 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
3066 for i in 0 1 2 3 4 5 6 7 8 9; do
3069 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
3072 ovs-appctl time/warp 1000
3075 # Check for the MAC learning entries.
3076 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3078 3 0 50:54:00:00:00:00
3079 3 0 50:54:00:00:00:01
3080 3 0 50:54:00:00:00:02
3081 3 0 50:54:00:00:00:03
3082 3 0 50:54:00:00:00:04
3083 3 0 50:54:00:00:00:05
3084 3 0 50:54:00:00:00:06
3085 3 0 50:54:00:00:00:07
3086 3 0 50:54:00:00:00:08
3087 3 0 50:54:00:00:00:09
3091 # Trace another ARP packet on another MAC.
3094 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3098 # Check that the new one chased the oldest one out of the table.
3099 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3101 3 0 50:54:00:00:00:01 ?
3102 3 0 50:54:00:00:00:02 ?
3103 3 0 50:54:00:00:00:03 ?
3104 3 0 50:54:00:00:00:04 ?
3105 3 0 50:54:00:00:00:05 ?
3106 3 0 50:54:00:00:00:06 ?
3107 3 0 50:54:00:00:00:07 ?
3108 3 0 50:54:00:00:00:08 ?
3109 3 0 50:54:00:00:00:09 ?
3110 3 0 50:54:00:00:00:10 ?
3116 AT_SETUP([ofproto-dpif - MAC table overflow fairness])
3118 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
3119 ADD_OF_PORTS([br0], 1, 2, 3, 4, 5, 6)
3121 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)'
3123 AT_CHECK([ovs-appctl time/stop])
3125 # Trace packets with 2 different source MACs arriving on each of the 5
3126 # ports, filling up the 10-entry learning table.
3127 for i in 0 1 2 3 4 5 6 7 8 9; do
3129 ovs-appctl ofproto/trace ovs-dummy "in_port($p),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp" -generate
3130 ovs-appctl time/warp 1000
3133 # Check for the MAC learning entries.
3134 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3136 1 0 50:54:00:00:00:00
3137 1 0 50:54:00:00:00:01
3138 2 0 50:54:00:00:00:02
3139 2 0 50:54:00:00:00:03
3140 3 0 50:54:00:00:00:04
3141 3 0 50:54:00:00:00:05
3142 4 0 50:54:00:00:00:06
3143 4 0 50:54:00:00:00:07
3144 5 0 50:54:00:00:00:08
3145 5 0 50:54:00:00:00:09
3149 # Now trace 16 new MACs on another port.
3150 for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
3151 ovs-appctl ofproto/trace ovs-dummy "in_port(6),eth(src=50:54:00:00:0$i:ff,dst=ff:ff:ff:ff:ff:ff),$arp" -generate
3152 ovs-appctl time/warp 1000
3155 # Check the results.
3157 # Our eviction algorithm on overflow is that an arbitrary (but deterministic)
3158 # one of the ports with the most learned MACs loses the least recently used
3159 # one. Thus, the new port will end up with 3 MACs, 3 of the old ports with 1
3160 # MAC each, and the other 2 of the old ports with 2 MACs each.
3162 # (If someone changes lib/heap.c to do something different with equal-priority
3163 # nodes, then the output below could change, but it would still follow the
3164 # rules explained above.)
3165 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3167 1 0 50:54:00:00:00:01
3168 2 0 50:54:00:00:00:03
3169 3 0 50:54:00:00:00:04
3170 3 0 50:54:00:00:00:05
3171 4 0 50:54:00:00:00:07
3172 5 0 50:54:00:00:00:08
3173 5 0 50:54:00:00:00:09
3174 6 0 50:54:00:00:0d:ff
3175 6 0 50:54:00:00:0e:ff
3176 6 0 50:54:00:00:0f:ff
3182 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3184 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3186 # IP_VERSION_TYPE is used in AT_SETUP
3187 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3188 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3189 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3191 ON_EXIT([kill `cat test-sflow.pid`])
3192 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3193 AT_CAPTURE_FILE([sflow.log])
3194 SFLOW_PORT=`parse_listening_port < test-sflow.log`
3195 ovs-appctl time/stop
3197 ADD_OF_PORTS([br0], 1, 2)
3199 set Interface br0 options:ifindex=1002 -- \
3200 set Interface p1 options:ifindex=1004 -- \
3201 set Interface p2 options:ifindex=1003 -- \
3202 set Bridge br0 sflow=@sf -- \
3203 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3204 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3206 dnl open with ARP packets to seed the bridge-learning. The output
3207 dnl ifIndex numbers should be reported predictably after that.
3208 dnl Since we set sampling=1 we should see all of these packets
3209 dnl reported. Sorting the output by data-source and seqNo makes
3210 dnl it deterministic. Ensuring that we send at least two packets
3211 dnl into each port means we get to check the seq nos are
3212 dnl incrementing correctly.
3213 dnl because packets from different ports can be handled by separate
3214 dnl threads, put some sleeps
3216 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)'
3218 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)'
3220 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)'
3222 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)'
3223 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)'
3225 dnl sleep long enough to get more than one counter sample
3226 dnl from each datasource so we can check sequence numbers
3227 for i in `seq 1 30`; do
3228 ovs-appctl time/warp 100
3231 ovs-appctl -t test-sflow exit
3233 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3254 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
3274 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
3294 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
3314 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
3334 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
3337 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3351 in_broadcasts=4294967295
3354 in_unknownprotos=4294967295
3357 out_multicasts=4294967295
3358 out_broadcasts=4294967295
3374 in_broadcasts=4294967295
3377 in_unknownprotos=4294967295
3380 out_multicasts=4294967295
3381 out_broadcasts=4294967295
3397 in_broadcasts=4294967295
3400 in_unknownprotos=4294967295
3403 out_multicasts=4294967295
3404 out_broadcasts=4294967295
3420 in_broadcasts=4294967295
3423 in_unknownprotos=4294967295
3426 out_multicasts=4294967295
3427 out_broadcasts=4294967295
3443 in_broadcasts=4294967295
3446 in_unknownprotos=4294967295
3449 out_multicasts=4294967295
3450 out_broadcasts=4294967295
3466 in_broadcasts=4294967295
3469 in_unknownprotos=4294967295
3472 out_multicasts=4294967295
3473 out_broadcasts=4294967295
3480 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3481 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3483 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3485 # Test that basic NetFlow reports flow statistics correctly:
3486 # The initial packet of a flow are correctly accounted.
3487 # Later packets within a flow are correctly accounted.
3488 # Flow actions changing (in this case, due to MAC learning)
3489 # cause a record to be sent.
3491 # IP_VERSION_TYPE is used in AT_SETUP
3492 m4_define([CHECK_NETFLOW_EXPIRATION],
3493 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3494 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3495 ADD_OF_PORTS([br0], 1, 2)
3497 ovs-appctl time/stop
3498 ON_EXIT([kill `cat test-netflow.pid`])
3499 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3500 AT_CAPTURE_FILE([netflow.log])
3501 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3504 set Bridge br0 netflow=@nf -- \
3505 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3506 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3508 for delay in 1000 30000; do
3509 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)'
3510 sleep 1 # ensure the order in which these two packets are processed
3511 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)'
3513 ovs-appctl time/warp $delay
3516 ovs-appctl time/warp 6000
3519 ovs-appctl -t test-netflow exit
3521 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])
3523 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])
3525 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3526 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3527 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3531 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3532 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3534 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3536 # Test that basic NetFlow reports active expirations correctly.
3538 # IP_VERSION_TYPE is used in AT_SETUP
3539 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3540 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3542 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3543 ADD_OF_PORTS([br0], 1, 2)
3545 ON_EXIT([kill `cat test-netflow.pid`])
3546 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3547 AT_CAPTURE_FILE([netflow.log])
3548 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3551 set Bridge br0 netflow=@nf -- \
3552 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3553 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3555 AT_CHECK([ovs-appctl time/stop])
3557 while test $n -le 60; do
3560 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)'
3561 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)'
3563 ovs-appctl time/warp 1000
3566 ovs-appctl time/warp 10000
3570 ovs-appctl -t test-netflow exit
3572 # Count the number of reported packets:
3573 # - From source to destination before MAC learning kicks in (just one).
3574 # - From source to destination after that.
3575 # - From destination to source.
3583 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3590 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3593 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3596 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3603 eval $counter=\`expr \$$counter + \$pkts\`
3604 n_recs=`expr $n_recs + 1`
3607 # There should be exactly 1 MAC learning packet,
3608 # exactly 59 other packets in that direction,
3609 # and exactly 60 packets in the other direction.
3610 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3615 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3616 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3618 AT_SETUP([ofproto-dpif - flow stats])
3620 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3621 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3623 ovs-appctl time/stop
3625 for i in `seq 1 10`; do
3626 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)'
3629 ovs-appctl time/warp 1000
3630 sleep 1 # wait for revalidator to update stats
3632 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3633 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3634 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3635 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3640 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3642 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3643 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3645 ovs-appctl time/stop
3647 for i in `seq 1 10`; do
3648 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)'
3651 ovs-appctl time/warp 100
3652 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3653 ovs-appctl time/warp 1000
3655 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3656 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3657 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3658 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3663 AT_SETUP([idle_age and hard_age increase over time])
3666 # get_ages DURATION HARD IDLE
3668 # Fetch the flow duration, hard age, and idle age into the variables
3669 # whose names are given as arguments. Rounds DURATION down to the
3670 # nearest integer. If hard_age doesn't appear in the output, sets
3671 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3674 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3676 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3677 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3678 AS_VAR_COPY([$1], [duration])
3680 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3681 if test X"$hard" = X; then
3684 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3686 AS_VAR_COPY([$2], [hard])
3688 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3689 if test X"$idle" = X; then
3692 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3694 AS_VAR_COPY([$3], [idle])
3697 # Add a flow and get its initial hard and idle age.
3698 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3699 get_ages duration1 hard1 idle1
3701 ovs-appctl time/stop
3702 # Warp time forward by 10 seconds, then modify the flow's actions.
3703 ovs-appctl time/warp 10000
3704 get_ages duration2 hard2 idle2
3705 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3707 # Warp time forward by 10 seconds.
3708 ovs-appctl time/warp 10000
3709 get_ages duration3 hard3 idle3
3711 # Warp time forward 10 more seconds, then pass some packets through the flow,
3712 # then warp forward a few more times because idle times are only updated
3714 ovs-appctl time/warp 10000
3715 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)'
3716 ovs-appctl time/warp 1000
3717 ovs-appctl time/warp 1000
3718 ovs-appctl time/warp 1000
3720 get_ages duration4 hard4 idle4
3722 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3723 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3724 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3726 # Duration should increase steadily over time.
3727 AT_CHECK([test $duration1 -lt $duration2])
3728 AT_CHECK([test $duration2 -lt $duration3])
3729 AT_CHECK([test $duration3 -lt $duration4])
3731 # Hard age should be "none" initially because it's the same as flow_duration,
3732 # then it should increase.
3733 AT_CHECK([test $hard1 = none])
3734 AT_CHECK([test $hard2 = none])
3735 AT_CHECK([test $hard3 != none])
3736 AT_CHECK([test $hard4 != none])
3737 AT_CHECK([test $hard3 -lt $hard4])
3739 # Idle age should increase from 1 to 2 to 3, then decrease.
3740 AT_CHECK([test $idle1 -lt $idle2])
3741 AT_CHECK([test $idle2 -lt $idle3])
3742 AT_CHECK([test $idle3 -gt $idle4])
3744 # Check some invariant relationships.
3745 AT_CHECK([test $duration1 = $idle1])
3746 AT_CHECK([test $duration2 = $idle2])
3747 AT_CHECK([test $duration3 = $idle3])
3748 AT_CHECK([test $idle3 -gt $hard3])
3749 AT_CHECK([test $idle4 -lt $hard4])
3750 AT_CHECK([test $hard4 -lt $duration4])
3755 AT_SETUP([ofproto-dpif - fin_timeout])
3757 AT_DATA([flows.txt], [dnl
3758 in_port=1 actions=output:2
3759 in_port=2 actions=mod_vlan_vid:17,output:1
3761 ovs-appctl time/stop
3762 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3763 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3765 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3768 # Check that a TCP SYN packet does not change the timeout. (Because
3769 # flow stats updates are mainly what implements the fin_timeout
3770 # feature, we warp forward a couple of times to ensure that flow stats
3771 # run before re-checking the flow table.)
3772 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3773 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3777 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3779 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3781 # Check that a TCP FIN packet does change the timeout.
3782 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3783 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3786 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3788 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3793 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3794 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3795 ADD_OF_PORTS([br0], [1], [2])
3796 ADD_OF_PORTS([br1], [3])
3798 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3805 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3806 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3807 ADD_OF_PORTS([br0], [1], [2])
3808 ADD_OF_PORTS([br1], [3])
3810 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3811 dummy@ovs-dummy: hit:0 missed:0
3813 br0 65534/100: (dummy)
3817 br1 65534/101: (dummy)
3823 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3824 # bump max-idle to avoid the flows being reclaimed behind us
3825 OVS_VSWITCHD_START([add-br br1 -- \
3826 set bridge br1 datapath-type=dummy fail-mode=secure -- \
3827 set Open_vSwitch . other_config:max-idle=10000])
3828 ADD_OF_PORTS([br0], [1], [2])
3829 ADD_OF_PORTS([br1], [3])
3831 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)'])
3832 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)'])
3833 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)'])
3834 sleep 1 # wait for upcall handlers
3835 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3836 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
3837 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
3840 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3841 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
3844 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3845 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
3846 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
3849 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3850 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
3856 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
3857 OVS_VSWITCHD_START([dnl
3858 add-port br0 p1 -- set Interface p1 type=dummy
3860 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3861 ON_EXIT([kill `cat ovs-ofctl.pid`])
3863 AT_CAPTURE_FILE([ofctl_monitor.log])
3864 AT_DATA([flows.txt], [dnl
3865 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3866 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3868 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3870 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3871 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3873 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3874 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)
3875 dnl (label 20, exp 0, [S], ttl 32)
3876 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3877 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3879 for dl_src in 00 01; do
3880 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"])
3882 sleep 1 # wait for the datapath flow installed
3883 for dl_src in 00 01; do
3884 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3885 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))
3893 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
3894 OVS_VSWITCHD_START([dnl
3895 add-port br0 p1 -- set Interface p1 type=dummy
3897 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3898 ON_EXIT([kill `cat ovs-ofctl.pid`])
3900 AT_CAPTURE_FILE([ofctl_monitor.log])
3901 AT_DATA([flows.txt], [dnl
3902 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3903 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3905 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3907 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3908 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3909 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3911 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3912 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)
3913 dnl (label 20, exp 0, ttl 32)
3914 dnl (label 20, exp 0, ttl 32)
3915 dnl (label 20, exp 0, [S], ttl 32)
3916 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3917 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3919 for dl_src in 00 01; do
3920 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"])
3922 sleep 1 # wait for the datapath flow installed
3923 for dl_src in 00 01; do
3924 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3925 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))
3932 AT_SETUP([ofproto-dpif - patch ports])
3933 OVS_VSWITCHD_START([add-br br1 \
3934 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3935 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3936 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3938 ADD_OF_PORTS([br0], [2])
3939 ADD_OF_PORTS([br1], [3])
3941 AT_CHECK([ovs-appctl time/stop])
3942 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3944 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3945 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3947 for i in $(seq 1 10); do
3948 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)'
3949 if [[ $i -eq 1 ]]; then
3954 for i in $(seq 1 5); do
3955 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)'
3956 if [[ $i -eq 1 ]]; then
3961 AT_CHECK([ovs-appctl time/warp 500], [0],
3964 sleep 1 # wait for log writer
3966 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3967 dummy@ovs-dummy: hit:13 missed:2
3969 br0 65534/100: (dummy)
3971 pbr0 1/none: (patch: peer=pbr1)
3973 br1 65534/101: (dummy)
3975 pbr1 1/none: (patch: peer=pbr0)
3978 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3979 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
3980 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
3983 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3984 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
3986 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3987 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
3990 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3991 OFPST_PORT reply (xid=0x4): 1 ports
3992 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3993 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3996 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3997 OFPST_PORT reply (xid=0x4): 1 ports
3998 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3999 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
4005 AT_SETUP([ofproto-dpif - port duration])
4006 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
4007 ADD_OF_PORTS([br0], 1, 2)
4009 ovs-appctl time/stop
4010 ovs-appctl time/warp 10000
4012 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
4013 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
4022 dnl ----------------------------------------------------------------------
4023 AT_BANNER([ofproto-dpif -- megaflows])
4025 AT_SETUP([ofproto-dpif megaflow - port classification])
4027 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4028 ADD_OF_PORTS([br0], [1], [2])
4029 AT_DATA([flows.txt], [dnl
4030 table=0 in_port=1 actions=output(2)
4032 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4033 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)'])
4035 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)'])
4037 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4038 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>
4043 AT_SETUP([ofproto-dpif megaflow - L2 classification])
4045 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4046 ADD_OF_PORTS([br0], [1], [2])
4047 AT_DATA([flows.txt], [dnl
4048 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
4050 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4051 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)'])
4052 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)'])
4054 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4055 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>
4056 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>
4061 AT_SETUP([ofproto-dpif megaflow - L3 classification])
4063 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4064 ADD_OF_PORTS([br0], [1], [2])
4065 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], [])
4066 AT_DATA([flows.txt], [dnl
4067 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
4069 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4070 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)'])
4071 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)'])
4073 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4074 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>
4075 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>
4080 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
4082 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4083 ADD_OF_PORTS([br0], [1], [2])
4084 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], [])
4085 AT_DATA([flows.txt], [dnl
4086 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
4088 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4089 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)'])
4090 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)'])
4092 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4093 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>
4094 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>
4099 AT_SETUP([ofproto-dpif megaflow - L4 classification])
4101 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4102 ADD_OF_PORTS([br0], [1], [2])
4103 AT_DATA([flows.txt], [dnl
4104 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
4106 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4107 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)'])
4109 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)'])
4111 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4112 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>
4117 AT_SETUP([ofproto-dpif megaflow - normal])
4119 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4120 ADD_OF_PORTS([br0], [1], [2])
4121 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4122 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)'])
4123 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)'])
4125 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4126 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>
4127 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>
4132 AT_SETUP([ofproto-dpif megaflow - mpls])
4134 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4135 ADD_OF_PORTS([br0], [1], [2])
4136 AT_DATA([flows.txt], [dnl
4137 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
4138 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
4140 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4141 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)'])
4142 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)'])
4144 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4145 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>
4146 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>
4151 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4153 # IP_VERSION_TYPE is used in AT_SETUP
4154 m4_define([CHECK_MEGAFLOW_NETFLOW],
4155 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4157 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4158 ADD_OF_PORTS([br0], [1], [2])
4160 dnl NetFlow configuration disables wildcarding relevant fields
4161 ON_EXIT([kill `cat test-netflow.pid`])
4162 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4163 AT_CAPTURE_FILE([netflow.log])
4164 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4166 set Bridge br0 netflow=@nf -- \
4167 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4168 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4170 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4171 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)'])
4172 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)'])
4174 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4175 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>
4176 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>
4181 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4182 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4184 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4186 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4187 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4188 set interface p2 type=dummy ofport_request=2 -- \
4189 set interface p3 type=dummy ofport_request=3])
4190 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4192 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4194 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
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,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>
4200 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>
4205 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4207 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4208 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4209 set interface p2 type=dummy ofport_request=2 -- \
4210 set interface p3 type=dummy ofport_request=3])
4211 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4213 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4215 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4216 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)'])
4217 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)'])
4219 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4220 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>
4221 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>
4226 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4227 # Create bond0 on br0 with interfaces p0 and p1
4228 # and bond1 on br1 with interfaces p2 and p3
4229 # with p0 patched to p2 and p1 patched to p3.
4231 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4232 other-config:lacp-time=fast \
4233 other-config:bond-rebalance-interval=0 -- \
4234 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4235 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4237 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4238 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4239 fail-mode=secure -- \
4240 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4241 other-config:lacp-time=fast \
4242 other-config:bond-rebalance-interval=0 -- \
4243 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4244 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4246 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4248 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4249 ADD_OF_PORTS([br0], [7])
4250 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4251 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4252 ovs-appctl time/stop
4253 ovs-appctl time/warp 5000
4254 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)'])
4255 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)'])
4257 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4258 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>
4259 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>
4264 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4266 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4267 ADD_OF_PORTS([br0], [1], [2])
4268 AT_DATA([flows.txt], [dnl
4269 table=0 in_port=1,ip actions=resubmit(90)
4270 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4272 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4273 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)'])
4274 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)'])
4276 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4277 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>
4278 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>
4283 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4285 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4286 ADD_OF_PORTS([br0], [1], [2])
4287 AT_DATA([flows.txt], [dnl
4288 table=0 in_port=1,ip actions=resubmit(,1)
4289 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4291 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4292 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)'])
4293 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=
4294 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4296 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4297 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>
4298 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>
4303 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4305 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4306 ADD_OF_PORTS([br0], [1], [2])
4307 AT_DATA([flows.txt], [dnl
4308 table=0 in_port=1,ip actions=goto_table(1)
4309 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4311 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4312 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)'])
4313 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)'])
4315 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4316 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>
4317 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>
4322 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4324 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4325 ADD_OF_PORTS([br0], [1], [2], [3])
4327 set Bridge br0 mirrors=@m --\
4328 --id=@p3 get Port p3 --\
4329 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4331 AT_DATA([flows.txt], [dnl
4332 in_port=1 actions=output:2
4334 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4335 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)'])
4337 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)'])
4339 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4340 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>
4345 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4347 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4348 ADD_OF_PORTS([br0], [1], [2], [3])
4350 set Bridge br0 mirrors=@m --\
4351 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4352 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4354 AT_DATA([flows.txt], [dnl
4355 in_port=1 actions=output:2
4357 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4358 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))'])
4359 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)'])
4361 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4362 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>
4363 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>
4368 AT_SETUP([ofproto-dpif megaflow - move action])
4370 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4371 ADD_OF_PORTS([br0], [1], [2])
4372 AT_DATA([flows.txt], [dnl
4373 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4374 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4375 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4377 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4378 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)'])
4379 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)'])
4381 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4382 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>
4383 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>
4388 AT_SETUP([ofproto-dpif megaflow - push action])
4390 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4391 ADD_OF_PORTS([br0], [1], [2])
4392 AT_DATA([flows.txt], [dnl
4393 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4395 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4396 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)'])
4397 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)'])
4399 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4400 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>
4401 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>
4406 AT_SETUP([ofproto-dpif megaflow - learning])
4408 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4409 ADD_OF_PORTS([br0], [1], [2])
4410 AT_DATA([flows.txt], [dnl
4411 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
4413 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4414 ovs-appctl time/stop
4415 # We send each packet twice because the first packet in each flow causes the
4416 # flow table to change and thus revalidations, which (depending on timing)
4417 # can keep a megaflow from being installed. The revalidations are done by
4418 # the second iteration, allowing the flows to be installed.
4420 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)'])
4421 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)'])
4422 ovs-appctl time/warp 100
4425 dnl The original flow is missing due to a revalidation.
4426 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4427 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>
4428 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>
4433 AT_SETUP([ofproto-dpif megaflow - tunnels])
4435 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4436 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4437 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4438 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4439 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4441 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4442 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4443 ofport_request=4 options:key=flow])
4444 AT_DATA([flows.txt], [dnl
4445 in_port=1,actions=output(2)
4446 in_port=3,actions=output(4)
4448 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4449 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4450 dnl will cause the packet to be dropped.
4451 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)'])
4453 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)'])
4454 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)'])
4456 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)'])
4458 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4459 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>
4460 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>
4461 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>
4466 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4468 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4469 ADD_OF_PORTS([br0], [1], [2])
4470 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], [])
4471 AT_DATA([flows.txt], [dnl
4472 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4474 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4475 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)'])
4476 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)'])
4478 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4479 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>
4480 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>
4485 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4487 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4488 ADD_OF_PORTS([br0], [1], [2])
4489 AT_DATA([flows.txt], [dnl
4490 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4492 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4493 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)'])
4494 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)'])
4496 dnl The megaflows do not match the same fields, since the first packet
4497 dnl is essentially a no-op. (The new destination MAC is the same as the
4498 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4499 dnl so that a packet that doesn't need its MAC address changed doesn't
4500 dnl hide one that does. Since the first entry doesn't need to change,
4501 dnl only the destination MAC address is matched (as decided by
4502 dnl ofproto-dpif). The second entry actually updates the destination
4503 dnl MAC, so both the source and destination MAC addresses are
4504 dnl un-wildcarded, since the ODP commit functions update both the source
4505 dnl and destination MAC addresses.
4506 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4507 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
4508 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
4513 AT_SETUP([ofproto-dpif megaflow - disabled])
4515 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4516 ADD_OF_PORTS([br0], [1], [2])
4517 AT_DATA([flows.txt], [dnl
4518 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4519 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4521 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4523 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4524 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4525 for i in 1 2 3 4; do
4526 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)'])
4527 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)'])
4528 if [[ $i -eq 1 ]]; then
4533 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4534 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
4535 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
4537 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
4538 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
4539 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
4544 AT_SETUP([ofproto-dpif - datapath port number change])
4545 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4546 ADD_OF_PORTS([br0], 1)
4548 # Trace a flow that should output to p1.
4549 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4551 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4554 # Change p1's port number to 5.
4555 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4557 # Trace a flow that should output to p1 in its new location.
4558 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4560 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4565 # Tests the bundling with various bfd and cfm configurations.
4566 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4567 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4568 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4569 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4570 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4571 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4572 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4573 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4574 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4575 set Interface p0 cfm_mpid=1 -- \
4576 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4578 ovs-appctl time/stop
4579 # advance the clock to stablize everything.
4580 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4581 # cfm/show should show 'recv' fault.
4582 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4585 # bfd/show should show 'up'.
4586 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4587 Local Session State: up
4588 Remote Session State: up
4589 Local Session State: up
4590 Remote Session State: up
4592 # bond/show should show 'may-enable: true' for all slaves.
4593 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4600 # now disable the bfd on p1.
4601 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4602 # advance the clock to stablize everything.
4603 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4604 # cfm/show should show 'recv' fault.
4605 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4608 # bfd/show should show 'down'.
4609 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4610 Local Session State: down
4611 Remote Session State: down
4613 # bond/show should show 'may-enable: false' for p0.
4614 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4619 # now enable the bfd on p1 and disable bfd on p0.
4620 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4621 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4622 # advance the clock to stablize everything.
4623 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4624 # cfm/show should show 'recv' fault.
4625 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4628 # bfd/show should show 'down'.
4629 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4630 Local Session State: down
4631 Remote Session State: down
4633 # bond/show should show 'may-enable: false' for p0 and p1.
4634 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4644 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4645 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4648 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4650 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4651 # disable bfd on p0.
4652 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4654 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4655 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4658 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4660 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4661 # disable cfm on p0.
4662 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4664 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4665 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4667 # enable both bfd and cfm on p0.
4668 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4670 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4671 # disable bfd on p0.
4672 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4673 # check log, there should not be the log of thread terminated.
4674 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4676 # reenable bfd on p0.
4677 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4678 # check log, should still be on log of thread created.
4679 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4680 monitor thread created
4682 # disable bfd and cfm together.
4683 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4685 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4690 # this test helps avoid the deadlock between the main thread and monitor thread.
4691 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4694 for i in `seq 1 199`
4696 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])
4702 AT_BANNER([ofproto-dpif - flow translation resource limits])
4704 AT_SETUP([ofproto-dpif - infinite resubmit])
4706 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4707 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4709 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4711 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4714 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4717 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4719 ADD_OF_PORTS([br0], 1)
4720 (for i in `seq 1 64`; do
4722 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4724 echo "in_port=65, actions=local") > flows
4725 AT_CHECK([ovs-ofctl add-flows br0 flows])
4726 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4727 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4729 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4732 AT_SETUP([ofproto-dpif - too many output actions])
4734 ADD_OF_PORTS([br0], 1)
4735 (for i in `seq 1 12`; do
4737 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4739 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4740 AT_CHECK([ovs-ofctl add-flows br0 flows])
4741 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4742 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4745 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4747 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4750 AT_SETUP([ofproto-dpif - stack too deep])
4752 ADD_OF_PORTS([br0], 1)
4753 (for i in `seq 1 12`; do
4755 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4757 push="push:NXM_NX_REG0[[]]"
4758 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4759 AT_CHECK([ovs-ofctl add-flows br0 flows])
4760 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4761 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4763 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
4766 AT_SETUP([ofproto-dpif - ICMPv6])
4768 ADD_OF_PORTS([br0], 1)
4770 AT_CAPTURE_FILE([ofctl_monitor.log])
4772 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4774 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
4776 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4778 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4779 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
4780 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
4786 # Tests the exact match of CFI bit in installed datapath flows matching VLAN.
4787 AT_SETUP([ofproto-dpif - vlan matching])
4789 [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
4790 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
4792 AT_CHECK([ovs-ofctl del-flows br0])
4793 AT_CHECK([ovs-ofctl add-flow br0 "vlan_tci=0x000a/0x0fff,action=output:local"])
4795 AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=10,pcp=0),encap(eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0))'])
4797 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port(1)' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4798 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=10/0xfff,pcp=0/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>