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
92 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port([[348]])' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
93 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>
94 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>
95 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>
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: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>
97 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>
98 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>
103 AT_SETUP([ofproto-dpif, balance-slb bonding])
104 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
105 # and br1 with interfaces p4, p5, p6 and p8.
106 # p1 <-> p4, p2 <-> p5, p3 <-> p6
107 # Send some traffic, make sure the traffic are spread based on source mac.
109 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
110 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
111 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
112 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
113 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
115 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
116 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
117 fail-mode=secure -- \
118 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
119 add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
120 add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
121 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
123 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
124 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
125 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
127 ovs-appctl netdev-dummy/set-admin-state up
129 ovs-appctl time/warp 100
131 for i in `seq 0 100 |xargs printf '%02x\n'`;
133 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)"
134 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
137 ovs-appctl time/warp 100
138 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
139 # Make sure there is resonable distribution to all three ports.
140 # We don't want to make this check precise, in case hash function changes.
141 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
142 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
143 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
147 AT_SETUP([ofproto-dpif, balance-tcp bonding])
148 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
149 # and br1 with interfaces bond1(p4, p5, p6) and p8.
151 # Send some traffic, make sure the traffic are spread based on L4 headers.
153 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
154 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
155 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
156 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
157 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
158 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
160 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
161 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
162 fail-mode=secure -- \
163 add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
164 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
165 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
166 set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
167 set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
168 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
169 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
171 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
172 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
173 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
177 ovs-appctl time/warp 100
178 ovs-appctl lacp/show > lacp.txt
179 ovs-appctl bond/show > bond.txt
181 for i in `seq 10 100` ;
183 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)"
184 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
187 ovs-appctl time/warp 100
188 ovs-appctl time/warp 100
189 ovs-appctl time/warp 100
190 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
191 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
192 # Make sure there is resonable distribution to all three ports.
193 # We don't want to make this check precise, in case hash function changes.
194 AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 7])
195 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 7])
196 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 7])
200 AT_SETUP([ofproto-dpif - resubmit])
202 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
203 [16], [17], [18], [19], [20], [21])
204 AT_DATA([flows.txt], [dnl
205 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
206 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
207 table=0 in_port=3 priority=2000 icmp actions=output(20)
208 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
209 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
210 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
212 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
213 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])
214 AT_CHECK([tail -1 stdout], [0],
215 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
220 AT_SETUP([ofproto-dpif - goto table])
222 ADD_OF_PORTS([br0], [1], [10], [11])
223 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
224 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
225 echo "table=64 actions=output(11)" >> flows.txt
226 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
227 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])
228 AT_CHECK([tail -1 stdout], [0],
229 [Datapath actions: 10,11
234 AT_SETUP([ofproto-dpif - write actions])
236 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
237 AT_DATA([flows.txt], [dnl
238 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
239 table=1 ip actions=write_actions(output(13)),goto_table(2)
240 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
242 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
243 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])
244 AT_CHECK([tail -2 stdout], [0],
245 [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
246 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
251 AT_SETUP([ofproto-dpif - clear actions])
253 ADD_OF_PORTS([br0], [1], [10], [11], [12])
254 AT_DATA([flows.txt], [dnl
255 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
256 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
258 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
259 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])
260 AT_CHECK([tail -2 stdout], [0],
261 [Megaflow: recirc_id=0,skb_priority=0,tcp,in_port=1,nw_frag=no,tp_src=8,tp_dst=9
262 Datapath actions: 10,set(tcp(src=91,dst=9)),11
267 AT_SETUP([ofproto-dpif - group chaining not supported])
269 ADD_OF_PORTS([br0], [1], [10], [11])
270 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'],
272 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
273 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
278 AT_SETUP([ofproto-dpif - all group in action list])
280 ADD_OF_PORTS([br0], [1], [10], [11])
281 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'])
282 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
283 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])
284 AT_CHECK([tail -2 stdout], [0],
285 [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
286 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
291 AT_SETUP([ofproto-dpif - indirect group in action list])
293 ADD_OF_PORTS([br0], [1], [10])
294 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
295 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
296 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])
297 AT_CHECK([tail -1 stdout], [0],
298 [Datapath actions: 10
303 AT_SETUP([ofproto-dpif - all group in action set])
305 ADD_OF_PORTS([br0], [1], [10], [11])
306 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'])
307 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
308 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])
309 AT_CHECK([tail -2 stdout], [0],
310 [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
311 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
316 AT_SETUP([ofproto-dpif - indirect group in action set])
318 ADD_OF_PORTS([br0], [1], [10])
319 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
320 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
321 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])
322 AT_CHECK([tail -1 stdout], [0],
323 [Datapath actions: 10
328 AT_SETUP([ofproto-dpif - select group])
330 ADD_OF_PORTS([br0], [1], [10], [11])
331 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
332 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
334 # Try a bunch of different flows and make sure that they get distributed
336 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
337 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])
338 tail -1 stdout >> results
340 sort results | uniq -c
341 AT_CHECK([sort results | uniq], [0],
342 [Datapath actions: 10
348 AT_SETUP([ofproto-dpif - select group with watch port])
350 ADD_OF_PORTS([br0], [1], [10], [11])
351 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
352 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
353 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])
354 AT_CHECK([tail -1 stdout], [0],
355 [Datapath actions: 11
360 AT_SETUP([ofproto-dpif - select group with weight])
362 ADD_OF_PORTS([br0], [1], [10], [11], [12])
363 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'])
364 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
365 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])
366 AT_CHECK([tail -1 stdout], [0],
367 [Datapath actions: 11
372 AT_SETUP([ofproto-dpif - fast failover group])
374 ADD_OF_PORTS([br0], [1], [10], [11])
375 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'])
376 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
377 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])
378 AT_CHECK([tail -1 stdout], [0],
379 [Datapath actions: drop
384 AT_SETUP([ofproto-dpif - registers])
386 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
387 AT_DATA([flows.txt], [dnl
388 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
389 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
390 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
391 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
393 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
394 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
395 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
396 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
397 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
398 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
399 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
400 in_port=9,reg0=0xdeadbeef actions=output:20
401 in_port=10,reg1=0xdeadbeef actions=output:21
402 in_port=11,reg2=0xeef22dea actions=output:22
404 dnl Sanilty check all registers
405 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
406 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
407 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
408 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
411 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
412 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])
413 AT_CHECK([tail -1 stdout], [0],
414 [Datapath actions: 20,21,22,33
419 AT_SETUP([ofproto-dpif - push-pop])
421 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
422 AT_DATA([flows.txt], [dnl
423 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
424 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
425 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
426 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
427 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
430 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
431 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])
432 AT_CHECK([tail -1 stdout], [0],
433 [Datapath actions: 33,22,21,20
438 AT_SETUP([ofproto-dpif - output])
440 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
441 AT_DATA([flows.txt], [dnl
442 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
443 in_port=2 actions=output:9
444 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
445 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
446 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
447 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
448 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
449 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
451 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
452 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])
453 AT_CHECK([tail -1 stdout], [0],
454 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
459 AT_SETUP([ofproto-dpif - dec_ttl])
461 ADD_OF_PORTS([br0], [1], [2], [3], [4])
462 AT_DATA([flows.txt], [dnl
463 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
464 table=1 in_port=1 action=dec_ttl,output:3
466 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
467 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])
468 AT_CHECK([tail -4 stdout], [0],
469 [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
470 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
471 This flow is handled by the userspace slow path because it:
472 - Sends "packet-in" messages to the OpenFlow controller.
474 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])
475 AT_CHECK([tail -2 stdout], [0],
476 [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
477 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
479 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])
480 AT_CHECK([tail -2 stdout], [0],
481 [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
482 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
485 AT_CAPTURE_FILE([ofctl_monitor.log])
486 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
487 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])
488 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
489 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
490 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
491 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
496 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
497 dnl buffer to be resized just before pushing the id of the dec_ttl action.
498 dnl Thus the implementation must account for this by using the
499 dnl reallocated buffer rather than the original buffer.
501 dnl A number of similar rules are added to try and exercise
502 dnl xrealloc sufficiently that it returns a different base pointer
503 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
505 ADD_OF_PORTS([br0], [1])
506 (for i in `seq 0 255`; do
507 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
509 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
513 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
514 dnl buffer to be resized just before pushing the id of the dec_ttl action.
515 dnl Thus the implementation must account for this by using the
516 dnl reallocated buffer rather than the original buffer.
518 dnl A number of similar rules are added to try and exercise
519 dnl xrealloc sufficiently that it returns a different base pointer
520 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
522 ADD_OF_PORTS([br0], [1])
523 (for i in `seq 0 255`; do
524 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
526 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
530 dnl A note action at offset 24 in ofpacts will cause the ofpacts
531 dnl buffer to be resized just before pushing the id of the dec_ttl action.
532 dnl Thus the implementation must account for this by using the
533 dnl reallocated buffer rather than the original buffer.
535 dnl A number of similar rules are added to try and exercise
536 dnl xrealloc sufficiently that it returns a different base pointer
537 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
539 ADD_OF_PORTS([br0], [1])
540 (for i in `seq 0 255`; do
541 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
543 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
547 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
549 ADD_OF_PORTS([br0], [1], [2])
551 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
553 # "in_port" defaults to OFPP_NONE if it's not specified.
554 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"
555 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
556 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
565 AT_SETUP([ofproto-dpif - DSCP])
566 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
567 ADD_OF_PORTS([br0], [9])
568 AT_DATA([flows.txt], [dnl
569 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
571 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
572 AT_CHECK([ovs-vsctl -- \
573 set Port p1 qos=@newqos --\
574 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
575 --id=@q1 create Queue dscp=1 --\
576 --id=@q2 create Queue dscp=2], [0], [ignore])
577 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])
578 AT_CHECK([tail -2 stdout], [0],
579 [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
580 Datapath actions: dnl
582 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
583 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
585 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
586 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
587 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
593 AT_SETUP([ofproto-dpif - output/flood flags])
595 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
597 AT_DATA([flows.txt], [dnl
598 in_port=local actions=local,flood
599 in_port=1 actions=flood
600 in_port=2 actions=all
601 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
602 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
604 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
605 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
606 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
608 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])
609 AT_CHECK([tail -1 stdout \
610 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
618 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])
619 AT_CHECK([tail -1 stdout \
620 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
628 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])
629 AT_CHECK([tail -1 stdout \
630 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
639 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])
640 AT_CHECK([tail -1 stdout], [0],
641 [Datapath actions: 100,1,2,4,6,7
644 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])
645 AT_CHECK([tail -1 stdout], [0],
646 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
651 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
652 OVS_VSWITCHD_START([dnl
653 add-port br0 p1 -- set Interface p1 type=dummy
655 ON_EXIT([kill `cat ovs-ofctl.pid`])
657 AT_CAPTURE_FILE([ofctl_monitor.log])
659 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
662 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)'
664 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
665 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
666 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
667 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
668 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
670 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
671 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
673 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
674 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
677 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
678 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
685 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
686 OVS_VSWITCHD_START([dnl
687 add-port br0 p1 -- set Interface p1 type=dummy
689 ON_EXIT([kill `cat ovs-ofctl.pid`])
691 AT_CAPTURE_FILE([ofctl_monitor.log])
692 AT_CHECK([ovs-ofctl del-flows br0])
694 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
696 dnl Test that missed packets are droped
698 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)'
700 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
702 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
705 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
706 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
707 OFPST_FLOW reply (OF1.3):
713 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
714 OVS_VSWITCHD_START([dnl
715 add-port br0 p1 -- set Interface p1 type=dummy
717 ON_EXIT([kill `cat ovs-ofctl.pid`])
719 AT_CAPTURE_FILE([ofctl_monitor.log])
720 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
722 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
725 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)'
727 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
728 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
729 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
730 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
731 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
733 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
734 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
736 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
737 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
740 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
741 sleep 1 # wait for revalidator to update stats
742 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
743 n_packets=3, n_bytes=180, actions=goto_table:1
744 OFPST_FLOW reply (OF1.2):
750 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
751 OVS_VSWITCHD_START([dnl
752 add-port br0 p1 -- set Interface p1 type=dummy
754 ON_EXIT([kill `cat ovs-ofctl.pid`])
756 AT_CAPTURE_FILE([ofctl_monitor.log])
757 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
759 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
762 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)'
765 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
766 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
769 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
770 sleep 1 # wait for revalidator to update stats
771 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
772 n_packets=3, n_bytes=180, actions=resubmit(1,1)
773 OFPST_FLOW reply (OF1.2):
779 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
780 OVS_VSWITCHD_START([dnl
781 add-port br0 p1 -- set Interface p1 type=dummy
783 ON_EXIT([kill `cat ovs-ofctl.pid`])
785 AT_CAPTURE_FILE([ofctl_monitor.log])
786 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
787 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
789 dnl Miss table 0, Hit table 1
790 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
793 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)'
795 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
796 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
798 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
799 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
800 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
802 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
803 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
805 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
806 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
809 dnl Hit table 0, Miss all other tables, sent to controller
810 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
813 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)'
815 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
816 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
818 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
819 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
820 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
822 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
823 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
825 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
826 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
829 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
830 sleep 1 # wait for revalidator to update stats
831 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
832 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
833 OFPST_FLOW reply (OF1.2):
839 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
840 OVS_VSWITCHD_START([dnl
841 add-port br0 p1 -- set Interface p1 type=dummy
843 ON_EXIT([kill `cat ovs-ofctl.pid`])
845 AT_CAPTURE_FILE([ofctl_monitor.log])
846 AT_DATA([flows.txt], [dnl
847 table=0 actions=goto_table(1)
848 table=2 dl_src=10:11:11:11:11:11 actions=controller
850 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
851 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
853 dnl Hit table 0, Miss table 1, Hit table 2
854 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
857 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)'
859 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
860 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
862 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
863 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
864 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
866 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
867 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
869 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
870 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
873 dnl Hit table 1, Miss all other tables, sent to controller
874 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
877 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)'
879 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
880 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
882 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
883 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
884 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
886 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
887 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
889 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
890 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
893 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
894 sleep 1 # wait for revalidator to update stats
895 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
896 n_packets=6, n_bytes=360, actions=goto_table:1
897 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
898 OFPST_FLOW reply (OF1.2):
904 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
905 OVS_VSWITCHD_START([dnl
906 add-port br0 p1 -- set Interface p1 type=dummy
908 ON_EXIT([kill `cat ovs-ofctl.pid`])
910 AT_CAPTURE_FILE([ofctl_monitor.log])
911 AT_DATA([flows.txt], [dnl
912 table=0 actions=resubmit(1,1)
913 table=2 dl_src=10:11:11:11:11:11 actions=controller
915 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
916 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
918 dnl Hit table 0, Miss table 1, Dropped
919 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
922 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)'
924 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
926 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
929 dnl Hit table 1, Dropped
930 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
933 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)'
935 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
937 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
940 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
941 sleep 1 # wait for revalidator to update stats
942 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
943 n_packets=6, n_bytes=360, actions=resubmit(1,1)
944 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
945 OFPST_FLOW reply (OF1.2):
951 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
952 OVS_VSWITCHD_START([dnl
953 add-port br0 p1 -- set Interface p1 type=dummy
955 ON_EXIT([kill `cat ovs-ofctl.pid`])
957 AT_CAPTURE_FILE([ofctl_monitor.log])
958 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
960 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
962 dnl Test that missed packets are droped
964 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)'
966 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
968 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
971 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
972 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
979 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
980 OVS_VSWITCHD_START([dnl
981 add-port br0 p1 -- set Interface p1 type=dummy
983 ON_EXIT([kill `cat ovs-ofctl.pid`])
985 AT_CAPTURE_FILE([ofctl_monitor.log])
986 AT_CHECK([ovs-ofctl del-flows br0])
987 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
988 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
990 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
992 dnl Test that missed packets are droped
994 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)'
996 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
998 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1001 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1002 sleep 1 # wait for revalidator to update stats
1003 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1004 n_packets=3, n_bytes=180, actions=goto_table:1
1005 OFPST_FLOW reply (OF1.2):
1011 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1012 OVS_VSWITCHD_START([dnl
1013 add-port br0 p1 -- set Interface p1 type=dummy
1015 ON_EXIT([kill `cat ovs-ofctl.pid`])
1017 AT_CAPTURE_FILE([ofctl_monitor.log])
1018 AT_CHECK([ovs-ofctl del-flows br0])
1019 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1020 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1022 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1024 dnl Test that missed packets are droped
1026 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)'
1028 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1030 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1033 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1034 sleep 1 # wait for revalidator to update stats
1035 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1036 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1037 OFPST_FLOW reply (OF1.2):
1043 AT_SETUP([ofproto-dpif - controller])
1044 OVS_VSWITCHD_START([dnl
1045 add-port br0 p1 -- set Interface p1 type=dummy
1047 ON_EXIT([kill `cat ovs-ofctl.pid`])
1049 AT_CAPTURE_FILE([ofctl_monitor.log])
1050 AT_DATA([flows.txt], [dnl
1051 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1052 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1053 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1055 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1056 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)
1057 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)
1058 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1059 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)
1060 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1061 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1062 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1063 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
1064 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
1065 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
1066 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
1067 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
1068 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
1069 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
1070 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
1071 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1072 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1073 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
1074 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
1076 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1079 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1082 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)'
1084 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1085 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1087 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1088 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1089 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
1091 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1092 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
1094 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1095 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
1098 dnl Singleton controller action.
1099 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1102 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)'
1104 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1105 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1107 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1108 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1109 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
1111 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1112 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
1114 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1115 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
1118 dnl Modified controller action.
1119 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1122 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)'
1124 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1125 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1127 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1128 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1129 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
1131 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1132 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
1134 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1135 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
1138 dnl Modified VLAN controller action.
1139 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1142 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)'
1144 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1145 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1147 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1148 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1149 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
1151 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1152 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
1154 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1155 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
1158 dnl Modified MPLS controller action.
1159 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1162 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)'
1164 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1165 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1167 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1168 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1169 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
1171 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1172 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
1174 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1175 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
1178 dnl Modified MPLS controller action.
1179 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1182 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)'
1184 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1185 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1187 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1188 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1189 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
1191 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1192 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
1194 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1195 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
1198 dnl Modified MPLS controller action.
1199 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1201 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)
1204 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)'
1206 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1207 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1209 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1210 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1211 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
1213 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1214 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
1216 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1217 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
1220 dnl Modified MPLS controller action.
1221 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1224 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))'
1226 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1227 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1229 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1230 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1231 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
1233 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1234 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
1236 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1237 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
1240 dnl Modified MPLS controller action.
1241 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1244 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)'
1246 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1247 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1249 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1250 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1251 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1253 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1254 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
1256 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1257 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
1260 dnl Modified MPLS controller action.
1261 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1264 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)'
1266 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1267 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1269 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1270 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1271 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
1273 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1274 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
1276 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1277 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
1280 dnl Modified MPLS controller action.
1281 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1284 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)'
1286 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1287 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1289 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1290 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1291 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
1293 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1294 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
1296 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1297 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
1300 dnl Modified MPLS controller action.
1301 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1304 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)'
1306 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1307 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1309 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1310 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1311 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
1313 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1314 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
1316 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1317 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
1320 dnl Modified MPLS actions.
1321 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1324 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)'
1326 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1327 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1329 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1330 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1331 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
1333 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1334 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
1336 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1337 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
1340 dnl Modified MPLS ipv6 controller action.
1341 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1344 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)'
1346 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1347 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1349 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1350 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1351 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
1353 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1354 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
1356 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1357 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
1361 dnl Modified MPLS pop action.
1362 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1363 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)
1364 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1366 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1369 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'
1372 # 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)'
1374 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1375 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1377 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1378 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1379 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
1381 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1382 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
1384 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1385 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
1389 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1392 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)'
1394 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1395 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1397 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1398 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1399 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
1401 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1402 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
1404 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)
1405 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
1407 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)
1408 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
1410 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)
1411 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
1413 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)
1414 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
1416 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)
1417 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
1419 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)
1420 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
1422 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)
1423 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
1427 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1430 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'
1432 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1433 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1435 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1436 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1437 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
1439 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1440 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
1442 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)
1443 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
1445 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)
1446 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
1448 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)
1449 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
1451 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)
1452 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
1454 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)
1455 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
1457 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)
1458 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
1460 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)
1461 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
1464 dnl Modified ARP controller action.
1465 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1468 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)'
1471 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1472 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1473 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1474 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1475 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
1476 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1477 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
1478 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1479 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
1480 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1481 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
1482 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1483 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
1484 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1485 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
1486 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1487 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
1488 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1489 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
1490 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1491 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
1494 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1497 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1500 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'
1503 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1504 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1505 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1506 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1507 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
1509 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1510 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
1512 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)
1513 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
1515 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)
1516 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
1518 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)
1519 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
1521 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)
1522 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
1524 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)
1525 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
1527 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)
1528 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
1530 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)
1531 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
1534 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1535 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1536 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1537 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)
1538 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)
1539 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)
1540 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)
1541 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)
1542 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1543 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1544 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
1545 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
1546 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
1547 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
1548 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
1549 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
1550 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
1551 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
1552 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
1553 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
1554 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
1555 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
1556 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1557 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1565 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1566 OVS_VSWITCHD_START([dnl
1567 add-port br0 p1 -- set Interface p1 type=dummy
1569 ON_EXIT([kill `cat ovs-ofctl.pid`])
1571 AT_CAPTURE_FILE([ofctl_monitor.log])
1572 # A table-miss flow has priority 0 and no match
1573 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1575 dnl Singleton controller action.
1576 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1579 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)'
1581 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1582 ovs-appctl -t ovs-ofctl exit
1584 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1585 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1586 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
1588 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1589 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
1591 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1592 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
1595 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1597 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1598 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1606 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1607 OVS_VSWITCHD_START([dnl
1608 add-port br0 p1 -- set Interface p1 type=dummy
1610 ON_EXIT([kill `cat ovs-ofctl.pid`])
1612 AT_CAPTURE_FILE([ofctl_monitor.log])
1613 # A table-miss flow has priority 0 and no match
1614 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1616 dnl Singleton controller action.
1617 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1620 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)'
1622 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1623 ovs-appctl -t ovs-ofctl exit
1625 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1627 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1628 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1629 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
1631 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1632 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
1634 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1635 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
1638 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1640 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1641 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1642 OFPST_FLOW reply (OF1.3):
1648 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1650 ADD_OF_PORTS([br0], [1], [2])
1652 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1653 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'
1655 # Input some packets that should follow the arp modification slow-path.
1657 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)'
1659 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1661 # Check the packets that were output.
1662 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1663 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
1664 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
1665 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
1666 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
1667 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
1668 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
1669 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
1670 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
1671 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
1677 AT_SETUP([ofproto-dpif - VLAN handling])
1679 [set Bridge br0 fail-mode=standalone -- \
1680 add-port br0 p1 trunks=10,12 -- \
1681 add-port br0 p2 tag=10 -- \
1682 add-port br0 p3 tag=12 \
1683 other-config:priority-tags=true -- \
1684 add-port br0 p4 tag=12 -- \
1685 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1686 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1687 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1688 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1689 other-config:priority-tags=true -- \
1690 set Interface p1 type=dummy -- \
1691 set Interface p2 type=dummy -- \
1692 set Interface p3 type=dummy -- \
1693 set Interface p4 type=dummy -- \
1694 set Interface p5 type=dummy -- \
1695 set Interface p6 type=dummy -- \
1696 set Interface p7 type=dummy -- \
1697 set Interface p8 type=dummy --])
1699 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1700 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1706 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1707 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1710 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1711 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1715 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1716 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1719 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1720 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1721 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1722 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1723 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1730 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1731 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1732 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1739 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1740 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1741 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1748 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1749 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1750 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1751 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1752 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1755 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1756 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1757 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1758 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1759 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1760 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1761 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1764 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1765 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1766 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1767 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1768 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1769 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1770 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1773 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1774 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1775 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1776 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1777 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1778 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1779 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1782 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1783 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1791 if test $vlan = none; then
1792 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1794 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))"
1797 echo "----------------------------------------------------------------------"
1798 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1800 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1801 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1803 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1805 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1811 AT_SETUP([ofproto-dpif - MPLS handling])
1812 OVS_VSWITCHD_START([dnl
1813 add-port br0 p1 -- set Interface p1 type=dummy
1815 ON_EXIT([kill `cat ovs-ofctl.pid`])
1817 AT_CAPTURE_FILE([ofctl_monitor.log])
1818 AT_DATA([flows.txt], [dnl
1819 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1820 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1821 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1823 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1825 dnl In this test, we push an MPLS tag to an ethernet packet.
1826 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1829 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)'
1831 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1832 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1834 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1835 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1836 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
1837 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1838 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1839 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1840 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1842 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1843 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
1844 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1845 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1846 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1847 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1849 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1850 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
1851 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1852 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1853 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1854 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1857 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1858 dnl copied exactly, except for the BOS bit.
1859 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1862 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)'
1864 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1865 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1867 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1868 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1869 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
1870 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1871 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1872 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1873 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1875 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1876 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
1877 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1878 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1879 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1880 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1882 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1883 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
1884 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1885 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1886 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1887 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1890 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1891 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1892 dnl to the MPLS ethertype of the MPLS push action which differs to that
1893 dnl of the input packet.
1894 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1897 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)'
1899 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1900 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1902 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1903 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1904 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
1905 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1906 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1907 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1908 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1910 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1911 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
1912 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1913 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1914 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1915 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1917 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1918 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
1919 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1920 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1921 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1922 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1928 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1929 OVS_VSWITCHD_START([dnl
1930 add-port br0 p1 -- set Interface p1 type=dummy
1932 ON_EXIT([kill `cat ovs-ofctl.pid`])
1934 AT_CAPTURE_FILE([ofctl_monitor.log])
1935 AT_DATA([flows.txt], [dnl
1936 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
1937 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
1938 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
1939 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
1940 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
1941 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
1942 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
1943 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
1944 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
1945 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
1947 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1949 dnl Modified MPLS controller action.
1950 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1951 dnl both of these in the final flow
1952 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1955 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)'
1957 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1958 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1960 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1961 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1962 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
1963 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1964 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1965 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1966 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1967 00000040 00 00 00 00
1969 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1970 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
1971 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1972 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1973 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1974 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1975 00000040 00 00 00 00
1977 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1978 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
1979 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1980 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1981 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1982 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1983 00000040 00 00 00 00
1986 dnl Modified MPLS controller action.
1987 dnl In this test, the input packet in vlan-tagged, which should be stripped
1988 dnl before we push the MPLS and VLAN tags.
1989 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1992 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))'
1994 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1995 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1997 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1998 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1999 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
2000 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2001 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2002 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2003 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2005 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2006 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
2007 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2008 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2009 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2010 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2012 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2013 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
2014 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2015 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2016 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2017 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2020 dnl Modified MPLS controller action.
2021 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2022 dnl both of these in the final flow
2023 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2026 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)'
2028 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2029 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2031 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2032 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2033 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
2034 00000000 52 54 00 00 00 07 40 44-44 44 54 52 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
2038 00000040 00 00 00 00
2040 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2041 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2042 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2043 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2044 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2045 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2046 00000040 00 00 00 00
2048 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2049 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2050 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2051 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2052 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2053 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2054 00000040 00 00 00 00
2057 dnl Modified MPLS controller action.
2058 dnl In this test, the input packet in vlan-tagged, which should be stripped
2059 dnl before we push the MPLS and VLAN tags.
2060 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2063 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))'
2065 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2066 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2068 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2069 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2070 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
2071 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2072 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2073 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2074 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2076 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2077 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
2078 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2079 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2080 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2081 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2083 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2084 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
2085 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2086 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2087 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2088 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2091 dnl Modified MPLS controller action.
2092 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2093 dnl actions are reordered, so we see both of these in the final flow.
2094 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2097 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)'
2099 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2100 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2102 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2103 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2104 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
2105 00000000 50 54 00 00 00 07 40 44-44 44 54 54 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
2109 00000040 00 00 00 00
2111 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2112 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2113 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2114 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2115 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2116 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2117 00000040 00 00 00 00
2119 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2120 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2121 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2122 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2123 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2124 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2125 00000040 00 00 00 00
2128 dnl Modified MPLS controller action.
2129 dnl In this test, the input packet in vlan-tagged, which should be stripped
2130 dnl before we push the MPLS and VLAN tags.
2131 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2134 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))'
2136 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2137 ovs-appctl -t ovs-ofctl exit
2139 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2140 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2141 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
2142 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2143 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2144 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2145 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2147 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2148 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
2149 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2150 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2151 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2152 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2154 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2155 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
2156 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2157 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2158 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2159 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2162 dnl Modified MPLS controller action.
2163 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2164 dnl actions are reordered, so we see both of these in the final flow.
2165 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2168 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)'
2170 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2171 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2173 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2174 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2175 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
2176 00000000 50 54 00 00 00 07 40 44-44 44 54 56 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
2180 00000040 00 00 00 00
2182 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2183 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2184 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2185 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2186 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2187 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2188 00000040 00 00 00 00
2190 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2191 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2192 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2193 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2194 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2195 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2196 00000040 00 00 00 00
2199 dnl Modified MPLS controller action.
2200 dnl In this test, the input packet in vlan-tagged, which should be stripped
2201 dnl before we push the MPLS and VLAN tags.
2202 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2205 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))'
2207 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2208 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2210 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2211 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2212 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
2213 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2214 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2215 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2216 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2218 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2219 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
2220 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2221 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2222 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2223 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2225 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2226 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
2227 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2228 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2229 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2230 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2233 dnl Modified MPLS controller action.
2234 dnl In this test, the input packet in vlan-tagged, which should be stripped
2235 dnl before we push the MPLS and VLAN tags.
2236 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2239 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))'
2241 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2242 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2244 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
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:58,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 58 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
2252 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2253 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
2254 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2255 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2256 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2257 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2259 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2260 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
2261 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2262 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2263 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2264 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2267 dnl Modified MPLS controller action.
2268 dnl In this test, the input packet in vlan-tagged, which should be modified
2269 dnl before we push MPLS and VLAN tags.
2270 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2273 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))'
2275 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2276 ovs-appctl -t ovs-ofctl exit
2278 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
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:59,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 59 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
2286 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2287 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
2288 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2289 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2290 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2291 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2293 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2294 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
2295 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2296 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2297 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2298 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2301 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2302 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2303 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
2304 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
2305 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
2306 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
2307 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
2308 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
2309 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
2310 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
2311 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
2312 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
2313 OFPST_FLOW reply (OF1.2):
2319 AT_SETUP([ofproto-dpif - fragment handling])
2321 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2322 AT_DATA([flows.txt], [dnl
2323 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2324 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2325 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2326 priority=50 tcp ip_frag=no actions=output:4
2327 priority=50 tcp ip_frag=first actions=output:5
2328 priority=50 tcp ip_frag=later actions=output:6
2330 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2332 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"
2333 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2334 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2335 later_flow="$base_flow,frag=later)"
2337 # mode no first later
2340 'drop 1 drop drop' \
2349 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2350 for type in no first later; do
2351 eval flow=\$${type}_flow exp_output=\$$type
2352 printf "\n%s\n" "----$mode $type-----"
2353 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2355 if test $mode = drop && test $type != no; then
2356 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2358 echo "Datapath actions: $exp_output" >> expout
2359 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2365 AT_SETUP([ofproto-dpif - exit])
2367 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2368 AT_DATA([flows.txt], [dnl
2369 in_port=1 actions=output:10,exit,output:11
2370 in_port=2 actions=output:12,resubmit:1,output:12
2371 in_port=3 actions=output:13,resubmit:2,output:14
2373 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2374 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])
2375 AT_CHECK([tail -1 stdout], [0],
2376 [Datapath actions: 10
2378 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])
2379 AT_CHECK([tail -1 stdout], [0],
2380 [Datapath actions: 12,10
2382 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])
2383 AT_CHECK([tail -1 stdout], [0],
2384 [Datapath actions: 13,12,10
2390 AT_SETUP([ofproto-dpif - mirroring, select_all])
2392 ADD_OF_PORTS([br0], 1, 2, 3)
2394 set Bridge br0 mirrors=@m --\
2395 --id=@p3 get Port p3 --\
2396 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2398 AT_DATA([flows.txt], [dnl
2399 in_port=1 actions=output:2
2400 in_port=2 actions=output:1
2402 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2404 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)"
2405 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2406 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2407 [Datapath actions: 2,3
2410 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)"
2411 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2412 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2413 [Datapath actions: 1,3
2420 AT_SETUP([ofproto-dpif - mirroring, select_src])
2422 ADD_OF_PORTS([br0], 1, 2, 3)
2424 set Bridge br0 mirrors=@m --\
2425 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2426 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2428 AT_DATA([flows.txt], [dnl
2429 in_port=1 actions=output:2
2430 in_port=2 actions=output:1
2432 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2434 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)"
2435 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2436 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2437 [Datapath actions: 2,3
2440 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)"
2441 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2442 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2443 [Datapath actions: 1
2448 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2450 ADD_OF_PORTS([br0], 1, 2)
2452 set Bridge br0 mirrors=@m --\
2453 --id=@p2 get Port p2 --\
2454 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2456 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2458 # "in_port" defaults to OFPP_NONE if it's not specified.
2459 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"
2460 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2461 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2462 [Datapath actions: 1,2
2469 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2471 ADD_OF_PORTS([br0], 1, 2, 3)
2473 set Bridge br0 mirrors=@m --\
2474 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2475 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2477 AT_DATA([flows.txt], [dnl
2478 in_port=1 actions=output:2
2479 in_port=2 actions=output:1
2481 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2483 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
2484 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2485 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2486 [Datapath actions: 2,3
2489 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
2490 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2491 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2492 [Datapath actions: 1
2499 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2501 ADD_OF_PORTS([br0], 1, 2, 3)
2503 set Bridge br0 mirrors=@m --\
2504 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2505 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2507 AT_DATA([flows.txt], [dnl
2508 in_port=1, actions=output:2
2510 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2512 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)"
2513 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2514 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2515 [Datapath actions: 2
2518 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))"
2519 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2520 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2521 [Datapath actions: 2
2524 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))"
2525 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2526 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2527 [Datapath actions: 2,3
2534 AT_SETUP([ofproto-dpif - mirroring, output_port])
2536 ADD_OF_PORTS([br0], 1, 2, 3)
2538 set Bridge br0 mirrors=@m --\
2539 --id=@p3 get Port p3 --\
2540 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2542 AT_DATA([flows.txt], [dnl
2543 in_port=1 actions=mod_vlan_vid:17,output:2
2544 in_port=2 actions=output:1
2546 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2548 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)"
2549 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2550 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2551 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2554 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)"
2555 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2556 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2557 [Datapath actions: 1,3
2563 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2565 ADD_OF_PORTS([br0], 1, 2)
2567 set Bridge br0 mirrors=@m --\
2568 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2570 AT_DATA([flows.txt], [dnl
2571 in_port=1 actions=output:2
2572 in_port=2 actions=mod_vlan_vid:17,output:1
2574 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2576 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)"
2577 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2578 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2580 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2581 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2583 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2585 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)"
2586 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2587 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2589 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2590 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2592 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2597 # Two testcases below are for the ofproto/trace command
2598 # The first one tests all correct syntax:
2599 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2600 # ofproto/trace br_name br_flow [-generate|packet]
2601 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2602 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2603 ADD_OF_PORTS([br0], 1, 2, 3)
2605 AT_DATA([flows.txt], [dnl
2606 in_port=1 actions=output:2
2607 in_port=2 actions=output:1
2609 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2611 odp_flow="in_port(1)"
2613 # Test command: ofproto/trace odp_flow with in_port as a name.
2614 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2615 AT_CHECK([tail -1 stdout], [0], [dnl
2619 odp_flow="in_port(1)"
2620 # Test command: ofproto/trace odp_flow
2621 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2622 AT_CHECK([tail -1 stdout], [0], [dnl
2626 # Test command: ofproto/trace dp_name odp_flow
2627 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2628 AT_CHECK([tail -1 stdout], [0], [dnl
2631 # Test commmand: ofproto/trace br_name br_flow
2632 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2633 AT_CHECK([tail -1 stdout], [0], [dnl
2637 # Delete the inserted flows
2638 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2639 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2641 # This section beflow tests the [-generate] option
2642 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2643 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"
2645 # Test command: ofproto/trace odp_flow
2646 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2647 # Check for no MAC learning entry
2648 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2652 # Test command: ofproto/trace br_name br_flow
2653 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2654 # Check for no MAC learning entry
2655 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2659 # Test command: ofproto/trace odp_flow -generate
2660 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2661 # Check for the MAC learning entry
2662 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2664 3 0 50:54:00:00:00:05 ?
2667 # Test command: ofproto/trace dp_name odp_flow -generate
2668 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2669 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2670 -generate], [0], [stdout])
2671 # Check for both MAC learning entries
2672 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2674 3 0 50:54:00:00:00:05 ?
2675 1 0 50:54:00:00:00:06 ?
2678 # Test command: ofproto/trace br_name br_flow -generate
2679 AT_CHECK([ovs-appctl ofproto/trace br0 \
2680 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2681 -generate], [0], [stdout])
2682 # Check for both MAC learning entries.
2683 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2685 3 0 50:54:00:00:00:05 ?
2686 1 0 50:54:00:00:00:06 ?
2687 2 0 50:54:00:00:00:07 ?
2690 # This section beflow tests the [packet] option
2691 # The ovs-tcpundump of packets between port1 and port2
2692 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2693 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2695 # Construct the MAC learning table
2696 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2697 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2698 -generate], [0], [stdout])
2700 # Construct the MAC learning table
2701 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2702 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2703 -generate], [0], [stdout])
2705 # Test command: ofproto/trace odp_flow packet
2706 AT_CHECK([ovs-appctl ofproto/trace \
2707 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2708 AT_CHECK([tail -1 stdout], [0], [dnl
2711 AT_CHECK([head -n 2 stdout], [0], [dnl
2713 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
2716 # Test command: ofproto/trace dp_name odp_flow packet
2717 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2718 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2719 AT_CHECK([tail -1 stdout], [0], [dnl
2722 AT_CHECK([head -n 2 stdout], [0], [dnl
2724 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
2727 # Test command: ofproto/trace br_name br_flow packet
2728 AT_CHECK([ovs-appctl ofproto/trace br0 \
2729 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2730 AT_CHECK([tail -1 stdout], [0], [dnl
2733 AT_CHECK([head -n 2 stdout], [0], [dnl
2735 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
2741 # The second test tests the corner cases
2742 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2744 ADD_OF_PORTS([br0], 1, 2)
2747 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2748 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2750 generate="-generate"
2751 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2753 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2759 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2761 AT_CHECK([tail -2 stderr], [0], [dnl
2762 Cannot find the datapath
2763 ovs-appctl: ovs-vswitchd: server returned an error
2766 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2772 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2774 AT_CHECK([tail -2 stderr], [0], [dnl
2775 Cannot find the datapath
2776 ovs-appctl: ovs-vswitchd: server returned an error
2779 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2785 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2787 AT_CHECK([tail -2 stderr], [0], [dnl
2788 Cannot find the datapath
2789 ovs-appctl: ovs-vswitchd: server returned an error
2792 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2798 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2800 AT_CHECK([tail -2 stderr], [0], [dnl
2801 Cannot find the datapath
2802 ovs-appctl: ovs-vswitchd: server returned an error
2805 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2811 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2813 AT_CHECK([tail -2 stderr], [0], [dnl
2815 ovs-appctl: ovs-vswitchd: server returned an error
2818 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2824 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2826 AT_CHECK([tail -2 stderr], [0], [dnl
2827 Must specify bridge name
2828 ovs-appctl: ovs-vswitchd: server returned an error
2831 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2832 AT_CHECK([ovs-appctl ofproto/trace \
2833 ovs-dummy "$odp_flow" garbage_option],
2834 [2], [stdout],[stderr])
2835 AT_CHECK([tail -2 stderr], [0], [dnl
2836 Trailing garbage in packet data
2837 ovs-appctl: ovs-vswitchd: server returned an error
2840 # Test incorrect command: ofproto/trace with 4 arguments
2841 AT_CHECK([ovs-appctl ofproto/trace \
2842 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2843 AT_CHECK([tail -2 stderr], [0], [dnl
2844 "ofproto/trace" command takes at most 3 arguments
2845 ovs-appctl: ovs-vswitchd: server returned an error
2848 # Test incorrect command: ofproto/trace with 0 argument
2849 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2850 AT_CHECK([tail -2 stderr], [0], [dnl
2851 "ofproto/trace" command requires at least 1 arguments
2852 ovs-appctl: ovs-vswitchd: server returned an error
2858 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2860 ADD_OF_PORTS([br0], 1, 2, 3)
2862 AT_DATA([flows.txt], [dnl
2863 in_port=1 actions=output:2
2864 in_port=2 actions=output:1
2866 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2868 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2869 AT_CHECK([tail -1 stdout], [0], [dnl
2870 Datapath actions: push_vlan(vid=123,pcp=0),2
2877 m4_define([OFPROTO_TRACE],
2879 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2880 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2882 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2885 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2888 AT_SETUP([ofproto-dpif - MAC learning])
2889 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2890 ADD_OF_PORTS([br0], 1, 2, 3)
2892 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)'
2894 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2897 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2901 # Check for the MAC learning entry.
2902 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2904 3 0 50:54:00:00:00:05 ?
2907 # Trace a packet arrival destined for the learned MAC.
2908 # (This will also learn a MAC.)
2911 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2915 # Check for both MAC learning entries.
2916 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2918 3 0 50:54:00:00:00:05 ?
2919 1 0 50:54:00:00:00:06 ?
2922 # Trace a packet arrival that updates the first learned MAC entry.
2925 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2929 # Check that the MAC learning entry was updated.
2930 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2932 1 0 50:54:00:00:00:06 ?
2933 2 0 50:54:00:00:00:05 ?
2936 # Add another bridge.
2940 -- set bridge br1 datapath-type=dummy])
2941 ADD_OF_PORTS([br1], 4, 5)
2943 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2946 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2951 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2955 # Check that the MAC learning entries were added.
2956 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2958 4 0 50:54:00:00:00:06 ?
2959 5 0 50:54:00:00:00:07 ?
2962 # Delete port p1 and see that its MAC learning entry disappeared, and
2963 # that the MAC learning entry for the same MAC was also deleted from br1.
2964 AT_CHECK([ovs-vsctl del-port p1])
2965 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2967 2 0 50:54:00:00:00:05 ?
2969 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2971 5 0 50:54:00:00:00:07 ?
2977 AT_SETUP([ofproto-dpif - MAC table overflow])
2979 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2980 ADD_OF_PORTS([br0], 1, 2, 3)
2982 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)'
2984 AT_CHECK([ovs-appctl time/stop])
2986 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2987 for i in 0 1 2 3 4 5 6 7 8 9; do
2990 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2993 ovs-appctl time/warp 1000
2996 # Check for the MAC learning entries.
2997 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2999 3 0 50:54:00:00:00:00
3000 3 0 50:54:00:00:00:01
3001 3 0 50:54:00:00:00:02
3002 3 0 50:54:00:00:00:03
3003 3 0 50:54:00:00:00:04
3004 3 0 50:54:00:00:00:05
3005 3 0 50:54:00:00:00:06
3006 3 0 50:54:00:00:00:07
3007 3 0 50:54:00:00:00:08
3008 3 0 50:54:00:00:00:09
3012 # Trace another ARP packet on another MAC.
3015 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3019 # Check that the new one chased the oldest one out of the table.
3020 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3022 3 0 50:54:00:00:00:01 ?
3023 3 0 50:54:00:00:00:02 ?
3024 3 0 50:54:00:00:00:03 ?
3025 3 0 50:54:00:00:00:04 ?
3026 3 0 50:54:00:00:00:05 ?
3027 3 0 50:54:00:00:00:06 ?
3028 3 0 50:54:00:00:00:07 ?
3029 3 0 50:54:00:00:00:08 ?
3030 3 0 50:54:00:00:00:09 ?
3031 3 0 50:54:00:00:00:10 ?
3037 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3039 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3041 # IP_VERSION_TYPE is used in AT_SETUP
3042 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3043 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3044 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3046 ON_EXIT([kill `cat test-sflow.pid`])
3047 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3048 AT_CAPTURE_FILE([sflow.log])
3049 SFLOW_PORT=`parse_listening_port < test-sflow.log`
3050 ovs-appctl time/stop
3052 ADD_OF_PORTS([br0], 1, 2)
3054 set Interface br0 options:ifindex=1002 -- \
3055 set Interface p1 options:ifindex=1004 -- \
3056 set Interface p2 options:ifindex=1003 -- \
3057 set Bridge br0 sflow=@sf -- \
3058 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3059 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3061 dnl open with ARP packets to seed the bridge-learning. The output
3062 dnl ifIndex numbers should be reported predictably after that.
3063 dnl Since we set sampling=1 we should see all of these packets
3064 dnl reported. Sorting the output by data-source and seqNo makes
3065 dnl it deterministic. Ensuring that we send at least two packets
3066 dnl into each port means we get to check the seq nos are
3067 dnl incrementing correctly.
3068 dnl because packets from different ports can be handled by separate
3069 dnl threads, put some sleeps
3071 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)'
3073 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)'
3075 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)'
3077 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)'
3078 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)'
3080 dnl sleep long enough to get more than one counter sample
3081 dnl from each datasource so we can check sequence numbers
3082 for i in `seq 1 30`; do
3083 ovs-appctl time/warp 100
3086 ovs-appctl -t test-sflow exit
3088 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3109 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
3129 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
3149 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
3169 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
3189 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
3192 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3206 in_broadcasts=4294967295
3209 in_unknownprotos=4294967295
3212 out_multicasts=4294967295
3213 out_broadcasts=4294967295
3229 in_broadcasts=4294967295
3232 in_unknownprotos=4294967295
3235 out_multicasts=4294967295
3236 out_broadcasts=4294967295
3252 in_broadcasts=4294967295
3255 in_unknownprotos=4294967295
3258 out_multicasts=4294967295
3259 out_broadcasts=4294967295
3275 in_broadcasts=4294967295
3278 in_unknownprotos=4294967295
3281 out_multicasts=4294967295
3282 out_broadcasts=4294967295
3298 in_broadcasts=4294967295
3301 in_unknownprotos=4294967295
3304 out_multicasts=4294967295
3305 out_broadcasts=4294967295
3321 in_broadcasts=4294967295
3324 in_unknownprotos=4294967295
3327 out_multicasts=4294967295
3328 out_broadcasts=4294967295
3335 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3336 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3338 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3340 # Test that basic NetFlow reports flow statistics correctly:
3341 # The initial packet of a flow are correctly accounted.
3342 # Later packets within a flow are correctly accounted.
3343 # Flow actions changing (in this case, due to MAC learning)
3344 # cause a record to be sent.
3346 # IP_VERSION_TYPE is used in AT_SETUP
3347 m4_define([CHECK_NETFLOW_EXPIRATION],
3348 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3349 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3350 ADD_OF_PORTS([br0], 1, 2)
3352 ovs-appctl time/stop
3353 ON_EXIT([kill `cat test-netflow.pid`])
3354 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3355 AT_CAPTURE_FILE([netflow.log])
3356 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3359 set Bridge br0 netflow=@nf -- \
3360 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3361 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3363 for delay in 1000 30000; do
3364 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)'
3365 sleep 1 # ensure the order in which these two packets are processed
3366 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)'
3368 ovs-appctl time/warp $delay
3371 ovs-appctl time/warp 6000
3374 ovs-appctl -t test-netflow exit
3376 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])
3378 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])
3380 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3381 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3382 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3386 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3387 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3389 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3391 # Test that basic NetFlow reports active expirations correctly.
3393 # IP_VERSION_TYPE is used in AT_SETUP
3394 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3395 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3397 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3398 ADD_OF_PORTS([br0], 1, 2)
3400 ON_EXIT([kill `cat test-netflow.pid`])
3401 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3402 AT_CAPTURE_FILE([netflow.log])
3403 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3406 set Bridge br0 netflow=@nf -- \
3407 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3408 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3410 AT_CHECK([ovs-appctl time/stop])
3412 while test $n -le 60; do
3415 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)'
3416 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)'
3418 ovs-appctl time/warp 1000
3421 ovs-appctl time/warp 10000
3425 ovs-appctl -t test-netflow exit
3427 # Count the number of reported packets:
3428 # - From source to destination before MAC learning kicks in (just one).
3429 # - From source to destination after that.
3430 # - From destination to source.
3438 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3445 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3448 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3451 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3458 eval $counter=\`expr \$$counter + \$pkts\`
3459 n_recs=`expr $n_recs + 1`
3462 # There should be exactly 1 MAC learning packet,
3463 # exactly 59 other packets in that direction,
3464 # and exactly 60 packets in the other direction.
3465 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3470 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3471 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3473 AT_SETUP([ofproto-dpif - flow stats])
3475 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3476 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3478 ovs-appctl time/stop
3480 for i in `seq 1 10`; do
3481 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)'
3484 ovs-appctl time/warp 1000
3485 sleep 1 # wait for revalidator to update stats
3487 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3488 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3489 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3490 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3495 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3497 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3498 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3500 ovs-appctl time/stop
3502 for i in `seq 1 10`; do
3503 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)'
3506 ovs-appctl time/warp 100
3507 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3508 ovs-appctl time/warp 1000
3510 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3511 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3512 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3513 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3518 AT_SETUP([idle_age and hard_age increase over time])
3521 # get_ages DURATION HARD IDLE
3523 # Fetch the flow duration, hard age, and idle age into the variables
3524 # whose names are given as arguments. Rounds DURATION down to the
3525 # nearest integer. If hard_age doesn't appear in the output, sets
3526 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3529 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3531 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3532 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3533 AS_VAR_COPY([$1], [duration])
3535 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3536 if test X"$hard" = X; then
3539 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3541 AS_VAR_COPY([$2], [hard])
3543 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3544 if test X"$idle" = X; then
3547 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3549 AS_VAR_COPY([$3], [idle])
3552 # Add a flow and get its initial hard and idle age.
3553 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3554 get_ages duration1 hard1 idle1
3556 ovs-appctl time/stop
3557 # Warp time forward by 10 seconds, then modify the flow's actions.
3558 ovs-appctl time/warp 10000
3559 get_ages duration2 hard2 idle2
3560 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3562 # Warp time forward by 10 seconds.
3563 ovs-appctl time/warp 10000
3564 get_ages duration3 hard3 idle3
3566 # Warp time forward 10 more seconds, then pass some packets through the flow,
3567 # then warp forward a few more times because idle times are only updated
3569 ovs-appctl time/warp 10000
3570 ovs-appctl netdev-dummy/receive br0 'in_port(0),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
3571 ovs-appctl time/warp 1000
3572 ovs-appctl time/warp 1000
3573 ovs-appctl time/warp 1000
3575 get_ages duration4 hard4 idle4
3577 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3578 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3579 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3581 # Duration should increase steadily over time.
3582 AT_CHECK([test $duration1 -lt $duration2])
3583 AT_CHECK([test $duration2 -lt $duration3])
3584 AT_CHECK([test $duration3 -lt $duration4])
3586 # Hard age should be "none" initially because it's the same as flow_duration,
3587 # then it should increase.
3588 AT_CHECK([test $hard1 = none])
3589 AT_CHECK([test $hard2 = none])
3590 AT_CHECK([test $hard3 != none])
3591 AT_CHECK([test $hard4 != none])
3592 AT_CHECK([test $hard3 -lt $hard4])
3594 # Idle age should increase from 1 to 2 to 3, then decrease.
3595 AT_CHECK([test $idle1 -lt $idle2])
3596 AT_CHECK([test $idle2 -lt $idle3])
3597 AT_CHECK([test $idle3 -gt $idle4])
3599 # Check some invariant relationships.
3600 AT_CHECK([test $duration1 = $idle1])
3601 AT_CHECK([test $duration2 = $idle2])
3602 AT_CHECK([test $duration3 = $idle3])
3603 AT_CHECK([test $idle3 -gt $hard3])
3604 AT_CHECK([test $idle4 -lt $hard4])
3605 AT_CHECK([test $hard4 -lt $duration4])
3610 AT_SETUP([ofproto-dpif - fin_timeout])
3612 AT_DATA([flows.txt], [dnl
3613 in_port=1 actions=output:2
3614 in_port=2 actions=mod_vlan_vid:17,output:1
3616 ovs-appctl time/stop
3617 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3618 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3620 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3623 # Check that a TCP SYN packet does not change the timeout. (Because
3624 # flow stats updates are mainly what implements the fin_timeout
3625 # feature, we warp forward a couple of times to ensure that flow stats
3626 # run before re-checking the flow table.)
3627 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3628 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3632 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3634 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3636 # Check that a TCP FIN packet does change the timeout.
3637 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3638 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3641 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3643 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3648 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3649 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3650 ADD_OF_PORTS([br0], [1], [2])
3651 ADD_OF_PORTS([br1], [3])
3653 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3660 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3661 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3662 ADD_OF_PORTS([br0], [1], [2])
3663 ADD_OF_PORTS([br1], [3])
3665 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3666 dummy@ovs-dummy: hit:0 missed:0
3668 br0 65534/100: (dummy)
3672 br1 65534/101: (dummy)
3678 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3679 OVS_VSWITCHD_START([add-br br1 -- \
3680 set bridge br1 datapath-type=dummy fail-mode=secure])
3681 ADD_OF_PORTS([br0], [1], [2])
3682 ADD_OF_PORTS([br1], [3])
3684 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)'])
3685 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)'])
3686 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)'])
3688 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3689 skb_priority(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
3690 skb_priority(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
3693 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3694 skb_priority(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
3697 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3698 skb_priority(0),skb_mark(0/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
3699 skb_priority(0),skb_mark(0/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
3702 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3703 skb_priority(0),skb_mark(0/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
3709 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
3710 OVS_VSWITCHD_START([dnl
3711 add-port br0 p1 -- set Interface p1 type=dummy
3713 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3714 ON_EXIT([kill `cat ovs-ofctl.pid`])
3716 AT_CAPTURE_FILE([ofctl_monitor.log])
3717 AT_DATA([flows.txt], [dnl
3718 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3719 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3721 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3723 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3724 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3726 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3727 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)
3728 dnl (label 20, exp 0, [S], ttl 32)
3729 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3730 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3732 for dl_src in 00 01; do
3733 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"])
3735 sleep 1 # wait for the datapath flow installed
3736 for dl_src in 00 01; do
3737 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3738 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))
3746 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
3747 OVS_VSWITCHD_START([dnl
3748 add-port br0 p1 -- set Interface p1 type=dummy
3750 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3751 ON_EXIT([kill `cat ovs-ofctl.pid`])
3753 AT_CAPTURE_FILE([ofctl_monitor.log])
3754 AT_DATA([flows.txt], [dnl
3755 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3756 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3758 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3760 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3761 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3762 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3764 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3765 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)
3766 dnl (label 20, exp 0, ttl 32)
3767 dnl (label 20, exp 0, ttl 32)
3768 dnl (label 20, exp 0, [S], ttl 32)
3769 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3770 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3772 for dl_src in 00 01; do
3773 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"])
3775 sleep 1 # wait for the datapath flow installed
3776 for dl_src in 00 01; do
3777 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3778 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))
3785 AT_SETUP([ofproto-dpif - patch ports])
3786 OVS_VSWITCHD_START([add-br br1 \
3787 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3788 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3789 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3791 ADD_OF_PORTS([br0], [2])
3792 ADD_OF_PORTS([br1], [3])
3794 AT_CHECK([ovs-appctl time/stop])
3795 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3797 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3798 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3800 for i in $(seq 1 10); do
3801 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)'
3802 if [[ $i -eq 1 ]]; then
3807 for i in $(seq 1 5); do
3808 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)'
3809 if [[ $i -eq 1 ]]; then
3814 AT_CHECK([ovs-appctl time/warp 500], [0],
3818 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3819 dummy@ovs-dummy: hit:13 missed:2
3821 br0 65534/100: (dummy)
3823 pbr0 1/none: (patch: peer=pbr1)
3825 br1 65534/101: (dummy)
3827 pbr1 1/none: (patch: peer=pbr0)
3830 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3831 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
3832 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
3835 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3836 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), packets:9, bytes:540, used:0.0s
3838 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3839 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), packets:4, bytes:240, used:0.0s
3842 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3843 OFPST_PORT reply (xid=0x4): 1 ports
3844 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3845 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3848 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3849 OFPST_PORT reply (xid=0x4): 1 ports
3850 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3851 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3857 AT_SETUP([ofproto-dpif - port duration])
3858 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3859 ADD_OF_PORTS([br0], 1, 2)
3861 ovs-appctl time/stop
3862 ovs-appctl time/warp 10000
3864 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3865 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3874 dnl ----------------------------------------------------------------------
3875 AT_BANNER([ofproto-dpif -- megaflows])
3877 AT_SETUP([ofproto-dpif megaflow - port classification])
3879 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3880 ADD_OF_PORTS([br0], [1], [2])
3881 AT_DATA([flows.txt], [dnl
3882 table=0 in_port=1 actions=output(2)
3884 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3885 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)'])
3886 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)'])
3888 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3889 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>
3894 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3896 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3897 ADD_OF_PORTS([br0], [1], [2])
3898 AT_DATA([flows.txt], [dnl
3899 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3901 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3902 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)'])
3903 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)'])
3905 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3906 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>
3907 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>
3912 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3914 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3915 ADD_OF_PORTS([br0], [1], [2])
3916 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], [])
3917 AT_DATA([flows.txt], [dnl
3918 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3920 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3921 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)'])
3922 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)'])
3924 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3925 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>
3926 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>
3931 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3933 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3934 ADD_OF_PORTS([br0], [1], [2])
3935 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], [])
3936 AT_DATA([flows.txt], [dnl
3937 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3939 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3940 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)'])
3941 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)'])
3943 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3944 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>
3945 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>
3950 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3952 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3953 ADD_OF_PORTS([br0], [1], [2])
3954 AT_DATA([flows.txt], [dnl
3955 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3957 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3958 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)'])
3959 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)'])
3960 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3961 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>
3966 AT_SETUP([ofproto-dpif megaflow - normal])
3968 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3969 ADD_OF_PORTS([br0], [1], [2])
3970 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3971 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)'])
3972 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)'])
3974 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3975 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>
3976 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>
3981 AT_SETUP([ofproto-dpif megaflow - mpls])
3983 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3984 ADD_OF_PORTS([br0], [1], [2])
3985 AT_DATA([flows.txt], [dnl
3986 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3987 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3989 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3990 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)'])
3991 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)'])
3993 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3994 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>
3995 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>
4000 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4002 # IP_VERSION_TYPE is used in AT_SETUP
4003 m4_define([CHECK_MEGAFLOW_NETFLOW],
4004 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4006 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4007 ADD_OF_PORTS([br0], [1], [2])
4009 dnl NetFlow configuration disables wildcarding relevant fields
4010 ON_EXIT([kill `cat test-netflow.pid`])
4011 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4012 AT_CAPTURE_FILE([netflow.log])
4013 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4015 set Bridge br0 netflow=@nf -- \
4016 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4017 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4019 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4020 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)'])
4021 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)'])
4023 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4024 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>
4025 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>
4030 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4031 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4033 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4035 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4036 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4037 set interface p2 type=dummy ofport_request=2 -- \
4038 set interface p3 type=dummy ofport_request=3])
4039 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4041 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4043 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4044 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4045 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4047 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4048 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4049 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4054 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4056 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4057 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4058 set interface p2 type=dummy ofport_request=2 -- \
4059 set interface p3 type=dummy ofport_request=3])
4060 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4062 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4064 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4065 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)'])
4066 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)'])
4068 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4069 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>
4070 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>
4075 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4076 # Create bond0 on br0 with interfaces p0 and p1
4077 # and bond1 on br1 with interfaces p2 and p3
4078 # with p0 patched to p2 and p1 patched to p3.
4080 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4081 other-config:lacp-time=fast \
4082 other-config:bond-rebalance-interval=0 -- \
4083 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4084 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4086 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4087 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4088 fail-mode=secure -- \
4089 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4090 other-config:lacp-time=fast \
4091 other-config:bond-rebalance-interval=0 -- \
4092 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4093 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4095 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4097 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4098 ADD_OF_PORTS([br0], [7])
4099 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4100 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4101 ovs-appctl time/stop
4102 ovs-appctl time/warp 5000
4103 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)'])
4104 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)'])
4106 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4107 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>
4108 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>
4113 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4115 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4116 ADD_OF_PORTS([br0], [1], [2])
4117 AT_DATA([flows.txt], [dnl
4118 table=0 in_port=1,ip actions=resubmit(90)
4119 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4121 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4122 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4123 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4125 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4126 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/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>
4127 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>
4132 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4134 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4135 ADD_OF_PORTS([br0], [1], [2])
4136 AT_DATA([flows.txt], [dnl
4137 table=0 in_port=1,ip actions=resubmit(,1)
4138 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4140 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4141 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(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)'])
4142 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=
4143 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4145 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4146 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>
4147 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>
4152 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4154 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4155 ADD_OF_PORTS([br0], [1], [2])
4156 AT_DATA([flows.txt], [dnl
4157 table=0 in_port=1,ip actions=goto_table(1)
4158 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4160 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4161 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)'])
4162 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)'])
4164 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4165 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>
4166 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>
4171 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4173 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4174 ADD_OF_PORTS([br0], [1], [2], [3])
4176 set Bridge br0 mirrors=@m --\
4177 --id=@p3 get Port p3 --\
4178 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4180 AT_DATA([flows.txt], [dnl
4181 in_port=1 actions=output:2
4183 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4184 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)'])
4185 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)'])
4187 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4188 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>
4193 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4195 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4196 ADD_OF_PORTS([br0], [1], [2], [3])
4198 set Bridge br0 mirrors=@m --\
4199 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4200 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4202 AT_DATA([flows.txt], [dnl
4203 in_port=1 actions=output:2
4205 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4206 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))'])
4207 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)'])
4209 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4210 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>
4211 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>
4216 AT_SETUP([ofproto-dpif megaflow - move action])
4218 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4219 ADD_OF_PORTS([br0], [1], [2])
4220 AT_DATA([flows.txt], [dnl
4221 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4222 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4223 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4225 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4226 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)'])
4227 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)'])
4229 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4230 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>
4231 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>
4236 AT_SETUP([ofproto-dpif megaflow - push action])
4238 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4239 ADD_OF_PORTS([br0], [1], [2])
4240 AT_DATA([flows.txt], [dnl
4241 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4243 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4244 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)'])
4245 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)'])
4247 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4248 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>
4249 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>
4254 AT_SETUP([ofproto-dpif megaflow - learning])
4256 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4257 ADD_OF_PORTS([br0], [1], [2])
4258 AT_DATA([flows.txt], [dnl
4259 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
4261 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4262 ovs-appctl time/stop
4263 # We send each packet twice because the first packet in each flow causes the
4264 # flow table to change and thus revalidations, which (depending on timing)
4265 # can keep a megaflow from being installed. The revalidations are done by
4266 # the second iteration, allowing the flows to be installed.
4268 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)'])
4269 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)'])
4270 ovs-appctl time/warp 100
4273 dnl The original flow is missing due to a revalidation.
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/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>
4276 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>
4281 AT_SETUP([ofproto-dpif megaflow - tunnels])
4283 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4284 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4285 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4286 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4287 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4289 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4290 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4291 ofport_request=4 options:key=flow])
4292 AT_DATA([flows.txt], [dnl
4293 in_port=1,actions=output(2)
4294 in_port=3,actions=output(4)
4296 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4297 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4298 dnl will cause the packet to be dropped.
4299 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)'])
4300 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)'])
4301 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)'])
4302 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)'])
4304 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4305 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>
4306 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>
4307 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>
4312 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4314 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4315 ADD_OF_PORTS([br0], [1], [2])
4316 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], [])
4317 AT_DATA([flows.txt], [dnl
4318 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4320 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4321 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)'])
4322 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)'])
4324 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4325 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>
4326 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>
4331 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4333 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4334 ADD_OF_PORTS([br0], [1], [2])
4335 AT_DATA([flows.txt], [dnl
4336 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4338 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4339 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)'])
4340 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)'])
4342 dnl The megaflows do not match the same fields, since the first packet
4343 dnl is essentially a no-op. (The new destination MAC is the same as the
4344 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4345 dnl so that a packet that doesn't need its MAC address changed doesn't
4346 dnl hide one that does. Since the first entry doesn't need to change,
4347 dnl only the destination MAC address is matched (as decided by
4348 dnl ofproto-dpif). The second entry actually updates the destination
4349 dnl MAC, so both the source and destination MAC addresses are
4350 dnl un-wildcarded, since the ODP commit functions update both the source
4351 dnl and destination MAC addresses.
4352 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4353 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
4354 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
4359 AT_SETUP([ofproto-dpif megaflow - disabled])
4361 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4362 ADD_OF_PORTS([br0], [1], [2])
4363 AT_DATA([flows.txt], [dnl
4364 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4365 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4367 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4369 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4370 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4371 for i in 1 2 3 4; do
4372 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)'])
4373 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)'])
4376 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4377 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
4378 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
4380 AT_CHECK([cat ovs-vswitchd.log | grep '00:09.*packets:3' | FILTER_FLOW_DUMP], [0], [dnl
4381 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), packets:3, bytes:180, used:0.0s
4383 AT_CHECK([cat ovs-vswitchd.log | grep '00:0b.*packets:3' | FILTER_FLOW_DUMP], [0], [dnl
4384 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), packets:3, bytes:180, used:0.0s
4389 AT_SETUP([ofproto-dpif - datapath port number change])
4390 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4391 ADD_OF_PORTS([br0], 1)
4393 # Trace a flow that should output to p1.
4394 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4396 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4399 # Change p1's port number to 5.
4400 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4402 # Trace a flow that should output to p1 in its new location.
4403 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4405 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4410 # Tests the bundling with various bfd and cfm configurations.
4411 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4412 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4413 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4414 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4415 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4416 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4417 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4418 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4419 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4420 set Interface p0 cfm_mpid=1 -- \
4421 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4423 ovs-appctl time/stop
4424 # advance the clock to stablize everything.
4425 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4426 # cfm/show should show 'recv' fault.
4427 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4430 # bfd/show should show 'up'.
4431 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4432 Local Session State: up
4433 Remote Session State: up
4434 Local Session State: up
4435 Remote Session State: up
4437 # bond/show should show 'may-enable: true' for all slaves.
4438 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4445 # now disable the bfd on p1.
4446 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4447 # advance the clock to stablize everything.
4448 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4449 # cfm/show should show 'recv' fault.
4450 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4453 # bfd/show should show 'down'.
4454 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4455 Local Session State: down
4456 Remote Session State: down
4458 # bond/show should show 'may-enable: false' for p0.
4459 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4464 # now enable the bfd on p1 and disable bfd on p0.
4465 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4466 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4467 # advance the clock to stablize everything.
4468 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4469 # cfm/show should show 'recv' fault.
4470 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4473 # bfd/show should show 'down'.
4474 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4475 Local Session State: down
4476 Remote Session State: down
4478 # bond/show should show 'may-enable: false' for p0 and p1.
4479 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4489 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4490 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4493 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4495 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4496 monitor thread created
4498 # disable bfd on p0.
4499 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4501 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4502 monitor thread terminated
4504 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4507 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4509 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4510 monitor thread created
4512 # disable cfm on p0.
4513 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4515 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4516 monitor thread terminated
4518 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4520 # enable both bfd and cfm on p0.
4521 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4523 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4524 monitor thread created
4526 # disable bfd on p0.
4527 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4528 # check log, there should not be the log of thread terminated.
4529 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4531 # reenable bfd on p0.
4532 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4533 # check log, should still be on log of thread created.
4534 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4535 monitor thread created
4537 # disable bfd and cfm together.
4538 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4540 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4541 monitor thread terminated
4547 # this test helps avoid the deadlock between the main thread and monitor thread.
4548 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4551 for i in `seq 1 199`
4553 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])
4559 AT_BANNER([ofproto-dpif - flow translation resource limits])
4561 AT_SETUP([ofproto-dpif - infinite resubmit])
4563 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4564 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4566 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4568 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4571 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4574 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4576 ADD_OF_PORTS([br0], 1)
4577 (for i in `seq 1 64`; do
4579 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4581 echo "in_port=65, actions=local") > flows
4582 AT_CHECK([ovs-ofctl add-flows br0 flows])
4583 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4584 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4586 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4589 AT_SETUP([ofproto-dpif - too many output actions])
4591 ADD_OF_PORTS([br0], 1)
4592 (for i in `seq 1 12`; do
4594 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4596 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4597 AT_CHECK([ovs-ofctl add-flows br0 flows])
4598 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4599 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4602 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4604 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4607 AT_SETUP([ofproto-dpif - stack too deep])
4609 ADD_OF_PORTS([br0], 1)
4610 (for i in `seq 1 12`; do
4612 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4614 push="push:NXM_NX_REG0[[]]"
4615 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4616 AT_CHECK([ovs-ofctl add-flows br0 flows])
4617 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4618 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4620 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])