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], [[
16 s/.*put\[create\]\[modify\] //
18 m4_define([FILTER_FLOW_DUMP], [[
19 grep 'flow_dump ' | sed '
21 s/used:[0-9]*\.[0-9]*/used:0.0/
24 AT_SETUP([ofproto-dpif - dummy interface])
25 # Create br0 with interfaces p1 and p7
26 # and br1 with interfaces p2 and p8
27 # with p1 and p2 connected via unix domain socket
29 [add-port br0 p1 -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
30 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
32 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
33 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
35 add-port br1 p2 -- set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
36 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
37 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
39 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
40 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
42 ovs-appctl time/warp 5000
43 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
44 AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
45 ovs-appctl time/warp 100
46 sleep 1 # wait for forwarders process packets
48 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
49 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
50 skb_priority(0),skb_mark(0/0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
51 skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
52 skb_priority(0),skb_mark(0/0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
57 AT_SETUP([ofproto-dpif, active-backup bonding])
58 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
59 # and br1 with interfaces p3, p4 and p8.
60 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
62 [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
63 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
64 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
65 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
67 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
68 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
70 add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
71 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
72 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
73 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
75 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
76 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
77 ovs-appctl netdev-dummy/set-admin-state up
78 ovs-appctl time/warp 100
79 ovs-appctl netdev-dummy/set-admin-state p2 down
81 ovs-appctl time/warp 100
82 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
83 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
84 ovs-appctl time/warp 100
85 ovs-appctl netdev-dummy/set-admin-state p2 up
86 ovs-appctl netdev-dummy/set-admin-state p1 down
87 ovs-appctl time/warp 100
88 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
89 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
90 ovs-appctl time/warp 100
91 ovs-appctl time/warp 100
93 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port([[348]])' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
94 skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
95 skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
96 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
97 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
98 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:09/00:00:00:00:00:00,tha=50:54:00:00:00:09/00:00:00:00:00:00), actions: <del>
99 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:0b/00:00:00:00:00:00,tha=50:54:00:00:00:0b/00:00:00:00:00:00), actions: <del>
104 AT_SETUP([ofproto-dpif, balance-slb bonding])
105 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
106 # and br1 with interfaces p4, p5, p6 and p8.
107 # p1 <-> p4, p2 <-> p5, p3 <-> p6
108 # Send some traffic, make sure the traffic are spread based on source mac.
110 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
111 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
112 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
113 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
114 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
116 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
117 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
118 fail-mode=secure -- \
119 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
120 add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
121 add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
122 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
124 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
125 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
126 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
128 ovs-appctl netdev-dummy/set-admin-state up
130 ovs-appctl time/warp 100
132 for i in `seq 0 100 |xargs printf '%02x\n'`;
134 pkt="in_port(7),eth(src=50:54:00:00:00:$i,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)"
135 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
138 ovs-appctl time/warp 100
139 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
140 # Make sure there is resonable distribution to all three ports.
141 # We don't want to make this check precise, in case hash function changes.
142 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
143 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
144 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
148 AT_SETUP([ofproto-dpif, balance-tcp bonding])
149 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
150 # and br1 with interfaces bond1(p4, p5, p6) and p8.
152 # Send some traffic, make sure the traffic are spread based on L4 headers.
154 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
155 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
156 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
157 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
158 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
159 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
161 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
162 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
163 fail-mode=secure -- \
164 add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
165 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
166 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
167 set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
168 set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
169 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
170 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
172 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
173 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
174 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
178 ovs-appctl time/warp 100
179 ovs-appctl lacp/show > lacp.txt
180 ovs-appctl bond/show > bond.txt
182 for i in `seq 0 255` ;
184 pkt="in_port(7),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=$i),tcp_flags(0x010)"
185 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
188 ovs-appctl time/warp 100
189 ovs-appctl time/warp 100
190 ovs-appctl time/warp 100
191 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
192 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
193 # Make sure there is resonable distribution to all three ports.
194 # We don't want to make this check precise, in case hash function changes.
195 AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 24])
196 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24])
197 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24])
201 AT_SETUP([ofproto-dpif - resubmit])
203 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
204 [16], [17], [18], [19], [20], [21])
205 AT_DATA([flows.txt], [dnl
206 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
207 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
208 table=0 in_port=3 priority=2000 icmp actions=output(20)
209 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
210 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
211 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
213 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
214 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])
215 AT_CHECK([tail -1 stdout], [0],
216 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
221 AT_SETUP([ofproto-dpif - goto table])
223 ADD_OF_PORTS([br0], [1], [10], [11])
224 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
225 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
226 echo "table=64 actions=output(11)" >> flows.txt
227 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
228 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])
229 AT_CHECK([tail -1 stdout], [0],
230 [Datapath actions: 10,11
235 AT_SETUP([ofproto-dpif - write actions])
237 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
238 AT_DATA([flows.txt], [dnl
239 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
240 table=1 ip actions=write_actions(output(13)),goto_table(2)
241 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
243 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
244 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])
245 AT_CHECK([tail -2 stdout], [0],
246 [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
247 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
252 AT_SETUP([ofproto-dpif - clear actions])
254 ADD_OF_PORTS([br0], [1], [10], [11], [12])
255 AT_DATA([flows.txt], [dnl
256 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
257 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
259 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
260 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])
261 AT_CHECK([tail -2 stdout], [0],
262 [Megaflow: recirc_id=0,skb_priority=0,tcp,in_port=1,nw_frag=no,tp_src=8,tp_dst=9
263 Datapath actions: 10,set(tcp(src=91,dst=9)),11
268 AT_SETUP([ofproto-dpif - group chaining not supported])
270 ADD_OF_PORTS([br0], [1], [10], [11])
271 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'],
273 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
274 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
279 AT_SETUP([ofproto-dpif - all group in action list])
281 ADD_OF_PORTS([br0], [1], [10], [11])
282 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'])
283 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
284 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])
285 AT_CHECK([tail -2 stdout], [0],
286 [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
287 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
292 AT_SETUP([ofproto-dpif - indirect group in action list])
294 ADD_OF_PORTS([br0], [1], [10])
295 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
296 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
297 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])
298 AT_CHECK([tail -1 stdout], [0],
299 [Datapath actions: 10
304 AT_SETUP([ofproto-dpif - all group in action set])
306 ADD_OF_PORTS([br0], [1], [10], [11])
307 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'])
308 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
309 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])
310 AT_CHECK([tail -2 stdout], [0],
311 [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
312 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
317 AT_SETUP([ofproto-dpif - indirect group in action set])
319 ADD_OF_PORTS([br0], [1], [10])
320 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
321 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
322 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])
323 AT_CHECK([tail -1 stdout], [0],
324 [Datapath actions: 10
329 AT_SETUP([ofproto-dpif - select group])
331 ADD_OF_PORTS([br0], [1], [10], [11])
332 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
333 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
335 # Try a bunch of different flows and make sure that they get distributed
337 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
338 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])
339 tail -1 stdout >> results
341 sort results | uniq -c
342 AT_CHECK([sort results | uniq], [0],
343 [Datapath actions: 10
349 AT_SETUP([ofproto-dpif - select group with watch port])
351 ADD_OF_PORTS([br0], [1], [10], [11])
352 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
353 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
354 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])
355 AT_CHECK([tail -1 stdout], [0],
356 [Datapath actions: 11
361 AT_SETUP([ofproto-dpif - select group with weight])
363 ADD_OF_PORTS([br0], [1], [10], [11], [12])
364 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'])
365 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
366 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])
367 AT_CHECK([tail -1 stdout], [0],
368 [Datapath actions: 11
373 AT_SETUP([ofproto-dpif - fast failover group])
375 ADD_OF_PORTS([br0], [1], [10], [11])
376 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'])
377 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
378 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])
379 AT_CHECK([tail -1 stdout], [0],
380 [Datapath actions: drop
385 AT_SETUP([ofproto-dpif - registers])
387 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
388 AT_DATA([flows.txt], [dnl
389 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
390 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
391 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
392 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
394 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
395 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
396 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
397 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
398 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
399 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
400 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
401 in_port=9,reg0=0xdeadbeef actions=output:20
402 in_port=10,reg1=0xdeadbeef actions=output:21
403 in_port=11,reg2=0xeef22dea actions=output:22
405 dnl Sanilty check all registers
406 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
407 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
408 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
409 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
412 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
413 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])
414 AT_CHECK([tail -1 stdout], [0],
415 [Datapath actions: 20,21,22,33
420 AT_SETUP([ofproto-dpif - push-pop])
422 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
423 AT_DATA([flows.txt], [dnl
424 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
425 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
426 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
427 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
428 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
431 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
432 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])
433 AT_CHECK([tail -1 stdout], [0],
434 [Datapath actions: 33,22,21,20
439 AT_SETUP([ofproto-dpif - output])
441 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
442 AT_DATA([flows.txt], [dnl
443 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
444 in_port=2 actions=output:9
445 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
446 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
447 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
448 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
449 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
450 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
452 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
453 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])
454 AT_CHECK([tail -1 stdout], [0],
455 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
460 AT_SETUP([ofproto-dpif - dec_ttl])
462 ADD_OF_PORTS([br0], [1], [2], [3], [4])
463 AT_DATA([flows.txt], [dnl
464 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
465 table=1 in_port=1 action=dec_ttl,output:3
467 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
468 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])
469 AT_CHECK([tail -4 stdout], [0],
470 [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
471 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
472 This flow is handled by the userspace slow path because it:
473 - Sends "packet-in" messages to the OpenFlow controller.
475 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])
476 AT_CHECK([tail -2 stdout], [0],
477 [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
478 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
480 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])
481 AT_CHECK([tail -2 stdout], [0],
482 [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
483 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
486 AT_CAPTURE_FILE([ofctl_monitor.log])
487 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
488 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])
489 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
490 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
491 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
492 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
497 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
498 dnl buffer to be resized just before pushing the id of the dec_ttl action.
499 dnl Thus the implementation must account for this by using the
500 dnl reallocated buffer rather than the original buffer.
502 dnl A number of similar rules are added to try and exercise
503 dnl xrealloc sufficiently that it returns a different base pointer
504 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
506 ADD_OF_PORTS([br0], [1])
507 (for i in `seq 0 255`; do
508 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
510 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
514 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
515 dnl buffer to be resized just before pushing the id of the dec_ttl action.
516 dnl Thus the implementation must account for this by using the
517 dnl reallocated buffer rather than the original buffer.
519 dnl A number of similar rules are added to try and exercise
520 dnl xrealloc sufficiently that it returns a different base pointer
521 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
523 ADD_OF_PORTS([br0], [1])
524 (for i in `seq 0 255`; do
525 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
527 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
531 dnl A note action at offset 24 in ofpacts will cause the ofpacts
532 dnl buffer to be resized just before pushing the id of the dec_ttl action.
533 dnl Thus the implementation must account for this by using the
534 dnl reallocated buffer rather than the original buffer.
536 dnl A number of similar rules are added to try and exercise
537 dnl xrealloc sufficiently that it returns a different base pointer
538 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
540 ADD_OF_PORTS([br0], [1])
541 (for i in `seq 0 255`; do
542 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
544 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
548 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
550 ADD_OF_PORTS([br0], [1], [2])
552 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
554 # "in_port" defaults to OFPP_NONE if it's not specified.
555 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"
556 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
557 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
566 AT_SETUP([ofproto-dpif - DSCP])
567 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
568 ADD_OF_PORTS([br0], [9])
569 AT_DATA([flows.txt], [dnl
570 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
572 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
573 AT_CHECK([ovs-vsctl -- \
574 set Port p1 qos=@newqos --\
575 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
576 --id=@q1 create Queue dscp=1 --\
577 --id=@q2 create Queue dscp=2], [0], [ignore])
578 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])
579 AT_CHECK([tail -2 stdout], [0],
580 [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
581 Datapath actions: dnl
583 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
584 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
586 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
587 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
588 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
594 AT_SETUP([ofproto-dpif - output/flood flags])
596 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
598 AT_DATA([flows.txt], [dnl
599 in_port=local actions=local,flood
600 in_port=1 actions=flood
601 in_port=2 actions=all
602 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
603 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
605 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
606 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
607 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
609 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])
610 AT_CHECK([tail -1 stdout \
611 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
619 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])
620 AT_CHECK([tail -1 stdout \
621 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
629 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])
630 AT_CHECK([tail -1 stdout \
631 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
640 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])
641 AT_CHECK([tail -1 stdout], [0],
642 [Datapath actions: 100,1,2,4,6,7
645 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])
646 AT_CHECK([tail -1 stdout], [0],
647 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
652 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
653 OVS_VSWITCHD_START([dnl
654 add-port br0 p1 -- set Interface p1 type=dummy
656 ON_EXIT([kill `cat ovs-ofctl.pid`])
658 AT_CAPTURE_FILE([ofctl_monitor.log])
660 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
663 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)'
665 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
666 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
667 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
668 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
669 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
671 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
672 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
674 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
675 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
678 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
679 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
686 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
687 OVS_VSWITCHD_START([dnl
688 add-port br0 p1 -- set Interface p1 type=dummy
690 ON_EXIT([kill `cat ovs-ofctl.pid`])
692 AT_CAPTURE_FILE([ofctl_monitor.log])
693 AT_CHECK([ovs-ofctl del-flows br0])
695 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
697 dnl Test that missed packets are droped
699 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)'
701 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
703 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
706 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
707 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
708 OFPST_FLOW reply (OF1.3):
714 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
715 OVS_VSWITCHD_START([dnl
716 add-port br0 p1 -- set Interface p1 type=dummy
718 ON_EXIT([kill `cat ovs-ofctl.pid`])
720 AT_CAPTURE_FILE([ofctl_monitor.log])
721 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
723 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
726 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)'
728 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
729 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
730 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
731 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
732 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
734 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
735 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
737 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
738 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
741 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
742 sleep 1 # wait for revalidator to update stats
743 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
744 n_packets=3, n_bytes=180, actions=goto_table:1
745 OFPST_FLOW reply (OF1.2):
751 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
752 OVS_VSWITCHD_START([dnl
753 add-port br0 p1 -- set Interface p1 type=dummy
755 ON_EXIT([kill `cat ovs-ofctl.pid`])
757 AT_CAPTURE_FILE([ofctl_monitor.log])
758 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
760 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
763 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)'
766 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
767 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
770 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
771 sleep 1 # wait for revalidator to update stats
772 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
773 n_packets=3, n_bytes=180, actions=resubmit(1,1)
774 OFPST_FLOW reply (OF1.2):
780 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
781 OVS_VSWITCHD_START([dnl
782 add-port br0 p1 -- set Interface p1 type=dummy
784 ON_EXIT([kill `cat ovs-ofctl.pid`])
786 AT_CAPTURE_FILE([ofctl_monitor.log])
787 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
788 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
790 dnl Miss table 0, Hit table 1
791 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
794 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)'
796 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
797 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
799 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
800 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
801 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
803 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
804 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
806 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
807 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
810 dnl Hit table 0, Miss all other tables, sent to controller
811 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
814 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)'
816 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
817 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
819 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
820 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
821 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
823 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
824 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
826 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
827 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
830 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
831 sleep 1 # wait for revalidator to update stats
832 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
833 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
834 OFPST_FLOW reply (OF1.2):
840 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
841 OVS_VSWITCHD_START([dnl
842 add-port br0 p1 -- set Interface p1 type=dummy
844 ON_EXIT([kill `cat ovs-ofctl.pid`])
846 AT_CAPTURE_FILE([ofctl_monitor.log])
847 AT_DATA([flows.txt], [dnl
848 table=0 actions=goto_table(1)
849 table=2 dl_src=10:11:11:11:11:11 actions=controller
851 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
852 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
854 dnl Hit table 0, Miss table 1, Hit table 2
855 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
858 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)'
860 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
861 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
863 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
864 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
865 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
867 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
868 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
870 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
871 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
874 dnl Hit table 1, Miss all other tables, sent to controller
875 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
878 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)'
880 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
881 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
883 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
884 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
885 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
887 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
888 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
890 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
891 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
894 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
895 sleep 1 # wait for revalidator to update stats
896 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
897 n_packets=6, n_bytes=360, actions=goto_table:1
898 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
899 OFPST_FLOW reply (OF1.2):
905 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
906 OVS_VSWITCHD_START([dnl
907 add-port br0 p1 -- set Interface p1 type=dummy
909 ON_EXIT([kill `cat ovs-ofctl.pid`])
911 AT_CAPTURE_FILE([ofctl_monitor.log])
912 AT_DATA([flows.txt], [dnl
913 table=0 actions=resubmit(1,1)
914 table=2 dl_src=10:11:11:11:11:11 actions=controller
916 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
917 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
919 dnl Hit table 0, Miss table 1, Dropped
920 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
923 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)'
925 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
927 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
930 dnl Hit table 1, Dropped
931 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
934 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)'
936 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
938 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
941 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
942 sleep 1 # wait for revalidator to update stats
943 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
944 n_packets=6, n_bytes=360, actions=resubmit(1,1)
945 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
946 OFPST_FLOW reply (OF1.2):
952 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
953 OVS_VSWITCHD_START([dnl
954 add-port br0 p1 -- set Interface p1 type=dummy
956 ON_EXIT([kill `cat ovs-ofctl.pid`])
958 AT_CAPTURE_FILE([ofctl_monitor.log])
959 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
961 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
963 dnl Test that missed packets are droped
965 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)'
967 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
969 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
972 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
973 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
980 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
981 OVS_VSWITCHD_START([dnl
982 add-port br0 p1 -- set Interface p1 type=dummy
984 ON_EXIT([kill `cat ovs-ofctl.pid`])
986 AT_CAPTURE_FILE([ofctl_monitor.log])
987 AT_CHECK([ovs-ofctl del-flows br0])
988 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
989 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
991 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
993 dnl Test that missed packets are droped
995 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)'
997 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
999 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1002 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1003 sleep 1 # wait for revalidator to update stats
1004 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1005 n_packets=3, n_bytes=180, actions=goto_table:1
1006 OFPST_FLOW reply (OF1.2):
1012 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1013 OVS_VSWITCHD_START([dnl
1014 add-port br0 p1 -- set Interface p1 type=dummy
1016 ON_EXIT([kill `cat ovs-ofctl.pid`])
1018 AT_CAPTURE_FILE([ofctl_monitor.log])
1019 AT_CHECK([ovs-ofctl del-flows br0])
1020 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1021 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1023 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1025 dnl Test that missed packets are droped
1027 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)'
1029 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1031 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1034 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1035 sleep 1 # wait for revalidator to update stats
1036 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1037 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1038 OFPST_FLOW reply (OF1.2):
1044 AT_SETUP([ofproto-dpif - controller])
1045 OVS_VSWITCHD_START([dnl
1046 add-port br0 p1 -- set Interface p1 type=dummy
1048 ON_EXIT([kill `cat ovs-ofctl.pid`])
1050 AT_CAPTURE_FILE([ofctl_monitor.log])
1051 AT_DATA([flows.txt], [dnl
1052 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1053 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1054 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1056 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1057 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)
1058 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)
1059 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1060 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)
1061 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1062 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1063 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1064 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
1066 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1069 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1072 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)'
1074 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1075 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1077 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1078 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1079 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
1081 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1082 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
1084 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1085 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
1088 dnl Singleton controller action.
1089 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1092 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)'
1094 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1095 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1097 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1098 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1099 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
1101 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1102 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
1104 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1105 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
1108 dnl Modified controller action.
1109 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1112 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)'
1114 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1115 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1117 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1118 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1119 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
1121 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1122 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
1124 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1125 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
1128 dnl Modified VLAN controller action.
1129 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1132 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)'
1134 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1135 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1137 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1138 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1139 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
1141 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1142 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
1144 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1145 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
1149 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1152 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)'
1154 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1155 ovs-appctl -t ovs-ofctl exit
1157 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1158 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1159 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
1161 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1162 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
1164 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)
1165 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
1167 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)
1168 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
1170 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)
1171 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
1173 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)
1174 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
1176 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)
1177 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
1179 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)
1180 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
1182 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)
1183 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
1187 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1190 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'
1192 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1193 ovs-appctl -t ovs-ofctl exit
1195 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1196 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1197 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
1199 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1200 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
1202 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)
1203 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
1205 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)
1206 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
1208 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)
1209 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
1211 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)
1212 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
1214 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)
1215 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
1217 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)
1218 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
1220 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)
1221 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
1224 dnl Modified ARP controller action.
1225 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1228 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)'
1231 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1232 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1233 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1234 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
1235 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1236 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
1237 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1238 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
1239 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1240 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
1241 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1242 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
1243 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1244 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
1245 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1246 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
1247 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1248 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
1249 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1250 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
1253 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1256 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1259 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'
1262 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1263 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1264 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1265 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1266 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
1268 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1269 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
1271 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)
1272 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
1274 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)
1275 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
1277 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)
1278 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
1280 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)
1281 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
1283 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)
1284 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
1286 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)
1287 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
1289 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)
1290 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
1293 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1294 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1295 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1296 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)
1297 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)
1298 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)
1299 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)
1300 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)
1301 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1302 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1303 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
1304 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
1305 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1312 AT_SETUP([ofproto-dpif - MPLS handling])
1313 OVS_VSWITCHD_START([dnl
1314 add-port br0 p1 -- set Interface p1 type=dummy
1316 ON_EXIT([kill `cat ovs-ofctl.pid`])
1318 AT_CAPTURE_FILE([ofctl_monitor.log])
1319 AT_DATA([flows.txt], [dnl
1320 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
1321 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
1322 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
1323 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
1324 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
1325 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
1326 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
1327 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
1328 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1329 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1330 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
1332 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1334 dnl Modified MPLS controller action.
1335 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1338 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)'
1340 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1341 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1343 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1344 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1345 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
1347 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1348 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
1350 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1351 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
1354 dnl Modified MPLS controller action.
1355 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1358 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)'
1360 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1361 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1363 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1364 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1365 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
1367 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1368 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
1370 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1371 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
1374 dnl Modified MPLS controller action.
1375 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1377 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)
1380 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)'
1382 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1383 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1385 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1386 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1387 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
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:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
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:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1396 dnl Modified MPLS controller action.
1397 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1400 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))'
1402 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1403 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1405 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1406 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1407 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
1409 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1410 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
1412 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1413 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
1416 dnl Modified MPLS controller action.
1417 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1420 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)'
1422 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1423 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1425 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1426 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1427 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
1429 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1430 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
1432 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1433 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
1436 dnl Modified MPLS controller action.
1437 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1440 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)'
1442 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1443 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1445 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1446 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1447 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
1449 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1450 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
1452 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1453 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
1456 dnl Modified MPLS controller action.
1457 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1460 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)'
1462 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1463 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1465 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1466 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1467 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
1469 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1470 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
1472 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1473 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
1476 dnl Modified MPLS controller action.
1477 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1480 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)'
1482 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1483 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1485 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1486 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1487 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
1489 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1490 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
1492 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1493 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
1496 dnl Modified MPLS actions.
1497 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1500 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)'
1502 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1503 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1505 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1506 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1507 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
1509 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1510 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
1512 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1513 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
1516 dnl Modified MPLS ipv6 controller action.
1517 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1520 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)'
1522 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1523 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1525 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1526 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1527 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
1529 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1530 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
1532 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1533 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
1537 dnl Modified MPLS pop action.
1538 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1539 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)
1540 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1542 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1545 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'
1548 # 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)'
1550 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1551 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1553 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1554 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1555 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
1557 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1558 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
1560 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1561 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
1564 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1566 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1567 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
1568 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
1569 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
1570 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
1571 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
1572 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
1573 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
1574 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
1575 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
1576 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
1577 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1585 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1586 OVS_VSWITCHD_START([dnl
1587 add-port br0 p1 -- set Interface p1 type=dummy
1589 ON_EXIT([kill `cat ovs-ofctl.pid`])
1591 AT_CAPTURE_FILE([ofctl_monitor.log])
1592 # A table-miss flow has priority 0 and no match
1593 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1595 dnl Singleton controller action.
1596 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1599 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)'
1601 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1602 ovs-appctl -t ovs-ofctl exit
1604 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1605 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1606 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
1608 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1609 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
1611 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1612 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
1615 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1617 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1618 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1626 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1627 OVS_VSWITCHD_START([dnl
1628 add-port br0 p1 -- set Interface p1 type=dummy
1630 ON_EXIT([kill `cat ovs-ofctl.pid`])
1632 AT_CAPTURE_FILE([ofctl_monitor.log])
1633 # A table-miss flow has priority 0 and no match
1634 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1636 dnl Singleton controller action.
1637 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1640 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)'
1642 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1643 ovs-appctl -t ovs-ofctl exit
1645 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1647 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1648 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1649 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
1651 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1652 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
1654 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1655 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1658 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1660 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1661 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1662 OFPST_FLOW reply (OF1.3):
1668 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1670 ADD_OF_PORTS([br0], [1], [2])
1672 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1673 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'
1675 # Input some packets that should follow the arp modification slow-path.
1677 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)'
1679 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1681 # Check the packets that were output.
1682 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1683 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
1684 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
1685 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
1686 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
1687 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
1688 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
1689 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
1690 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
1691 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
1697 AT_SETUP([ofproto-dpif - VLAN handling])
1699 [set Bridge br0 fail-mode=standalone -- \
1700 add-port br0 p1 trunks=10,12 -- \
1701 add-port br0 p2 tag=10 -- \
1702 add-port br0 p3 tag=12 \
1703 other-config:priority-tags=true -- \
1704 add-port br0 p4 tag=12 -- \
1705 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1706 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1707 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1708 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1709 other-config:priority-tags=true -- \
1710 set Interface p1 type=dummy -- \
1711 set Interface p2 type=dummy -- \
1712 set Interface p3 type=dummy -- \
1713 set Interface p4 type=dummy -- \
1714 set Interface p5 type=dummy -- \
1715 set Interface p6 type=dummy -- \
1716 set Interface p7 type=dummy -- \
1717 set Interface p8 type=dummy --])
1719 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1720 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1726 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1727 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1730 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1731 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1735 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1736 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1739 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1740 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1741 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1742 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1743 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1750 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1751 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1752 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1759 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1760 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1761 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1768 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1769 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1770 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1771 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1772 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1775 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1776 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1777 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1778 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1779 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1780 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1781 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1784 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1785 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1786 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1787 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1788 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1789 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1790 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1793 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1794 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1795 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1796 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1797 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1798 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1799 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1802 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1803 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1811 if test $vlan = none; then
1812 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1814 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))"
1817 echo "----------------------------------------------------------------------"
1818 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1820 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1821 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1823 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1825 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1831 AT_SETUP([ofproto-dpif - MPLS handling])
1832 OVS_VSWITCHD_START([dnl
1833 add-port br0 p1 -- set Interface p1 type=dummy
1835 ON_EXIT([kill `cat ovs-ofctl.pid`])
1837 AT_CAPTURE_FILE([ofctl_monitor.log])
1838 AT_DATA([flows.txt], [dnl
1839 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1840 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1841 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1843 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1845 dnl In this test, we push an MPLS tag to an ethernet packet.
1846 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1849 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)'
1851 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1852 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1854 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1855 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1856 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
1857 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1858 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1859 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1860 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1862 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1863 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
1864 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1865 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1866 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1867 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1869 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1870 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
1871 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1872 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1873 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1874 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1877 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1878 dnl copied exactly, except for the BOS bit.
1879 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1882 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)'
1884 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1885 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1887 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1888 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1889 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
1890 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1891 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1892 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1893 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1895 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1896 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
1897 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1898 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1899 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1900 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1902 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1903 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1904 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1905 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1906 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1907 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1910 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1911 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1912 dnl to the MPLS ethertype of the MPLS push action which differs to that
1913 dnl of the input packet.
1914 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1917 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)'
1919 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1920 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1922 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1923 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1924 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
1925 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1926 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1927 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1928 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1930 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1931 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
1932 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1933 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1934 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1935 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1937 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1938 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
1939 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1940 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1941 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1942 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1948 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1949 OVS_VSWITCHD_START([dnl
1950 add-port br0 p1 -- set Interface p1 type=dummy
1952 ON_EXIT([kill `cat ovs-ofctl.pid`])
1954 AT_CAPTURE_FILE([ofctl_monitor.log])
1955 AT_DATA([flows.txt], [dnl
1956 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
1957 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
1958 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
1959 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
1960 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
1961 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
1962 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
1963 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
1964 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
1965 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
1967 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1969 dnl Modified MPLS controller action.
1970 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1971 dnl both of these in the final flow
1972 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1975 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)'
1977 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1978 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1980 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1981 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1982 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
1983 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1984 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1985 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1986 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1987 00000040 00 00 00 00
1989 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1990 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
1991 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1992 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1993 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1994 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1995 00000040 00 00 00 00
1997 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1998 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
1999 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2000 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2001 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2002 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2003 00000040 00 00 00 00
2006 dnl Modified MPLS controller action.
2007 dnl In this test, the input packet in vlan-tagged, which should be stripped
2008 dnl before we push the MPLS and VLAN tags.
2009 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2012 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))'
2014 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2015 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2017 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2018 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2019 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
2020 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2021 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2022 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2023 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2025 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2026 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
2027 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2028 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2029 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2030 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2032 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2033 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
2034 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2035 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2036 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2037 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2040 dnl Modified MPLS controller action.
2041 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2042 dnl both of these in the final flow
2043 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2046 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)'
2048 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2049 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2051 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2052 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2053 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
2054 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2055 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2056 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2057 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2058 00000040 00 00 00 00
2060 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2061 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
2062 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2063 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2064 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2065 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2066 00000040 00 00 00 00
2068 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2069 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
2070 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2071 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2072 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2073 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2074 00000040 00 00 00 00
2077 dnl Modified MPLS controller action.
2078 dnl In this test, the input packet in vlan-tagged, which should be stripped
2079 dnl before we push the MPLS and VLAN tags.
2080 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2083 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))'
2085 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2086 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2088 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2089 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2090 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
2091 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2092 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2093 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2094 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2096 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2097 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
2098 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2099 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2100 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2101 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2103 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2104 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
2105 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2106 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2107 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2108 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2111 dnl Modified MPLS controller action.
2112 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2113 dnl actions are reordered, so we see both of these in the final flow.
2114 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2117 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)'
2119 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2120 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2122 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2123 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2124 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
2125 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2126 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2127 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2128 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2129 00000040 00 00 00 00
2131 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2132 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
2133 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2134 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2135 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2136 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2137 00000040 00 00 00 00
2139 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2140 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
2141 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2142 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2143 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2144 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2145 00000040 00 00 00 00
2148 dnl Modified MPLS controller action.
2149 dnl In this test, the input packet in vlan-tagged, which should be stripped
2150 dnl before we push the MPLS and VLAN tags.
2151 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2154 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))'
2156 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2157 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2159 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2160 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2161 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
2162 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2163 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2164 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2165 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2167 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2168 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
2169 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2170 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2171 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2172 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2174 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2175 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
2176 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2177 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2178 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2179 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2182 dnl Modified MPLS controller action.
2183 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2184 dnl actions are reordered, so we see both of these in the final flow.
2185 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2188 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)'
2190 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2191 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2193 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2194 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2195 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
2196 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2197 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2198 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2199 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2200 00000040 00 00 00 00
2202 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2203 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
2204 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2205 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2206 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2207 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2208 00000040 00 00 00 00
2210 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2211 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
2212 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2213 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2214 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2215 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2216 00000040 00 00 00 00
2219 dnl Modified MPLS controller action.
2220 dnl In this test, the input packet in vlan-tagged, which should be stripped
2221 dnl before we push the MPLS and VLAN tags.
2222 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2225 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))'
2227 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2228 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2230 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2231 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2232 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
2233 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2234 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2235 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2236 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2238 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2239 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
2240 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2241 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2242 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2243 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2245 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2246 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
2247 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2248 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2249 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2250 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2253 dnl Modified MPLS controller action.
2254 dnl In this test, the input packet in vlan-tagged, which should be stripped
2255 dnl before we push the MPLS and VLAN tags.
2256 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2259 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))'
2261 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2262 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2264 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2265 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2266 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
2267 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2268 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2269 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2270 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2272 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2273 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
2274 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2275 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2276 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2277 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2279 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2280 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
2281 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2282 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2283 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2284 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2287 dnl Modified MPLS controller action.
2288 dnl In this test, the input packet in vlan-tagged, which should be modified
2289 dnl before we push MPLS and VLAN tags.
2290 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2293 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))'
2295 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2296 ovs-appctl -t ovs-ofctl exit
2298 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2299 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2300 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
2301 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2302 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2303 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2304 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2306 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2307 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
2308 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2309 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2310 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2311 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2313 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2314 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
2315 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2316 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2317 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2318 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2321 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2322 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2323 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
2324 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
2325 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
2326 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
2327 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
2328 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
2329 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
2330 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
2331 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
2332 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
2333 OFPST_FLOW reply (OF1.2):
2339 AT_SETUP([ofproto-dpif - fragment handling])
2341 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2342 AT_DATA([flows.txt], [dnl
2343 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2344 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2345 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2346 priority=50 tcp ip_frag=no actions=output:4
2347 priority=50 tcp ip_frag=first actions=output:5
2348 priority=50 tcp ip_frag=later actions=output:6
2350 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2352 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"
2353 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2354 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2355 later_flow="$base_flow,frag=later)"
2357 # mode no first later
2360 'drop 1 drop drop' \
2369 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2370 for type in no first later; do
2371 eval flow=\$${type}_flow exp_output=\$$type
2372 printf "\n%s\n" "----$mode $type-----"
2373 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2375 if test $mode = drop && test $type != no; then
2376 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2378 echo "Datapath actions: $exp_output" >> expout
2379 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2385 AT_SETUP([ofproto-dpif - exit])
2387 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2388 AT_DATA([flows.txt], [dnl
2389 in_port=1 actions=output:10,exit,output:11
2390 in_port=2 actions=output:12,resubmit:1,output:12
2391 in_port=3 actions=output:13,resubmit:2,output:14
2393 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2394 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])
2395 AT_CHECK([tail -1 stdout], [0],
2396 [Datapath actions: 10
2398 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])
2399 AT_CHECK([tail -1 stdout], [0],
2400 [Datapath actions: 12,10
2402 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])
2403 AT_CHECK([tail -1 stdout], [0],
2404 [Datapath actions: 13,12,10
2410 AT_SETUP([ofproto-dpif - mirroring, select_all])
2412 ADD_OF_PORTS([br0], 1, 2, 3)
2414 set Bridge br0 mirrors=@m --\
2415 --id=@p3 get Port p3 --\
2416 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2418 AT_DATA([flows.txt], [dnl
2419 in_port=1 actions=output:2
2420 in_port=2 actions=output:1
2422 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2424 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)"
2425 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2426 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2427 [Datapath actions: 2,3
2430 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)"
2431 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2432 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2433 [Datapath actions: 1,3
2440 AT_SETUP([ofproto-dpif - mirroring, select_src])
2442 ADD_OF_PORTS([br0], 1, 2, 3)
2444 set Bridge br0 mirrors=@m --\
2445 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2446 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2448 AT_DATA([flows.txt], [dnl
2449 in_port=1 actions=output:2
2450 in_port=2 actions=output:1
2452 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2454 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)"
2455 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2456 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2457 [Datapath actions: 2,3
2460 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)"
2461 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2462 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2463 [Datapath actions: 1
2468 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2470 ADD_OF_PORTS([br0], 1, 2)
2472 set Bridge br0 mirrors=@m --\
2473 --id=@p2 get Port p2 --\
2474 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2476 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2478 # "in_port" defaults to OFPP_NONE if it's not specified.
2479 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"
2480 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2481 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2482 [Datapath actions: 1,2
2489 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2491 ADD_OF_PORTS([br0], 1, 2, 3)
2493 set Bridge br0 mirrors=@m --\
2494 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2495 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2497 AT_DATA([flows.txt], [dnl
2498 in_port=1 actions=output:2
2499 in_port=2 actions=output:1
2501 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2503 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)"
2504 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2505 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2506 [Datapath actions: 2,3
2509 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)"
2510 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2511 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2512 [Datapath actions: 1
2519 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2521 ADD_OF_PORTS([br0], 1, 2, 3)
2523 set Bridge br0 mirrors=@m --\
2524 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2525 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2527 AT_DATA([flows.txt], [dnl
2528 in_port=1, actions=output:2
2530 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2532 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)"
2533 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2534 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2535 [Datapath actions: 2
2538 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))"
2539 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2540 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2541 [Datapath actions: 2
2544 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))"
2545 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2546 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2547 [Datapath actions: 2,3
2554 AT_SETUP([ofproto-dpif - mirroring, output_port])
2556 ADD_OF_PORTS([br0], 1, 2, 3)
2558 set Bridge br0 mirrors=@m --\
2559 --id=@p3 get Port p3 --\
2560 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2562 AT_DATA([flows.txt], [dnl
2563 in_port=1 actions=mod_vlan_vid:17,output:2
2564 in_port=2 actions=output:1
2566 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2568 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)"
2569 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2570 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2571 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2574 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)"
2575 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2576 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2577 [Datapath actions: 1,3
2583 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2585 ADD_OF_PORTS([br0], 1, 2)
2587 set Bridge br0 mirrors=@m --\
2588 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2590 AT_DATA([flows.txt], [dnl
2591 in_port=1 actions=output:2
2592 in_port=2 actions=mod_vlan_vid:17,output:1
2594 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2596 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)"
2597 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2598 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2600 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2601 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2603 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2605 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)"
2606 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2607 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2609 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2610 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2612 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2617 # Two testcases below are for the ofproto/trace command
2618 # The first one tests all correct syntax:
2619 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2620 # ofproto/trace br_name br_flow [-generate|packet]
2621 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2622 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2623 ADD_OF_PORTS([br0], 1, 2, 3)
2625 AT_DATA([flows.txt], [dnl
2626 in_port=1 actions=output:2
2627 in_port=2 actions=output:1
2629 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2631 odp_flow="in_port(1)"
2633 # Test command: ofproto/trace odp_flow with in_port as a name.
2634 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2635 AT_CHECK([tail -1 stdout], [0], [dnl
2639 odp_flow="in_port(1)"
2640 # Test command: ofproto/trace odp_flow
2641 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2642 AT_CHECK([tail -1 stdout], [0], [dnl
2646 # Test command: ofproto/trace dp_name odp_flow
2647 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2648 AT_CHECK([tail -1 stdout], [0], [dnl
2651 # Test commmand: ofproto/trace br_name br_flow
2652 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2653 AT_CHECK([tail -1 stdout], [0], [dnl
2657 # Delete the inserted flows
2658 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2659 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2661 # This section beflow tests the [-generate] option
2662 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2663 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"
2665 # Test command: ofproto/trace odp_flow
2666 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2667 # Check for no MAC learning entry
2668 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2672 # Test command: ofproto/trace br_name br_flow
2673 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2674 # Check for no MAC learning entry
2675 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2679 # Test command: ofproto/trace odp_flow -generate
2680 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2681 # Check for the MAC learning entry
2682 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2684 3 0 50:54:00:00:00:05 ?
2687 # Test command: ofproto/trace dp_name odp_flow -generate
2688 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2689 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2690 -generate], [0], [stdout])
2691 # Check for both MAC learning entries
2692 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2694 3 0 50:54:00:00:00:05 ?
2695 1 0 50:54:00:00:00:06 ?
2698 # Test command: ofproto/trace br_name br_flow -generate
2699 AT_CHECK([ovs-appctl ofproto/trace br0 \
2700 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2701 -generate], [0], [stdout])
2702 # Check for both MAC learning entries.
2703 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2705 3 0 50:54:00:00:00:05 ?
2706 1 0 50:54:00:00:00:06 ?
2707 2 0 50:54:00:00:00:07 ?
2710 # This section beflow tests the [packet] option
2711 # The ovs-tcpundump of packets between port1 and port2
2712 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2713 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2715 # Construct the MAC learning table
2716 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2717 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2718 -generate], [0], [stdout])
2720 # Construct the MAC learning table
2721 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2722 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2723 -generate], [0], [stdout])
2725 # Test command: ofproto/trace odp_flow packet
2726 AT_CHECK([ovs-appctl ofproto/trace \
2727 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2728 AT_CHECK([tail -1 stdout], [0], [dnl
2731 AT_CHECK([head -n 2 stdout], [0], [dnl
2733 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
2736 # Test command: ofproto/trace dp_name odp_flow packet
2737 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2738 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2739 AT_CHECK([tail -1 stdout], [0], [dnl
2742 AT_CHECK([head -n 2 stdout], [0], [dnl
2744 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
2747 # Test command: ofproto/trace br_name br_flow packet
2748 AT_CHECK([ovs-appctl ofproto/trace br0 \
2749 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2750 AT_CHECK([tail -1 stdout], [0], [dnl
2753 AT_CHECK([head -n 2 stdout], [0], [dnl
2755 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
2761 # The second test tests the corner cases
2762 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2764 ADD_OF_PORTS([br0], 1, 2)
2767 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2768 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2770 generate="-generate"
2771 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2773 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2779 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2781 AT_CHECK([tail -2 stderr], [0], [dnl
2782 Cannot find the datapath
2783 ovs-appctl: ovs-vswitchd: server returned an error
2786 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2792 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2794 AT_CHECK([tail -2 stderr], [0], [dnl
2795 Cannot find the datapath
2796 ovs-appctl: ovs-vswitchd: server returned an error
2799 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2805 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2807 AT_CHECK([tail -2 stderr], [0], [dnl
2808 Cannot find the datapath
2809 ovs-appctl: ovs-vswitchd: server returned an error
2812 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2818 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2820 AT_CHECK([tail -2 stderr], [0], [dnl
2821 Cannot find the datapath
2822 ovs-appctl: ovs-vswitchd: server returned an error
2825 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2831 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2833 AT_CHECK([tail -2 stderr], [0], [dnl
2835 ovs-appctl: ovs-vswitchd: server returned an error
2838 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2844 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2846 AT_CHECK([tail -2 stderr], [0], [dnl
2847 Must specify bridge name
2848 ovs-appctl: ovs-vswitchd: server returned an error
2851 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2852 AT_CHECK([ovs-appctl ofproto/trace \
2853 ovs-dummy "$odp_flow" garbage_option],
2854 [2], [stdout],[stderr])
2855 AT_CHECK([tail -2 stderr], [0], [dnl
2856 Trailing garbage in packet data
2857 ovs-appctl: ovs-vswitchd: server returned an error
2860 # Test incorrect command: ofproto/trace with 4 arguments
2861 AT_CHECK([ovs-appctl ofproto/trace \
2862 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2863 AT_CHECK([tail -2 stderr], [0], [dnl
2864 "ofproto/trace" command takes at most 3 arguments
2865 ovs-appctl: ovs-vswitchd: server returned an error
2868 # Test incorrect command: ofproto/trace with 0 argument
2869 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2870 AT_CHECK([tail -2 stderr], [0], [dnl
2871 "ofproto/trace" command requires at least 1 arguments
2872 ovs-appctl: ovs-vswitchd: server returned an error
2878 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2880 ADD_OF_PORTS([br0], 1, 2, 3)
2882 AT_DATA([flows.txt], [dnl
2883 in_port=1 actions=output:2
2884 in_port=2 actions=output:1
2886 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2888 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2889 AT_CHECK([tail -1 stdout], [0], [dnl
2890 Datapath actions: push_vlan(vid=123,pcp=0),2
2897 m4_define([OFPROTO_TRACE],
2899 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2900 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2902 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2905 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2908 AT_SETUP([ofproto-dpif - MAC learning])
2909 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2910 ADD_OF_PORTS([br0], 1, 2, 3)
2912 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)'
2914 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2917 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2921 # Check for the MAC learning entry.
2922 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2924 3 0 50:54:00:00:00:05 ?
2927 # Trace a packet arrival destined for the learned MAC.
2928 # (This will also learn a MAC.)
2931 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2935 # Check for both MAC learning entries.
2936 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2938 3 0 50:54:00:00:00:05 ?
2939 1 0 50:54:00:00:00:06 ?
2942 # Trace a packet arrival that updates the first learned MAC entry.
2945 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2949 # Check that the MAC learning entry was updated.
2950 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2952 1 0 50:54:00:00:00:06 ?
2953 2 0 50:54:00:00:00:05 ?
2956 # Add another bridge.
2960 -- set bridge br1 datapath-type=dummy])
2961 ADD_OF_PORTS([br1], 4, 5)
2963 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2966 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2971 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2975 # Check that the MAC learning entries were added.
2976 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2978 4 0 50:54:00:00:00:06 ?
2979 5 0 50:54:00:00:00:07 ?
2982 # Delete port p1 and see that its MAC learning entry disappeared, and
2983 # that the MAC learning entry for the same MAC was also deleted from br1.
2984 AT_CHECK([ovs-vsctl del-port p1])
2985 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2987 2 0 50:54:00:00:00:05 ?
2989 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2991 5 0 50:54:00:00:00:07 ?
2997 AT_SETUP([ofproto-dpif - MAC table overflow])
2999 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
3000 ADD_OF_PORTS([br0], 1, 2, 3)
3002 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)'
3004 AT_CHECK([ovs-appctl time/stop])
3006 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
3007 for i in 0 1 2 3 4 5 6 7 8 9; do
3010 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
3013 ovs-appctl time/warp 1000
3016 # Check for the MAC learning entries.
3017 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3019 3 0 50:54:00:00:00:00
3020 3 0 50:54:00:00:00:01
3021 3 0 50:54:00:00:00:02
3022 3 0 50:54:00:00:00:03
3023 3 0 50:54:00:00:00:04
3024 3 0 50:54:00:00:00:05
3025 3 0 50:54:00:00:00:06
3026 3 0 50:54:00:00:00:07
3027 3 0 50:54:00:00:00:08
3028 3 0 50:54:00:00:00:09
3032 # Trace another ARP packet on another MAC.
3035 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3039 # Check that the new one chased the oldest one out of the table.
3040 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3042 3 0 50:54:00:00:00:01 ?
3043 3 0 50:54:00:00:00:02 ?
3044 3 0 50:54:00:00:00:03 ?
3045 3 0 50:54:00:00:00:04 ?
3046 3 0 50:54:00:00:00:05 ?
3047 3 0 50:54:00:00:00:06 ?
3048 3 0 50:54:00:00:00:07 ?
3049 3 0 50:54:00:00:00:08 ?
3050 3 0 50:54:00:00:00:09 ?
3051 3 0 50:54:00:00:00:10 ?
3057 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3059 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3061 # IP_VERSION_TYPE is used in AT_SETUP
3062 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3063 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3064 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3066 ON_EXIT([kill `cat test-sflow.pid`])
3067 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3068 AT_CAPTURE_FILE([sflow.log])
3069 SFLOW_PORT=`parse_listening_port test-sflow.log`
3070 ovs-appctl time/stop
3072 ADD_OF_PORTS([br0], 1, 2)
3074 set Interface br0 options:ifindex=1002 -- \
3075 set Interface p1 options:ifindex=1004 -- \
3076 set Interface p2 options:ifindex=1003 -- \
3077 set Bridge br0 sflow=@sf -- \
3078 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3079 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3081 dnl open with ARP packets to seed the bridge-learning. The output
3082 dnl ifIndex numbers should be reported predictably after that.
3083 dnl Since we set sampling=1 we should see all of these packets
3084 dnl reported. Sorting the output by data-source and seqNo makes
3085 dnl it deterministic. Ensuring that we send at least two packets
3086 dnl into each port means we get to check the seq nos are
3087 dnl incrementing correctly.
3088 dnl because packets from different ports can be handled by separate
3089 dnl threads, put some sleeps
3091 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)'
3093 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)'
3095 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)'
3097 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)'
3098 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)'
3100 dnl sleep long enough to get more than one counter sample
3101 dnl from each datasource so we can check sequence numbers
3102 for i in `seq 1 30`; do
3103 ovs-appctl time/warp 100
3106 ovs-appctl -t test-sflow exit
3108 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3129 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
3149 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
3169 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
3189 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
3209 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
3212 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3226 in_broadcasts=4294967295
3229 in_unknownprotos=4294967295
3232 out_multicasts=4294967295
3233 out_broadcasts=4294967295
3249 in_broadcasts=4294967295
3252 in_unknownprotos=4294967295
3255 out_multicasts=4294967295
3256 out_broadcasts=4294967295
3272 in_broadcasts=4294967295
3275 in_unknownprotos=4294967295
3278 out_multicasts=4294967295
3279 out_broadcasts=4294967295
3295 in_broadcasts=4294967295
3298 in_unknownprotos=4294967295
3301 out_multicasts=4294967295
3302 out_broadcasts=4294967295
3318 in_broadcasts=4294967295
3321 in_unknownprotos=4294967295
3324 out_multicasts=4294967295
3325 out_broadcasts=4294967295
3341 in_broadcasts=4294967295
3344 in_unknownprotos=4294967295
3347 out_multicasts=4294967295
3348 out_broadcasts=4294967295
3355 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3356 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3358 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3360 # Test that basic NetFlow reports flow statistics correctly:
3361 # The initial packet of a flow are correctly accounted.
3362 # Later packets within a flow are correctly accounted.
3363 # Flow actions changing (in this case, due to MAC learning)
3364 # cause a record to be sent.
3366 # IP_VERSION_TYPE is used in AT_SETUP
3367 m4_define([CHECK_NETFLOW_EXPIRATION],
3368 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3369 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3370 ADD_OF_PORTS([br0], 1, 2)
3372 ovs-appctl time/stop
3373 ON_EXIT([kill `cat test-netflow.pid`])
3374 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3375 AT_CAPTURE_FILE([netflow.log])
3376 NETFLOW_PORT=`parse_listening_port test-netflow.log`
3379 set Bridge br0 netflow=@nf -- \
3380 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3381 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3383 for delay in 1000 30000; do
3384 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)'
3385 sleep 1 # ensure the order in which these two packets are processed
3386 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)'
3388 ovs-appctl time/warp $delay
3391 ovs-appctl time/warp 6000
3394 ovs-appctl -t test-netflow exit
3396 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])
3398 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])
3400 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3401 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3402 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3406 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3407 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3409 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3411 # Test that basic NetFlow reports active expirations correctly.
3413 # IP_VERSION_TYPE is used in AT_SETUP
3414 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3415 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3417 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3418 ADD_OF_PORTS([br0], 1, 2)
3420 ON_EXIT([kill `cat test-netflow.pid`])
3421 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3422 AT_CAPTURE_FILE([netflow.log])
3423 NETFLOW_PORT=`parse_listening_port test-netflow.log`
3426 set Bridge br0 netflow=@nf -- \
3427 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3428 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3430 AT_CHECK([ovs-appctl time/stop])
3432 while test $n -le 60; do
3435 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)'
3436 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)'
3438 ovs-appctl time/warp 1000
3441 ovs-appctl time/warp 10000
3445 ovs-appctl -t test-netflow exit
3447 # Count the number of reported packets:
3448 # - From source to destination before MAC learning kicks in (just one).
3449 # - From source to destination after that.
3450 # - From destination to source.
3458 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3465 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3468 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3471 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3478 eval $counter=\`expr \$$counter + \$pkts\`
3479 n_recs=`expr $n_recs + 1`
3482 # There should be exactly 1 MAC learning packet,
3483 # exactly 59 other packets in that direction,
3484 # and exactly 60 packets in the other direction.
3485 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3490 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3491 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3493 AT_SETUP([ofproto-dpif - flow stats])
3495 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3496 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3498 ovs-appctl time/stop
3500 for i in `seq 1 10`; do
3501 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)'
3504 ovs-appctl time/warp 1000
3505 sleep 1 # wait for revalidator to update stats
3507 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3508 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3509 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3510 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3515 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3517 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3518 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3520 ovs-appctl time/stop
3522 for i in `seq 1 10`; do
3523 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)'
3526 ovs-appctl time/warp 100
3527 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3528 ovs-appctl time/warp 1000
3530 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3531 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3532 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3533 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3538 AT_SETUP([idle_age and hard_age increase over time])
3541 # get_ages DURATION HARD IDLE
3543 # Fetch the flow duration, hard age, and idle age into the variables
3544 # whose names are given as arguments. Rounds DURATION down to the
3545 # nearest integer. If hard_age doesn't appear in the output, sets
3546 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3549 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3551 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3552 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3553 AS_VAR_COPY([$1], [duration])
3555 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3556 if test X"$hard" = X; then
3559 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3561 AS_VAR_COPY([$2], [hard])
3563 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3564 if test X"$idle" = X; then
3567 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3569 AS_VAR_COPY([$3], [idle])
3572 # Add a flow and get its initial hard and idle age.
3573 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3574 get_ages duration1 hard1 idle1
3576 ovs-appctl time/stop
3577 # Warp time forward by 10 seconds, then modify the flow's actions.
3578 ovs-appctl time/warp 10000
3579 get_ages duration2 hard2 idle2
3580 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3582 # Warp time forward by 10 seconds.
3583 ovs-appctl time/warp 10000
3584 get_ages duration3 hard3 idle3
3586 # Warp time forward 10 more seconds, then pass some packets through the flow,
3587 # then warp forward a few more times because idle times are only updated
3589 ovs-appctl time/warp 10000
3590 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)'
3591 ovs-appctl time/warp 1000
3592 ovs-appctl time/warp 1000
3593 ovs-appctl time/warp 1000
3595 get_ages duration4 hard4 idle4
3597 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3598 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3599 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3601 # Duration should increase steadily over time.
3602 AT_CHECK([test $duration1 -lt $duration2])
3603 AT_CHECK([test $duration2 -lt $duration3])
3604 AT_CHECK([test $duration3 -lt $duration4])
3606 # Hard age should be "none" initially because it's the same as flow_duration,
3607 # then it should increase.
3608 AT_CHECK([test $hard1 = none])
3609 AT_CHECK([test $hard2 = none])
3610 AT_CHECK([test $hard3 != none])
3611 AT_CHECK([test $hard4 != none])
3612 AT_CHECK([test $hard3 -lt $hard4])
3614 # Idle age should increase from 1 to 2 to 3, then decrease.
3615 AT_CHECK([test $idle1 -lt $idle2])
3616 AT_CHECK([test $idle2 -lt $idle3])
3617 AT_CHECK([test $idle3 -gt $idle4])
3619 # Check some invariant relationships.
3620 AT_CHECK([test $duration1 = $idle1])
3621 AT_CHECK([test $duration2 = $idle2])
3622 AT_CHECK([test $duration3 = $idle3])
3623 AT_CHECK([test $idle3 -gt $hard3])
3624 AT_CHECK([test $idle4 -lt $hard4])
3625 AT_CHECK([test $hard4 -lt $duration4])
3630 AT_SETUP([ofproto-dpif - fin_timeout])
3632 AT_DATA([flows.txt], [dnl
3633 in_port=1 actions=output:2
3634 in_port=2 actions=mod_vlan_vid:17,output:1
3636 ovs-appctl time/stop
3637 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3638 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3640 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3643 # Check that a TCP SYN packet does not change the timeout. (Because
3644 # flow stats updates are mainly what implements the fin_timeout
3645 # feature, we warp forward a couple of times to ensure that flow stats
3646 # run before re-checking the flow table.)
3647 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3648 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3652 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3654 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3656 # Check that a TCP FIN packet does change the timeout.
3657 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3658 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3661 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3663 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3668 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3669 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3670 ADD_OF_PORTS([br0], [1], [2])
3671 ADD_OF_PORTS([br1], [3])
3673 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3680 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3681 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3682 ADD_OF_PORTS([br0], [1], [2])
3683 ADD_OF_PORTS([br1], [3])
3685 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3686 dummy@ovs-dummy: hit:0 missed:0
3688 br0 65534/100: (dummy)
3692 br1 65534/101: (dummy)
3698 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3699 # bump max-idle to avoid the flows being reclaimed behind us
3700 OVS_VSWITCHD_START([add-br br1 -- \
3701 set bridge br1 datapath-type=dummy fail-mode=secure -- \
3702 set Open_vSwitch . other_config:max-idle=10000])
3703 ADD_OF_PORTS([br0], [1], [2])
3704 ADD_OF_PORTS([br1], [3])
3706 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)'])
3707 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)'])
3708 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)'])
3709 sleep 1 # wait for upcall handlers
3710 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3711 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
3712 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
3715 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3716 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
3719 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3720 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
3721 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
3724 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3725 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
3731 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
3732 OVS_VSWITCHD_START([dnl
3733 add-port br0 p1 -- set Interface p1 type=dummy
3735 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3736 ON_EXIT([kill `cat ovs-ofctl.pid`])
3738 AT_CAPTURE_FILE([ofctl_monitor.log])
3739 AT_DATA([flows.txt], [dnl
3740 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3741 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3743 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3745 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3746 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3748 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3749 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)
3750 dnl (label 20, exp 0, [S], ttl 32)
3751 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3752 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3754 for dl_src in 00 01; do
3755 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"])
3757 sleep 1 # wait for the datapath flow installed
3758 for dl_src in 00 01; do
3759 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3760 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))
3768 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
3769 OVS_VSWITCHD_START([dnl
3770 add-port br0 p1 -- set Interface p1 type=dummy
3772 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3773 ON_EXIT([kill `cat ovs-ofctl.pid`])
3775 AT_CAPTURE_FILE([ofctl_monitor.log])
3776 AT_DATA([flows.txt], [dnl
3777 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3778 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3780 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3782 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3783 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3784 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3786 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3787 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)
3788 dnl (label 20, exp 0, ttl 32)
3789 dnl (label 20, exp 0, ttl 32)
3790 dnl (label 20, exp 0, [S], ttl 32)
3791 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3792 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3794 for dl_src in 00 01; do
3795 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"])
3797 sleep 1 # wait for the datapath flow installed
3798 for dl_src in 00 01; do
3799 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3800 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))
3807 AT_SETUP([ofproto-dpif - patch ports])
3808 OVS_VSWITCHD_START([add-br br1 \
3809 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3810 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3811 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3813 ADD_OF_PORTS([br0], [2])
3814 ADD_OF_PORTS([br1], [3])
3816 AT_CHECK([ovs-appctl time/stop])
3817 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3819 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3820 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3822 for i in $(seq 1 10); do
3823 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)'
3824 if [[ $i -eq 1 ]]; then
3829 for i in $(seq 1 5); do
3830 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)'
3831 if [[ $i -eq 1 ]]; then
3836 AT_CHECK([ovs-appctl time/warp 500], [0],
3839 sleep 1 # wait for log writer
3841 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3842 dummy@ovs-dummy: hit:13 missed:2
3844 br0 65534/100: (dummy)
3846 pbr0 1/none: (patch: peer=pbr1)
3848 br1 65534/101: (dummy)
3850 pbr1 1/none: (patch: peer=pbr0)
3853 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3854 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
3855 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
3858 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3859 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
3861 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3862 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
3865 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3866 OFPST_PORT reply (xid=0x4): 1 ports
3867 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3868 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3871 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3872 OFPST_PORT reply (xid=0x4): 1 ports
3873 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3874 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3880 AT_SETUP([ofproto-dpif - port duration])
3881 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3882 ADD_OF_PORTS([br0], 1, 2)
3884 ovs-appctl time/stop
3885 ovs-appctl time/warp 10000
3887 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3888 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3897 dnl ----------------------------------------------------------------------
3898 AT_BANNER([ofproto-dpif -- megaflows])
3900 AT_SETUP([ofproto-dpif megaflow - port classification])
3902 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3903 ADD_OF_PORTS([br0], [1], [2])
3904 AT_DATA([flows.txt], [dnl
3905 table=0 in_port=1 actions=output(2)
3907 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3908 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)'])
3910 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)'])
3912 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3913 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>
3918 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3920 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3921 ADD_OF_PORTS([br0], [1], [2])
3922 AT_DATA([flows.txt], [dnl
3923 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3925 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3926 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)'])
3927 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)'])
3929 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3930 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>
3931 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>
3936 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3938 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3939 ADD_OF_PORTS([br0], [1], [2])
3940 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], [])
3941 AT_DATA([flows.txt], [dnl
3942 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3944 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3945 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)'])
3946 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)'])
3948 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3949 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>
3950 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>
3955 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3957 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3958 ADD_OF_PORTS([br0], [1], [2])
3959 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], [])
3960 AT_DATA([flows.txt], [dnl
3961 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3963 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3964 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)'])
3965 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)'])
3967 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3968 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>
3969 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>
3974 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3976 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3977 ADD_OF_PORTS([br0], [1], [2])
3978 AT_DATA([flows.txt], [dnl
3979 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3981 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3982 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)'])
3984 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)'])
3986 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3987 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>
3992 AT_SETUP([ofproto-dpif megaflow - normal])
3994 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3995 ADD_OF_PORTS([br0], [1], [2])
3996 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3997 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)'])
3998 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)'])
4000 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4001 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>
4002 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>
4007 AT_SETUP([ofproto-dpif megaflow - mpls])
4009 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4010 ADD_OF_PORTS([br0], [1], [2])
4011 AT_DATA([flows.txt], [dnl
4012 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
4013 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
4015 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4016 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)'])
4017 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)'])
4019 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4020 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>
4021 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>
4026 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4028 # IP_VERSION_TYPE is used in AT_SETUP
4029 m4_define([CHECK_MEGAFLOW_NETFLOW],
4030 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4032 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4033 ADD_OF_PORTS([br0], [1], [2])
4035 dnl NetFlow configuration disables wildcarding relevant fields
4036 ON_EXIT([kill `cat test-netflow.pid`])
4037 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4038 AT_CAPTURE_FILE([netflow.log])
4039 NETFLOW_PORT=`parse_listening_port test-netflow.log`
4041 set Bridge br0 netflow=@nf -- \
4042 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4043 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4045 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4046 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)'])
4047 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)'])
4049 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4050 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>
4051 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>
4056 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4057 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4059 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4061 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4062 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4063 set interface p2 type=dummy ofport_request=2 -- \
4064 set interface p3 type=dummy ofport_request=3])
4065 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4067 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4069 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
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,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>
4075 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>
4080 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4082 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4083 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4084 set interface p2 type=dummy ofport_request=2 -- \
4085 set interface p3 type=dummy ofport_request=3])
4086 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4088 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4090 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4091 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)'])
4092 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)'])
4094 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4095 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>
4096 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>
4101 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4102 # Create bond0 on br0 with interfaces p0 and p1
4103 # and bond1 on br1 with interfaces p2 and p3
4104 # with p0 patched to p2 and p1 patched to p3.
4106 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4107 other-config:lacp-time=fast \
4108 other-config:bond-rebalance-interval=0 -- \
4109 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4110 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4112 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4113 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4114 fail-mode=secure -- \
4115 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4116 other-config:lacp-time=fast \
4117 other-config:bond-rebalance-interval=0 -- \
4118 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4119 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4121 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4123 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4124 ADD_OF_PORTS([br0], [7])
4125 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4126 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4127 ovs-appctl time/stop
4128 ovs-appctl time/warp 5000
4129 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)'])
4130 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)'])
4132 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4133 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>
4134 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>
4139 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4141 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4142 ADD_OF_PORTS([br0], [1], [2])
4143 AT_DATA([flows.txt], [dnl
4144 table=0 in_port=1,ip actions=resubmit(90)
4145 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4147 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4148 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)'])
4149 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)'])
4151 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4152 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>
4153 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>
4158 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4160 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4161 ADD_OF_PORTS([br0], [1], [2])
4162 AT_DATA([flows.txt], [dnl
4163 table=0 in_port=1,ip actions=resubmit(,1)
4164 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4166 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4167 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)'])
4168 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=
4169 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4171 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4172 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>
4173 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>
4178 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4180 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4181 ADD_OF_PORTS([br0], [1], [2])
4182 AT_DATA([flows.txt], [dnl
4183 table=0 in_port=1,ip actions=goto_table(1)
4184 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4186 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4187 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)'])
4188 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)'])
4190 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4191 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>
4192 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>
4197 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4199 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4200 ADD_OF_PORTS([br0], [1], [2], [3])
4202 set Bridge br0 mirrors=@m --\
4203 --id=@p3 get Port p3 --\
4204 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4206 AT_DATA([flows.txt], [dnl
4207 in_port=1 actions=output:2
4209 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4210 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)'])
4212 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)'])
4214 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4215 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>
4220 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4222 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4223 ADD_OF_PORTS([br0], [1], [2], [3])
4225 set Bridge br0 mirrors=@m --\
4226 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4227 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4229 AT_DATA([flows.txt], [dnl
4230 in_port=1 actions=output:2
4232 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4233 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))'])
4234 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)'])
4236 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4237 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>
4238 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>
4243 AT_SETUP([ofproto-dpif megaflow - move action])
4245 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4246 ADD_OF_PORTS([br0], [1], [2])
4247 AT_DATA([flows.txt], [dnl
4248 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4249 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4250 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4252 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4253 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)'])
4254 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)'])
4256 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4257 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>
4258 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>
4263 AT_SETUP([ofproto-dpif megaflow - push action])
4265 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4266 ADD_OF_PORTS([br0], [1], [2])
4267 AT_DATA([flows.txt], [dnl
4268 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4270 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4271 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)'])
4272 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)'])
4274 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4275 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>
4276 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>
4281 AT_SETUP([ofproto-dpif megaflow - learning])
4283 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4284 ADD_OF_PORTS([br0], [1], [2])
4285 AT_DATA([flows.txt], [dnl
4286 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
4288 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4289 ovs-appctl time/stop
4290 # We send each packet twice because the first packet in each flow causes the
4291 # flow table to change and thus revalidations, which (depending on timing)
4292 # can keep a megaflow from being installed. The revalidations are done by
4293 # the second iteration, allowing the flows to be installed.
4295 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)'])
4296 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)'])
4297 ovs-appctl time/warp 100
4300 dnl The original flow is missing due to a revalidation.
4301 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4302 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>
4303 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>
4308 AT_SETUP([ofproto-dpif megaflow - tunnels])
4310 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4311 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4312 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4313 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4314 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4316 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4317 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4318 ofport_request=4 options:key=flow])
4319 AT_DATA([flows.txt], [dnl
4320 in_port=1,actions=output(2)
4321 in_port=3,actions=output(4)
4323 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4324 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4325 dnl will cause the packet to be dropped.
4326 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)'])
4328 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)'])
4329 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)'])
4331 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)'])
4333 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4334 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>
4335 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>
4336 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>
4341 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4343 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4344 ADD_OF_PORTS([br0], [1], [2])
4345 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], [])
4346 AT_DATA([flows.txt], [dnl
4347 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4349 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4350 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)'])
4351 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)'])
4353 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4354 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>
4355 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>
4360 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4362 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4363 ADD_OF_PORTS([br0], [1], [2])
4364 AT_DATA([flows.txt], [dnl
4365 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4367 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4368 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)'])
4369 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)'])
4371 dnl The megaflows do not match the same fields, since the first packet
4372 dnl is essentially a no-op. (The new destination MAC is the same as the
4373 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4374 dnl so that a packet that doesn't need its MAC address changed doesn't
4375 dnl hide one that does. Since the first entry doesn't need to change,
4376 dnl only the destination MAC address is matched (as decided by
4377 dnl ofproto-dpif). The second entry actually updates the destination
4378 dnl MAC, so both the source and destination MAC addresses are
4379 dnl un-wildcarded, since the ODP commit functions update both the source
4380 dnl and destination MAC addresses.
4381 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [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/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
4383 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
4388 AT_SETUP([ofproto-dpif megaflow - disabled])
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,nw_dst=10.0.0.1 actions=output(2)
4394 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4396 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4398 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4399 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4400 for i in 1 2 3 4; do
4401 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)'])
4402 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)'])
4403 if [[ $i -eq 1 ]]; then
4408 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4409 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
4410 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
4412 AT_CHECK([cat ovs-vswitchd.log | grep '00:09.*packets:3' | FILTER_FLOW_DUMP], [0], [dnl
4413 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
4415 AT_CHECK([cat ovs-vswitchd.log | grep '00:0b.*packets:3' | FILTER_FLOW_DUMP], [0], [dnl
4416 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
4421 AT_SETUP([ofproto-dpif - datapath port number change])
4422 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4423 ADD_OF_PORTS([br0], 1)
4425 # Trace a flow that should output to p1.
4426 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4428 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4431 # Change p1's port number to 5.
4432 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4434 # Trace a flow that should output to p1 in its new location.
4435 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4437 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4442 # Tests the bundling with various bfd and cfm configurations.
4443 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4444 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4445 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4446 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4447 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4448 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4449 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4450 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4451 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4452 set Interface p0 cfm_mpid=1 -- \
4453 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4455 ovs-appctl time/stop
4456 # advance the clock to stablize everything.
4457 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4458 # cfm/show should show 'recv' fault.
4459 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4462 # bfd/show should show 'up'.
4463 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4464 Local Session State: up
4465 Remote Session State: up
4466 Local Session State: up
4467 Remote Session State: up
4469 # bond/show should show 'may-enable: true' for all slaves.
4470 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4477 # now disable the bfd on p1.
4478 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4479 # advance the clock to stablize everything.
4480 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4481 # cfm/show should show 'recv' fault.
4482 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4485 # bfd/show should show 'down'.
4486 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4487 Local Session State: down
4488 Remote Session State: down
4490 # bond/show should show 'may-enable: false' for p0.
4491 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4496 # now enable the bfd on p1 and disable bfd on p0.
4497 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4498 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4499 # advance the clock to stablize everything.
4500 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4501 # cfm/show should show 'recv' fault.
4502 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4505 # bfd/show should show 'down'.
4506 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4507 Local Session State: down
4508 Remote Session State: down
4510 # bond/show should show 'may-enable: false' for p0 and p1.
4511 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4521 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4522 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4525 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4527 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4528 # disable bfd on p0.
4529 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4531 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4532 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4535 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4537 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4538 # disable cfm on p0.
4539 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4541 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4542 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4544 # enable both bfd and cfm on p0.
4545 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4547 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4548 # disable bfd on p0.
4549 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4550 # check log, there should not be the log of thread terminated.
4551 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4553 # reenable bfd on p0.
4554 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4555 # check log, should still be on log of thread created.
4556 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4557 monitor thread created
4559 # disable bfd and cfm together.
4560 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4562 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4567 # this test helps avoid the deadlock between the main thread and monitor thread.
4568 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4571 for i in `seq 1 199`
4573 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])
4579 AT_BANNER([ofproto-dpif - flow translation resource limits])
4581 AT_SETUP([ofproto-dpif - infinite resubmit])
4583 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4584 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4586 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4588 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4591 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4594 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4596 ADD_OF_PORTS([br0], 1)
4597 (for i in `seq 1 64`; do
4599 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4601 echo "in_port=65, actions=local") > flows
4602 AT_CHECK([ovs-ofctl add-flows br0 flows])
4603 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4604 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4606 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4609 AT_SETUP([ofproto-dpif - too many output actions])
4611 ADD_OF_PORTS([br0], 1)
4612 (for i in `seq 1 12`; do
4614 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4616 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4617 AT_CHECK([ovs-ofctl add-flows br0 flows])
4618 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4619 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4622 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4624 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4627 AT_SETUP([ofproto-dpif - stack too deep])
4629 ADD_OF_PORTS([br0], 1)
4630 (for i in `seq 1 12`; do
4632 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4634 push="push:NXM_NX_REG0[[]]"
4635 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4636 AT_CHECK([ovs-ofctl add-flows br0 flows])
4637 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4638 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4640 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])