1 AT_BANNER([ofproto-dpif])
3 # Strips out uninteresting parts of flow output, as well as parts
4 # that vary from one run to another (e.g., timing and bond actions).
5 m4_define([STRIP_USED], [[sed '
6 s/used:[0-9]*\.[0-9]*/used:0.0/
8 m4_define([STRIP_XOUT], [[sed '
9 s/used:[0-9]*\.[0-9]*/used:0.0/
10 s/actions:.*/actions: <del>/
11 s/packets:[0-9]*/packets:0/
12 s/bytes:[0-9]*/bytes:0/
14 m4_define([FILTER_FLOW_INSTALL], [[
16 s/.*put\[create\]\[modify\] //
18 m4_define([FILTER_FLOW_DUMP], [[
19 grep 'flow_dump ' | sed '
21 s/used:[0-9]*\.[0-9]*/used:0.0/
24 AT_SETUP([ofproto-dpif - dummy interface])
25 # Create br0 with interfaces p1 and p7
26 # and br1 with interfaces p2 and p8
27 # with p1 and p2 connected via unix domain socket
29 [add-port br0 p1 -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
30 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
32 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
33 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
35 add-port br1 p2 -- set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
36 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
37 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
39 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
40 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
42 ovs-appctl time/warp 5000
43 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
44 AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
45 ovs-appctl time/warp 100
46 sleep 1 # wait for forwarders process packets
48 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
49 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
50 skb_priority(0),skb_mark(0/0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
51 skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
52 skb_priority(0),skb_mark(0/0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
57 AT_SETUP([ofproto-dpif, active-backup bonding])
58 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
59 # and br1 with interfaces p3, p4 and p8.
60 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
62 [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
63 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
64 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
65 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
67 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
68 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
70 add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
71 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
72 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
73 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
75 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
76 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
77 ovs-appctl netdev-dummy/set-admin-state up
78 ovs-appctl time/warp 100
79 ovs-appctl netdev-dummy/set-admin-state p2 down
81 ovs-appctl time/warp 100
82 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
83 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
84 ovs-appctl time/warp 100
85 ovs-appctl netdev-dummy/set-admin-state p2 up
86 ovs-appctl netdev-dummy/set-admin-state p1 down
87 ovs-appctl time/warp 100
88 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
89 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
90 ovs-appctl time/warp 100
91 ovs-appctl time/warp 100
93 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port([[348]])' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
94 skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
95 skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
96 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
97 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
98 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:09/00:00:00:00:00:00,tha=50:54:00:00:00:09/00:00:00:00:00:00), actions: <del>
99 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:0b/00:00:00:00:00:00,tha=50:54:00:00:00:0b/00:00:00:00:00:00), actions: <del>
104 AT_SETUP([ofproto-dpif, balance-slb bonding])
105 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
106 # and br1 with interfaces p4, p5, p6 and p8.
107 # p1 <-> p4, p2 <-> p5, p3 <-> p6
108 # Send some traffic, make sure the traffic are spread based on source mac.
110 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
111 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
112 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
113 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
114 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
116 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
117 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
118 fail-mode=secure -- \
119 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
120 add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
121 add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
122 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
124 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
125 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
126 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
128 ovs-appctl netdev-dummy/set-admin-state up
130 ovs-appctl time/warp 100
132 for i in `seq 0 100 |xargs printf '%02x\n'`;
134 pkt="in_port(7),eth(src=50:54:00:00:00:$i,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)"
135 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
138 ovs-appctl time/warp 100
139 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
140 # Make sure there is resonable distribution to all three ports.
141 # We don't want to make this check precise, in case hash function changes.
142 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
143 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
144 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
148 AT_SETUP([ofproto-dpif, balance-tcp bonding])
149 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
150 # and br1 with interfaces bond1(p4, p5, p6) and p8.
152 # Send some traffic, make sure the traffic are spread based on L4 headers.
154 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
155 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
156 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
157 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
158 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
159 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
161 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
162 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
163 fail-mode=secure -- \
164 add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
165 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
166 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
167 set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
168 set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
169 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
170 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
172 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
173 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
174 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
178 ovs-appctl time/warp 100
179 ovs-appctl lacp/show > lacp.txt
180 ovs-appctl bond/show > bond.txt
182 for i in `seq 0 255` ;
184 pkt="in_port(7),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=$i),tcp_flags(0x010)"
185 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
188 ovs-appctl time/warp 100
189 ovs-appctl time/warp 100
190 ovs-appctl time/warp 100
191 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
192 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
193 # Make sure there is resonable distribution to all three ports.
194 # We don't want to make this check precise, in case hash function changes.
195 AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 24])
196 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24])
197 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24])
201 AT_SETUP([ofproto-dpif - resubmit])
203 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
204 [16], [17], [18], [19], [20], [21])
205 AT_DATA([flows.txt], [dnl
206 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
207 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
208 table=0 in_port=3 priority=2000 icmp actions=output(20)
209 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
210 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
211 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
213 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
214 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
215 AT_CHECK([tail -1 stdout], [0],
216 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
221 AT_SETUP([ofproto-dpif - goto table])
223 ADD_OF_PORTS([br0], [1], [10], [11])
224 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
225 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
226 echo "table=64 actions=output(11)" >> flows.txt
227 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
228 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
229 AT_CHECK([tail -1 stdout], [0],
230 [Datapath actions: 10,11
235 AT_SETUP([ofproto-dpif - write actions])
237 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
238 AT_DATA([flows.txt], [dnl
239 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
240 table=1 ip actions=write_actions(output(13)),goto_table(2)
241 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
243 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
244 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
245 AT_CHECK([tail -2 stdout], [0],
246 [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
247 Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11,set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),13
252 AT_SETUP([ofproto-dpif - clear actions])
254 ADD_OF_PORTS([br0], [1], [10], [11], [12])
255 AT_DATA([flows.txt], [dnl
256 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
257 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
259 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
260 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=9'], [0], [stdout])
261 AT_CHECK([tail -2 stdout], [0],
262 [Megaflow: recirc_id=0,skb_priority=0,tcp,in_port=1,nw_frag=no,tp_src=8,tp_dst=9
263 Datapath actions: 10,set(tcp(src=91,dst=9)),11
268 AT_SETUP([ofproto-dpif - group chaining not supported])
270 ADD_OF_PORTS([br0], [1], [10], [11])
271 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,group:123,bucket=output:11'],
273 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
274 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
279 AT_SETUP([ofproto-dpif - all group in action list])
281 ADD_OF_PORTS([br0], [1], [10], [11])
282 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
283 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
284 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
285 AT_CHECK([tail -2 stdout], [0],
286 [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
287 Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
292 AT_SETUP([ofproto-dpif - indirect group in action list])
294 ADD_OF_PORTS([br0], [1], [10])
295 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
296 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
297 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
298 AT_CHECK([tail -1 stdout], [0],
299 [Datapath actions: 10
304 AT_SETUP([ofproto-dpif - all group in action set])
306 ADD_OF_PORTS([br0], [1], [10], [11])
307 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
308 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
309 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
310 AT_CHECK([tail -2 stdout], [0],
311 [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
312 Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
317 AT_SETUP([ofproto-dpif - indirect group in action set])
319 ADD_OF_PORTS([br0], [1], [10])
320 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
321 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
322 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
323 AT_CHECK([tail -1 stdout], [0],
324 [Datapath actions: 10
329 AT_SETUP([ofproto-dpif - select group])
331 ADD_OF_PORTS([br0], [1], [10], [11])
332 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
333 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
335 # Try a bunch of different flows and make sure that they get distributed
337 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
338 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:0$d,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0"], [0], [stdout])
339 tail -1 stdout >> results
341 sort results | uniq -c
342 AT_CHECK([sort results | uniq], [0],
343 [Datapath actions: 10
349 AT_SETUP([ofproto-dpif - select group with watch port])
351 ADD_OF_PORTS([br0], [1], [10], [11])
352 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
353 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
354 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
355 AT_CHECK([tail -1 stdout], [0],
356 [Datapath actions: 11
361 AT_SETUP([ofproto-dpif - select group with weight])
363 ADD_OF_PORTS([br0], [1], [10], [11], [12])
364 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2000,bucket=output:12,weight=0'])
365 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
366 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
367 AT_CHECK([tail -1 stdout], [0],
368 [Datapath actions: 11
373 AT_SETUP([ofproto-dpif - fast failover group])
375 ADD_OF_PORTS([br0], [1], [10], [11])
376 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=ff,bucket=watch_port:10,output:10,bucket=watch_port:11,output:11'])
377 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
378 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
379 AT_CHECK([tail -1 stdout], [0],
380 [Datapath actions: drop
385 AT_SETUP([ofproto-dpif - registers])
387 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
388 AT_DATA([flows.txt], [dnl
389 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
390 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
391 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
392 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
394 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
395 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
396 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
397 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
398 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
399 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
400 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
401 in_port=9,reg0=0xdeadbeef actions=output:20
402 in_port=10,reg1=0xdeadbeef actions=output:21
403 in_port=11,reg2=0xeef22dea actions=output:22
405 dnl Sanilty check all registers
406 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
407 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
408 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
409 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
412 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
413 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
414 AT_CHECK([tail -1 stdout], [0],
415 [Datapath actions: 20,21,22,33
420 AT_SETUP([ofproto-dpif - push-pop])
422 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
423 AT_DATA([flows.txt], [dnl
424 in_port=90 actions=load:20->NXM_NX_REG0[[0..7]],load:21->NXM_NX_REG1[[0..7]],load:22->NXM_NX_REG2[[0..7]], load:33->NXM_NX_REG3[[0..7]], push:NXM_NX_REG0[[]], push:NXM_NX_REG1[[0..7]],push:NXM_NX_REG2[[0..15]], push:NXM_NX_REG3[[]], resubmit:2, resubmit:3, resubmit:4, resubmit:5
425 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
426 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
427 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
428 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
431 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
432 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
433 AT_CHECK([tail -1 stdout], [0],
434 [Datapath actions: 33,22,21,20
439 AT_SETUP([ofproto-dpif - output])
441 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
442 AT_DATA([flows.txt], [dnl
443 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
444 in_port=2 actions=output:9
445 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
446 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
447 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
448 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
449 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
450 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
452 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
453 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
454 AT_CHECK([tail -1 stdout], [0],
455 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
460 AT_SETUP([ofproto-dpif - dec_ttl])
462 ADD_OF_PORTS([br0], [1], [2], [3], [4])
463 AT_DATA([flows.txt], [dnl
464 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
465 table=1 in_port=1 action=dec_ttl,output:3
467 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
468 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
469 AT_CHECK([tail -4 stdout], [0],
470 [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=2
471 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
472 This flow is handled by the userspace slow path because it:
473 - Sends "packet-in" messages to the OpenFlow controller.
475 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=3,frag=no)'], [0], [stdout])
476 AT_CHECK([tail -2 stdout], [0],
477 [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=3
478 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),3,4
480 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
481 AT_CHECK([tail -2 stdout], [0],
482 [Megaflow: recirc_id=0,skb_priority=0,ipv6,in_port=1,ipv6_src=::1,ipv6_dst=::2,ipv6_label=0x00000,nw_proto=10,nw_tos=112,nw_ecn=0,nw_ttl=128
483 Datapath actions: set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=127,frag=no)),2,set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=126,frag=no)),3,4
486 AT_CAPTURE_FILE([ofctl_monitor.log])
487 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
488 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
489 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
490 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
491 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
492 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
497 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
498 dnl buffer to be resized just before pushing the id of the dec_ttl action.
499 dnl Thus the implementation must account for this by using the
500 dnl reallocated buffer rather than the original buffer.
502 dnl A number of similar rules are added to try and exercise
503 dnl xrealloc sufficiently that it returns a different base pointer
504 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
506 ADD_OF_PORTS([br0], [1])
507 (for i in `seq 0 255`; do
508 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
510 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
514 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
515 dnl buffer to be resized just before pushing the id of the dec_ttl action.
516 dnl Thus the implementation must account for this by using the
517 dnl reallocated buffer rather than the original buffer.
519 dnl A number of similar rules are added to try and exercise
520 dnl xrealloc sufficiently that it returns a different base pointer
521 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
523 ADD_OF_PORTS([br0], [1])
524 (for i in `seq 0 255`; do
525 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
527 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
531 dnl A note action at offset 24 in ofpacts will cause the ofpacts
532 dnl buffer to be resized just before pushing the id of the dec_ttl action.
533 dnl Thus the implementation must account for this by using the
534 dnl reallocated buffer rather than the original buffer.
536 dnl A number of similar rules are added to try and exercise
537 dnl xrealloc sufficiently that it returns a different base pointer
538 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
540 ADD_OF_PORTS([br0], [1])
541 (for i in `seq 0 255`; do
542 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
544 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
548 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
550 ADD_OF_PORTS([br0], [1], [2])
552 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
554 # "in_port" defaults to OFPP_NONE if it's not specified.
555 flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,icmp_type=8,icmp_code=0"
556 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
557 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
566 AT_SETUP([ofproto-dpif - DSCP])
567 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
568 ADD_OF_PORTS([br0], [9])
569 AT_DATA([flows.txt], [dnl
570 actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
572 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
573 AT_CHECK([ovs-vsctl -- \
574 set Port p1 qos=@newqos --\
575 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
576 --id=@q1 create Queue dscp=1 --\
577 --id=@q2 create Queue dscp=2], [0], [ignore])
578 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
579 AT_CHECK([tail -2 stdout], [0],
580 [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=9,nw_src=1.1.1.1,nw_dst=2.2.2.2,nw_tos=252,nw_ecn=3,nw_ttl=128
581 Datapath actions: dnl
583 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
584 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(skb_priority(0x2)),1,dnl
586 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
587 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(skb_priority(0)),1,dnl
588 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
594 AT_SETUP([ofproto-dpif - output/flood flags])
596 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
598 AT_DATA([flows.txt], [dnl
599 in_port=local actions=local,flood
600 in_port=1 actions=flood
601 in_port=2 actions=all
602 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
603 in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
605 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
606 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
607 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
609 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
610 AT_CHECK([tail -1 stdout \
611 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
619 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
620 AT_CHECK([tail -1 stdout \
621 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
629 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
630 AT_CHECK([tail -1 stdout \
631 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
640 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
641 AT_CHECK([tail -1 stdout], [0],
642 [Datapath actions: 100,1,2,4,6,7
645 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
646 AT_CHECK([tail -1 stdout], [0],
647 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
652 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
653 OVS_VSWITCHD_START([dnl
654 add-port br0 p1 -- set Interface p1 type=dummy
656 ON_EXIT([kill `cat ovs-ofctl.pid`])
658 AT_CAPTURE_FILE([ofctl_monitor.log])
660 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
663 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
665 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
666 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
667 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
668 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
669 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
671 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
672 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
674 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
675 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
678 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
679 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
686 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
687 OVS_VSWITCHD_START([dnl
688 add-port br0 p1 -- set Interface p1 type=dummy
690 ON_EXIT([kill `cat ovs-ofctl.pid`])
692 AT_CAPTURE_FILE([ofctl_monitor.log])
693 AT_CHECK([ovs-ofctl del-flows br0])
695 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
697 dnl Test that missed packets are droped
699 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
701 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
703 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
706 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
707 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
708 OFPST_FLOW reply (OF1.3):
714 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
715 OVS_VSWITCHD_START([dnl
716 add-port br0 p1 -- set Interface p1 type=dummy
718 ON_EXIT([kill `cat ovs-ofctl.pid`])
720 AT_CAPTURE_FILE([ofctl_monitor.log])
721 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
723 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
726 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
728 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
729 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
730 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
731 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
732 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
734 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
735 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
737 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
738 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
741 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
742 sleep 1 # wait for revalidator to update stats
743 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
744 n_packets=3, n_bytes=180, actions=goto_table:1
745 OFPST_FLOW reply (OF1.2):
751 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
752 OVS_VSWITCHD_START([dnl
753 add-port br0 p1 -- set Interface p1 type=dummy
755 ON_EXIT([kill `cat ovs-ofctl.pid`])
757 AT_CAPTURE_FILE([ofctl_monitor.log])
758 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
760 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
763 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
766 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
767 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
770 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
771 sleep 1 # wait for revalidator to update stats
772 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
773 n_packets=3, n_bytes=180, actions=resubmit(1,1)
774 OFPST_FLOW reply (OF1.2):
780 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
781 OVS_VSWITCHD_START([dnl
782 add-port br0 p1 -- set Interface p1 type=dummy
784 ON_EXIT([kill `cat ovs-ofctl.pid`])
786 AT_CAPTURE_FILE([ofctl_monitor.log])
787 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
788 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
790 dnl Miss table 0, Hit table 1
791 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
794 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
796 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
797 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
799 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
800 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
801 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
803 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
804 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
806 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
807 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
810 dnl Hit table 0, Miss all other tables, sent to controller
811 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
814 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
816 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
817 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
819 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
820 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
821 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
823 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
824 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
826 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
827 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
830 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
831 sleep 1 # wait for revalidator to update stats
832 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
833 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
834 OFPST_FLOW reply (OF1.2):
840 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
841 OVS_VSWITCHD_START([dnl
842 add-port br0 p1 -- set Interface p1 type=dummy
844 ON_EXIT([kill `cat ovs-ofctl.pid`])
846 AT_CAPTURE_FILE([ofctl_monitor.log])
847 AT_DATA([flows.txt], [dnl
848 table=0 actions=goto_table(1)
849 table=2 dl_src=10:11:11:11:11:11 actions=controller
851 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
852 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
854 dnl Hit table 0, Miss table 1, Hit table 2
855 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
858 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
860 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
861 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
863 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
864 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
865 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
867 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
868 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
870 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
871 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
874 dnl Hit table 1, Miss all other tables, sent to controller
875 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
878 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
880 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
881 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
883 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
884 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
885 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
887 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
888 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
890 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
891 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
894 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
895 sleep 1 # wait for revalidator to update stats
896 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
897 n_packets=6, n_bytes=360, actions=goto_table:1
898 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
899 OFPST_FLOW reply (OF1.2):
905 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
906 OVS_VSWITCHD_START([dnl
907 add-port br0 p1 -- set Interface p1 type=dummy
909 ON_EXIT([kill `cat ovs-ofctl.pid`])
911 AT_CAPTURE_FILE([ofctl_monitor.log])
912 AT_DATA([flows.txt], [dnl
913 table=0 actions=resubmit(1,1)
914 table=2 dl_src=10:11:11:11:11:11 actions=controller
916 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
917 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
919 dnl Hit table 0, Miss table 1, Dropped
920 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
923 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
925 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
927 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
930 dnl Hit table 1, Dropped
931 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
934 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
936 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
938 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
941 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
942 sleep 1 # wait for revalidator to update stats
943 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
944 n_packets=6, n_bytes=360, actions=resubmit(1,1)
945 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
946 OFPST_FLOW reply (OF1.2):
952 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
953 OVS_VSWITCHD_START([dnl
954 add-port br0 p1 -- set Interface p1 type=dummy
956 ON_EXIT([kill `cat ovs-ofctl.pid`])
958 AT_CAPTURE_FILE([ofctl_monitor.log])
959 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
961 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
963 dnl Test that missed packets are droped
965 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
967 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
969 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
972 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
973 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
980 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
981 OVS_VSWITCHD_START([dnl
982 add-port br0 p1 -- set Interface p1 type=dummy
984 ON_EXIT([kill `cat ovs-ofctl.pid`])
986 AT_CAPTURE_FILE([ofctl_monitor.log])
987 AT_CHECK([ovs-ofctl del-flows br0])
988 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
989 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
991 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
993 dnl Test that missed packets are droped
995 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
997 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
999 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1002 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1003 sleep 1 # wait for revalidator to update stats
1004 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1005 n_packets=3, n_bytes=180, actions=goto_table:1
1006 OFPST_FLOW reply (OF1.2):
1012 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1013 OVS_VSWITCHD_START([dnl
1014 add-port br0 p1 -- set Interface p1 type=dummy
1016 ON_EXIT([kill `cat ovs-ofctl.pid`])
1018 AT_CAPTURE_FILE([ofctl_monitor.log])
1019 AT_CHECK([ovs-ofctl del-flows br0])
1020 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1021 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1023 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1025 dnl Test that missed packets are droped
1027 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1029 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1031 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1034 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1035 sleep 1 # wait for revalidator to update stats
1036 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1037 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1038 OFPST_FLOW reply (OF1.2):
1044 AT_SETUP([ofproto-dpif - controller])
1045 OVS_VSWITCHD_START([dnl
1046 add-port br0 p1 -- set Interface p1 type=dummy
1048 ON_EXIT([kill `cat ovs-ofctl.pid`])
1050 AT_CAPTURE_FILE([ofctl_monitor.log])
1051 AT_DATA([flows.txt], [dnl
1052 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1053 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1054 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1056 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1057 cookie=0x4 table=2 in_port=81 actions=load:2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,controller,resubmit(82,3)
1058 cookie=0x5 table=3 in_port=82 actions=load:3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,controller,resubmit(83,4)
1059 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1060 cookie=0x7 table=5 in_port=84 actions=load:5->NXM_NX_REG4[[]],load:6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,controller,resubmit(85,6)
1061 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1062 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1063 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1064 cookie=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
1065 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
1066 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
1067 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
1068 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
1069 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
1070 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
1071 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
1072 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1073 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1074 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
1075 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
1077 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1080 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1083 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)'
1085 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1086 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1088 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1089 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1090 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
1092 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1093 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
1095 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1096 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
1099 dnl Singleton controller action.
1100 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1103 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)'
1105 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1106 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1108 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1109 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1110 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
1112 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1113 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
1115 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1116 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
1119 dnl Modified controller action.
1120 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1123 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)'
1125 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1126 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1128 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1129 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1130 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
1132 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1133 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
1135 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1136 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
1139 dnl Modified VLAN controller action.
1140 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1143 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)'
1145 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1146 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1148 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1149 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1150 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
1152 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1153 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
1155 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1156 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
1159 dnl Modified MPLS controller action.
1160 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1163 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)'
1165 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1166 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1168 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1169 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1170 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
1172 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1173 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
1175 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1176 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
1179 dnl Modified MPLS controller action.
1180 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1183 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)'
1185 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1186 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1188 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1189 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1190 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
1192 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1193 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
1195 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1196 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
1199 dnl Modified MPLS controller action.
1200 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1202 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)
1205 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)'
1207 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1208 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1210 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1211 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1212 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
1214 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1215 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
1217 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1218 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
1221 dnl Modified MPLS controller action.
1222 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1225 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))'
1227 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1228 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1230 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1231 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1232 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
1234 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1235 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
1237 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1238 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
1241 dnl Modified MPLS controller action.
1242 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1245 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)'
1247 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1248 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1250 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1251 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1252 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
1254 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1255 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
1257 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1258 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
1261 dnl Modified MPLS controller action.
1262 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1265 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)'
1267 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1268 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1270 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1271 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1272 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
1274 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1275 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
1277 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1278 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1281 dnl Modified MPLS controller action.
1282 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1285 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)'
1287 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1288 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1290 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1291 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1292 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
1294 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1295 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
1297 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1298 mpls,metadata=0,in_port=0,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
1301 dnl Modified MPLS controller action.
1302 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1305 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)'
1307 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1308 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1310 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1311 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1312 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
1314 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1315 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
1317 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1318 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1321 dnl Modified MPLS actions.
1322 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1325 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)'
1327 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1328 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1330 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1331 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1332 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
1334 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1335 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
1337 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1338 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
1341 dnl Modified MPLS ipv6 controller action.
1342 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1345 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)'
1347 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1348 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1350 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1351 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1352 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
1354 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1355 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
1357 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1358 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
1362 dnl Modified MPLS pop action.
1363 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1364 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)
1365 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1367 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1370 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'
1373 # 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)'
1375 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1376 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1378 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1379 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1380 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
1382 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1383 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
1385 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1386 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
1390 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1393 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)'
1395 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1396 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1398 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1399 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1400 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
1402 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1403 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
1405 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)
1406 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
1408 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)
1409 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
1411 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)
1412 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
1414 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)
1415 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
1417 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)
1418 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
1420 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)
1421 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
1423 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)
1424 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
1428 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1431 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'
1433 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1434 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1436 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1437 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1438 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
1440 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1441 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
1443 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)
1444 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
1446 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)
1447 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
1449 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)
1450 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
1452 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)
1453 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
1455 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)
1456 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
1458 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)
1459 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
1461 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)
1462 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
1465 dnl Modified ARP controller action.
1466 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1469 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)'
1472 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1473 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1474 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1475 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1476 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
1477 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1478 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
1479 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1480 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
1481 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1482 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
1483 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1484 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
1485 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1486 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
1487 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1488 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
1489 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1490 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
1491 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1492 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
1495 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1498 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1501 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'
1504 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1505 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1506 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1507 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1508 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
1510 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1511 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
1513 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)
1514 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
1516 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)
1517 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
1519 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)
1520 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
1522 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)
1523 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
1525 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)
1526 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
1528 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)
1529 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
1531 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)
1532 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
1535 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1536 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1537 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1538 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)
1539 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)
1540 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)
1541 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)
1542 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)
1543 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1544 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1545 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
1546 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
1547 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
1548 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
1549 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
1550 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
1551 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
1552 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
1553 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
1554 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
1555 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
1556 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
1557 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1558 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1566 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1567 OVS_VSWITCHD_START([dnl
1568 add-port br0 p1 -- set Interface p1 type=dummy
1570 ON_EXIT([kill `cat ovs-ofctl.pid`])
1572 AT_CAPTURE_FILE([ofctl_monitor.log])
1573 # A table-miss flow has priority 0 and no match
1574 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1576 dnl Singleton controller action.
1577 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1580 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)'
1582 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1583 ovs-appctl -t ovs-ofctl exit
1585 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1586 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1587 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
1589 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1590 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
1592 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1593 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
1596 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1598 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1599 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1607 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1608 OVS_VSWITCHD_START([dnl
1609 add-port br0 p1 -- set Interface p1 type=dummy
1611 ON_EXIT([kill `cat ovs-ofctl.pid`])
1613 AT_CAPTURE_FILE([ofctl_monitor.log])
1614 # A table-miss flow has priority 0 and no match
1615 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1617 dnl Singleton controller action.
1618 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1621 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)'
1623 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1624 ovs-appctl -t ovs-ofctl exit
1626 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1628 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1629 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1630 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
1632 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1633 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
1635 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1636 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
1639 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1641 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1642 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1643 OFPST_FLOW reply (OF1.3):
1649 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1651 ADD_OF_PORTS([br0], [1], [2])
1653 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1654 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'
1656 # Input some packets that should follow the arp modification slow-path.
1658 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)'
1660 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1662 # Check the packets that were output.
1663 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
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.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
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=00:00:00:00:00:00
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.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
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.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
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=00:00:00:00:00:00
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.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
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.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
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=00:00:00:00:00:00
1672 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
1678 AT_SETUP([ofproto-dpif - VLAN handling])
1680 [set Bridge br0 fail-mode=standalone -- \
1681 add-port br0 p1 trunks=10,12 -- \
1682 add-port br0 p2 tag=10 -- \
1683 add-port br0 p3 tag=12 \
1684 other-config:priority-tags=true -- \
1685 add-port br0 p4 tag=12 -- \
1686 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1687 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1688 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1689 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1690 other-config:priority-tags=true -- \
1691 set Interface p1 type=dummy -- \
1692 set Interface p2 type=dummy -- \
1693 set Interface p3 type=dummy -- \
1694 set Interface p4 type=dummy -- \
1695 set Interface p5 type=dummy -- \
1696 set Interface p6 type=dummy -- \
1697 set Interface p7 type=dummy -- \
1698 set Interface p8 type=dummy --])
1700 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1701 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1707 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1708 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1711 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1712 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1716 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1717 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1720 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1721 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1722 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1723 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1724 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1731 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1732 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1733 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1740 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1741 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1742 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1749 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1750 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1751 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1752 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1753 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1756 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1757 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1758 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1759 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1760 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1761 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1762 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1765 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1766 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1767 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1768 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1769 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1770 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1771 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1774 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1775 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1776 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1777 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1778 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1779 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1780 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1783 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1784 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1792 if test $vlan = none; then
1793 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1795 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))"
1798 echo "----------------------------------------------------------------------"
1799 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1801 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1802 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1804 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1806 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1812 AT_SETUP([ofproto-dpif - MPLS handling])
1813 OVS_VSWITCHD_START([dnl
1814 add-port br0 p1 -- set Interface p1 type=dummy
1816 ON_EXIT([kill `cat ovs-ofctl.pid`])
1818 AT_CAPTURE_FILE([ofctl_monitor.log])
1819 AT_DATA([flows.txt], [dnl
1820 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1821 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1822 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1824 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1826 dnl In this test, we push an MPLS tag to an ethernet packet.
1827 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1830 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)'
1832 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1833 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1835 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1836 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1837 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
1838 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1839 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1840 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1841 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1843 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1844 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
1845 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1846 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1847 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1848 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1850 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1851 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
1852 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1853 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1854 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1855 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1858 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1859 dnl copied exactly, except for the BOS bit.
1860 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1863 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)'
1865 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1866 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1868 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1869 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1870 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1871 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1872 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1873 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1874 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1876 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1877 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
1878 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1879 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1880 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1881 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1883 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1884 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
1885 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1886 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1887 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1888 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1891 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1892 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1893 dnl to the MPLS ethertype of the MPLS push action which differs to that
1894 dnl of the input packet.
1895 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1898 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)'
1900 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1901 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1903 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1904 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1905 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
1906 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1907 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1908 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1909 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1911 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1912 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
1913 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1914 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1915 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1916 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1918 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1919 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
1920 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1921 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1922 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1923 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1929 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1930 OVS_VSWITCHD_START([dnl
1931 add-port br0 p1 -- set Interface p1 type=dummy
1933 ON_EXIT([kill `cat ovs-ofctl.pid`])
1935 AT_CAPTURE_FILE([ofctl_monitor.log])
1936 AT_DATA([flows.txt], [dnl
1937 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
1938 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
1939 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
1940 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
1941 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
1942 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
1943 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
1944 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
1945 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
1946 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
1948 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1950 dnl Modified MPLS controller action.
1951 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1952 dnl both of these in the final flow
1953 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1956 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)'
1958 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1959 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1961 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1962 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1963 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
1964 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1965 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1966 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1967 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1968 00000040 00 00 00 00
1970 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1971 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
1972 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1973 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1974 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1975 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1976 00000040 00 00 00 00
1978 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1979 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
1980 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1981 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1982 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1983 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1984 00000040 00 00 00 00
1987 dnl Modified MPLS controller action.
1988 dnl In this test, the input packet in vlan-tagged, which should be stripped
1989 dnl before we push the MPLS and VLAN tags.
1990 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1993 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))'
1995 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1996 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1998 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1999 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2000 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
2001 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2002 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2003 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2004 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2006 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2007 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
2008 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2009 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2010 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2011 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2013 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2014 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
2015 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2016 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2017 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2018 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2021 dnl Modified MPLS controller action.
2022 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2023 dnl both of these in the final flow
2024 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2027 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)'
2029 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2030 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2032 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2033 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2034 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
2035 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2036 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2037 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2038 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2039 00000040 00 00 00 00
2041 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2042 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
2043 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2044 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2045 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2046 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2047 00000040 00 00 00 00
2049 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2050 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
2051 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2052 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2053 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2054 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2055 00000040 00 00 00 00
2058 dnl Modified MPLS controller action.
2059 dnl In this test, the input packet in vlan-tagged, which should be stripped
2060 dnl before we push the MPLS and VLAN tags.
2061 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2064 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))'
2066 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2067 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2069 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2070 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2071 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
2072 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2073 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2074 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2075 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2077 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2078 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2079 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2080 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2081 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2082 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2084 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2085 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2086 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2087 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2088 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2089 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2092 dnl Modified MPLS controller action.
2093 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2094 dnl actions are reordered, so we see both of these in the final flow.
2095 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2098 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)'
2100 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2101 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2103 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2104 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2105 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
2106 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2107 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2108 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2109 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2110 00000040 00 00 00 00
2112 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2113 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
2114 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2115 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2116 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2117 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2118 00000040 00 00 00 00
2120 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2121 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
2122 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2123 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2124 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2125 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2126 00000040 00 00 00 00
2129 dnl Modified MPLS controller action.
2130 dnl In this test, the input packet in vlan-tagged, which should be stripped
2131 dnl before we push the MPLS and VLAN tags.
2132 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2135 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))'
2137 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2138 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2140 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2141 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2142 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
2143 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2144 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2145 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2146 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2148 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2149 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2150 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2151 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2152 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2153 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2155 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2156 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2157 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2158 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2159 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2160 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2163 dnl Modified MPLS controller action.
2164 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2165 dnl actions are reordered, so we see both of these in the final flow.
2166 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2169 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)'
2171 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2172 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2174 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2175 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2176 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
2177 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2178 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2179 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2180 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2181 00000040 00 00 00 00
2183 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2184 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
2185 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2186 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2187 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2188 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2189 00000040 00 00 00 00
2191 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2192 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
2193 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2194 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2195 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2196 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2197 00000040 00 00 00 00
2200 dnl Modified MPLS controller action.
2201 dnl In this test, the input packet in vlan-tagged, which should be stripped
2202 dnl before we push the MPLS and VLAN tags.
2203 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2206 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))'
2208 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2209 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2211 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2212 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2213 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
2214 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2215 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2216 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2217 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2219 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2220 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2221 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2222 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2223 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2224 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2226 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2227 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2228 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2229 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2230 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2231 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2234 dnl Modified MPLS controller action.
2235 dnl In this test, the input packet in vlan-tagged, which should be stripped
2236 dnl before we push the MPLS and VLAN tags.
2237 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2240 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))'
2242 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2243 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2245 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2246 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2247 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
2248 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2249 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2250 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2251 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2253 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2254 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
2255 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2256 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2257 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2258 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2260 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2261 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
2262 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2263 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2264 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2265 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2268 dnl Modified MPLS controller action.
2269 dnl In this test, the input packet in vlan-tagged, which should be modified
2270 dnl before we push MPLS and VLAN tags.
2271 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2274 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))'
2276 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2277 ovs-appctl -t ovs-ofctl exit
2279 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2280 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2281 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
2282 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2283 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2284 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2285 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2287 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2288 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
2289 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2290 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2291 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2292 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2294 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2295 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
2296 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2297 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2298 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2299 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2302 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2303 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2304 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
2305 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
2306 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
2307 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
2308 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
2309 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
2310 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
2311 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
2312 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
2313 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
2314 OFPST_FLOW reply (OF1.2):
2320 AT_SETUP([ofproto-dpif - fragment handling])
2322 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2323 AT_DATA([flows.txt], [dnl
2324 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2325 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2326 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2327 priority=50 tcp ip_frag=no actions=output:4
2328 priority=50 tcp ip_frag=first actions=output:5
2329 priority=50 tcp ip_frag=later actions=output:6
2331 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2333 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"
2334 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2335 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2336 later_flow="$base_flow,frag=later)"
2338 # mode no first later
2341 'drop 1 drop drop' \
2350 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2351 for type in no first later; do
2352 eval flow=\$${type}_flow exp_output=\$$type
2353 printf "\n%s\n" "----$mode $type-----"
2354 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2356 if test $mode = drop && test $type != no; then
2357 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2359 echo "Datapath actions: $exp_output" >> expout
2360 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2366 AT_SETUP([ofproto-dpif - exit])
2368 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2369 AT_DATA([flows.txt], [dnl
2370 in_port=1 actions=output:10,exit,output:11
2371 in_port=2 actions=output:12,resubmit:1,output:12
2372 in_port=3 actions=output:13,resubmit:2,output:14
2374 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2375 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])
2376 AT_CHECK([tail -1 stdout], [0],
2377 [Datapath actions: 10
2379 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])
2380 AT_CHECK([tail -1 stdout], [0],
2381 [Datapath actions: 12,10
2383 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])
2384 AT_CHECK([tail -1 stdout], [0],
2385 [Datapath actions: 13,12,10
2391 AT_SETUP([ofproto-dpif - mirroring, select_all])
2393 ADD_OF_PORTS([br0], 1, 2, 3)
2395 set Bridge br0 mirrors=@m --\
2396 --id=@p3 get Port p3 --\
2397 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2399 AT_DATA([flows.txt], [dnl
2400 in_port=1 actions=output:2
2401 in_port=2 actions=output:1
2403 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2405 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)"
2406 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2407 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2408 [Datapath actions: 2,3
2411 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)"
2412 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2413 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2414 [Datapath actions: 1,3
2421 AT_SETUP([ofproto-dpif - mirroring, select_src])
2423 ADD_OF_PORTS([br0], 1, 2, 3)
2425 set Bridge br0 mirrors=@m --\
2426 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2427 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2429 AT_DATA([flows.txt], [dnl
2430 in_port=1 actions=output:2
2431 in_port=2 actions=output:1
2433 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2435 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)"
2436 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2437 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2438 [Datapath actions: 2,3
2441 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)"
2442 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2443 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2444 [Datapath actions: 1
2449 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2451 ADD_OF_PORTS([br0], 1, 2)
2453 set Bridge br0 mirrors=@m --\
2454 --id=@p2 get Port p2 --\
2455 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2457 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2459 # "in_port" defaults to OFPP_NONE if it's not specified.
2460 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"
2461 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2462 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2463 [Datapath actions: 1,2
2470 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2472 ADD_OF_PORTS([br0], 1, 2, 3)
2474 set Bridge br0 mirrors=@m --\
2475 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2476 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2478 AT_DATA([flows.txt], [dnl
2479 in_port=1 actions=output:2
2480 in_port=2 actions=output:1
2482 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2484 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)"
2485 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2486 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2487 [Datapath actions: 2,3
2490 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)"
2491 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2492 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2493 [Datapath actions: 1
2500 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2502 ADD_OF_PORTS([br0], 1, 2, 3)
2504 set Bridge br0 mirrors=@m --\
2505 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2506 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2508 AT_DATA([flows.txt], [dnl
2509 in_port=1, actions=output:2
2511 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2513 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
2514 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2515 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2516 [Datapath actions: 2
2519 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))"
2520 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2521 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2522 [Datapath actions: 2
2525 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))"
2526 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2527 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2528 [Datapath actions: 2,3
2535 AT_SETUP([ofproto-dpif - mirroring, output_port])
2537 ADD_OF_PORTS([br0], 1, 2, 3)
2539 set Bridge br0 mirrors=@m --\
2540 --id=@p3 get Port p3 --\
2541 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2543 AT_DATA([flows.txt], [dnl
2544 in_port=1 actions=mod_vlan_vid:17,output:2
2545 in_port=2 actions=output:1
2547 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2549 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)"
2550 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2551 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2552 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2555 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)"
2556 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2557 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2558 [Datapath actions: 1,3
2564 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2566 ADD_OF_PORTS([br0], 1, 2)
2568 set Bridge br0 mirrors=@m --\
2569 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2571 AT_DATA([flows.txt], [dnl
2572 in_port=1 actions=output:2
2573 in_port=2 actions=mod_vlan_vid:17,output:1
2575 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2577 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)"
2578 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2579 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2581 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2582 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2584 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2586 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)"
2587 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2588 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2590 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2591 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2593 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2598 # Two testcases below are for the ofproto/trace command
2599 # The first one tests all correct syntax:
2600 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2601 # ofproto/trace br_name br_flow [-generate|packet]
2602 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2603 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2604 ADD_OF_PORTS([br0], 1, 2, 3)
2606 AT_DATA([flows.txt], [dnl
2607 in_port=1 actions=output:2
2608 in_port=2 actions=output:1
2610 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2612 odp_flow="in_port(1)"
2614 # Test command: ofproto/trace odp_flow with in_port as a name.
2615 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2616 AT_CHECK([tail -1 stdout], [0], [dnl
2620 odp_flow="in_port(1)"
2621 # Test command: ofproto/trace odp_flow
2622 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2623 AT_CHECK([tail -1 stdout], [0], [dnl
2627 # Test command: ofproto/trace dp_name odp_flow
2628 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2629 AT_CHECK([tail -1 stdout], [0], [dnl
2632 # Test commmand: ofproto/trace br_name br_flow
2633 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2634 AT_CHECK([tail -1 stdout], [0], [dnl
2638 # Delete the inserted flows
2639 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2640 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2642 # This section beflow tests the [-generate] option
2643 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2644 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"
2646 # Test command: ofproto/trace odp_flow
2647 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2648 # Check for no MAC learning entry
2649 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2653 # Test command: ofproto/trace br_name br_flow
2654 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2655 # Check for no MAC learning entry
2656 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2660 # Test command: ofproto/trace odp_flow -generate
2661 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2662 # Check for the MAC learning entry
2663 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2665 3 0 50:54:00:00:00:05 ?
2668 # Test command: ofproto/trace dp_name odp_flow -generate
2669 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2670 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2671 -generate], [0], [stdout])
2672 # Check for both MAC learning entries
2673 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2675 3 0 50:54:00:00:00:05 ?
2676 1 0 50:54:00:00:00:06 ?
2679 # Test command: ofproto/trace br_name br_flow -generate
2680 AT_CHECK([ovs-appctl ofproto/trace br0 \
2681 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2682 -generate], [0], [stdout])
2683 # Check for both MAC learning entries.
2684 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2686 3 0 50:54:00:00:00:05 ?
2687 1 0 50:54:00:00:00:06 ?
2688 2 0 50:54:00:00:00:07 ?
2691 # This section beflow tests the [packet] option
2692 # The ovs-tcpundump of packets between port1 and port2
2693 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2694 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2696 # Construct the MAC learning table
2697 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2698 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2699 -generate], [0], [stdout])
2701 # Construct the MAC learning table
2702 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2703 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2704 -generate], [0], [stdout])
2706 # Test command: ofproto/trace odp_flow packet
2707 AT_CHECK([ovs-appctl ofproto/trace \
2708 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2709 AT_CHECK([tail -1 stdout], [0], [dnl
2712 AT_CHECK([head -n 2 stdout], [0], [dnl
2714 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
2717 # Test command: ofproto/trace dp_name odp_flow packet
2718 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2719 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2720 AT_CHECK([tail -1 stdout], [0], [dnl
2723 AT_CHECK([head -n 2 stdout], [0], [dnl
2725 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
2728 # Test command: ofproto/trace br_name br_flow packet
2729 AT_CHECK([ovs-appctl ofproto/trace br0 \
2730 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2731 AT_CHECK([tail -1 stdout], [0], [dnl
2734 AT_CHECK([head -n 2 stdout], [0], [dnl
2736 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
2742 # The second test tests the corner cases
2743 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2745 ADD_OF_PORTS([br0], 1, 2)
2748 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2749 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2751 generate="-generate"
2752 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2754 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2760 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2762 AT_CHECK([tail -2 stderr], [0], [dnl
2763 Cannot find the datapath
2764 ovs-appctl: ovs-vswitchd: server returned an error
2767 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2773 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2775 AT_CHECK([tail -2 stderr], [0], [dnl
2776 Cannot find the datapath
2777 ovs-appctl: ovs-vswitchd: server returned an error
2780 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2786 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2788 AT_CHECK([tail -2 stderr], [0], [dnl
2789 Cannot find the datapath
2790 ovs-appctl: ovs-vswitchd: server returned an error
2793 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2799 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2801 AT_CHECK([tail -2 stderr], [0], [dnl
2802 Cannot find the datapath
2803 ovs-appctl: ovs-vswitchd: server returned an error
2806 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2812 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2814 AT_CHECK([tail -2 stderr], [0], [dnl
2816 ovs-appctl: ovs-vswitchd: server returned an error
2819 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2825 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2827 AT_CHECK([tail -2 stderr], [0], [dnl
2828 Must specify bridge name
2829 ovs-appctl: ovs-vswitchd: server returned an error
2832 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2833 AT_CHECK([ovs-appctl ofproto/trace \
2834 ovs-dummy "$odp_flow" garbage_option],
2835 [2], [stdout],[stderr])
2836 AT_CHECK([tail -2 stderr], [0], [dnl
2837 Trailing garbage in packet data
2838 ovs-appctl: ovs-vswitchd: server returned an error
2841 # Test incorrect command: ofproto/trace with 4 arguments
2842 AT_CHECK([ovs-appctl ofproto/trace \
2843 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2844 AT_CHECK([tail -2 stderr], [0], [dnl
2845 "ofproto/trace" command takes at most 3 arguments
2846 ovs-appctl: ovs-vswitchd: server returned an error
2849 # Test incorrect command: ofproto/trace with 0 argument
2850 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2851 AT_CHECK([tail -2 stderr], [0], [dnl
2852 "ofproto/trace" command requires at least 1 arguments
2853 ovs-appctl: ovs-vswitchd: server returned an error
2859 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2861 ADD_OF_PORTS([br0], 1, 2, 3)
2863 AT_DATA([flows.txt], [dnl
2864 in_port=1 actions=output:2
2865 in_port=2 actions=output:1
2867 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2869 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2870 AT_CHECK([tail -1 stdout], [0], [dnl
2871 Datapath actions: push_vlan(vid=123,pcp=0),2
2878 m4_define([OFPROTO_TRACE],
2880 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2881 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2883 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2886 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2889 AT_SETUP([ofproto-dpif - MAC learning])
2890 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2891 ADD_OF_PORTS([br0], 1, 2, 3)
2893 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)'
2895 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2898 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2902 # Check for the MAC learning entry.
2903 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2905 3 0 50:54:00:00:00:05 ?
2908 # Trace a packet arrival destined for the learned MAC.
2909 # (This will also learn a MAC.)
2912 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2916 # Check for both MAC learning entries.
2917 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2919 3 0 50:54:00:00:00:05 ?
2920 1 0 50:54:00:00:00:06 ?
2923 # Trace a packet arrival that updates the first learned MAC entry.
2926 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2930 # Check that the MAC learning entry was updated.
2931 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2933 1 0 50:54:00:00:00:06 ?
2934 2 0 50:54:00:00:00:05 ?
2937 # Add another bridge.
2941 -- set bridge br1 datapath-type=dummy])
2942 ADD_OF_PORTS([br1], 4, 5)
2944 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2947 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2952 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2956 # Check that the MAC learning entries were added.
2957 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2959 4 0 50:54:00:00:00:06 ?
2960 5 0 50:54:00:00:00:07 ?
2963 # Delete port p1 and see that its MAC learning entry disappeared, and
2964 # that the MAC learning entry for the same MAC was also deleted from br1.
2965 AT_CHECK([ovs-vsctl del-port p1])
2966 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2968 2 0 50:54:00:00:00:05 ?
2970 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2972 5 0 50:54:00:00:00:07 ?
2978 AT_SETUP([ofproto-dpif - MAC table overflow])
2980 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2981 ADD_OF_PORTS([br0], 1, 2, 3)
2983 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)'
2985 AT_CHECK([ovs-appctl time/stop])
2987 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2988 for i in 0 1 2 3 4 5 6 7 8 9; do
2991 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2994 ovs-appctl time/warp 1000
2997 # Check for the MAC learning entries.
2998 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3000 3 0 50:54:00:00:00:00
3001 3 0 50:54:00:00:00:01
3002 3 0 50:54:00:00:00:02
3003 3 0 50:54:00:00:00:03
3004 3 0 50:54:00:00:00:04
3005 3 0 50:54:00:00:00:05
3006 3 0 50:54:00:00:00:06
3007 3 0 50:54:00:00:00:07
3008 3 0 50:54:00:00:00:08
3009 3 0 50:54:00:00:00:09
3013 # Trace another ARP packet on another MAC.
3016 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3020 # Check that the new one chased the oldest one out of the table.
3021 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3023 3 0 50:54:00:00:00:01 ?
3024 3 0 50:54:00:00:00:02 ?
3025 3 0 50:54:00:00:00:03 ?
3026 3 0 50:54:00:00:00:04 ?
3027 3 0 50:54:00:00:00:05 ?
3028 3 0 50:54:00:00:00:06 ?
3029 3 0 50:54:00:00:00:07 ?
3030 3 0 50:54:00:00:00:08 ?
3031 3 0 50:54:00:00:00:09 ?
3032 3 0 50:54:00:00:00:10 ?
3038 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3040 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3042 # IP_VERSION_TYPE is used in AT_SETUP
3043 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3044 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3045 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3047 ON_EXIT([kill `cat test-sflow.pid`])
3048 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3049 AT_CAPTURE_FILE([sflow.log])
3050 SFLOW_PORT=`parse_listening_port < test-sflow.log`
3051 ovs-appctl time/stop
3053 ADD_OF_PORTS([br0], 1, 2)
3055 set Interface br0 options:ifindex=1002 -- \
3056 set Interface p1 options:ifindex=1004 -- \
3057 set Interface p2 options:ifindex=1003 -- \
3058 set Bridge br0 sflow=@sf -- \
3059 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3060 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3062 dnl open with ARP packets to seed the bridge-learning. The output
3063 dnl ifIndex numbers should be reported predictably after that.
3064 dnl Since we set sampling=1 we should see all of these packets
3065 dnl reported. Sorting the output by data-source and seqNo makes
3066 dnl it deterministic. Ensuring that we send at least two packets
3067 dnl into each port means we get to check the seq nos are
3068 dnl incrementing correctly.
3069 dnl because packets from different ports can be handled by separate
3070 dnl threads, put some sleeps
3072 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)'
3074 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)'
3076 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)'
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(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)'
3079 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)'
3081 dnl sleep long enough to get more than one counter sample
3082 dnl from each datasource so we can check sequence numbers
3083 for i in `seq 1 30`; do
3084 ovs-appctl time/warp 100
3087 ovs-appctl -t test-sflow exit
3089 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3110 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
3130 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
3150 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
3170 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
3190 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
3193 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3207 in_broadcasts=4294967295
3210 in_unknownprotos=4294967295
3213 out_multicasts=4294967295
3214 out_broadcasts=4294967295
3230 in_broadcasts=4294967295
3233 in_unknownprotos=4294967295
3236 out_multicasts=4294967295
3237 out_broadcasts=4294967295
3253 in_broadcasts=4294967295
3256 in_unknownprotos=4294967295
3259 out_multicasts=4294967295
3260 out_broadcasts=4294967295
3276 in_broadcasts=4294967295
3279 in_unknownprotos=4294967295
3282 out_multicasts=4294967295
3283 out_broadcasts=4294967295
3299 in_broadcasts=4294967295
3302 in_unknownprotos=4294967295
3305 out_multicasts=4294967295
3306 out_broadcasts=4294967295
3322 in_broadcasts=4294967295
3325 in_unknownprotos=4294967295
3328 out_multicasts=4294967295
3329 out_broadcasts=4294967295
3336 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3337 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3339 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3341 # Test that basic NetFlow reports flow statistics correctly:
3342 # The initial packet of a flow are correctly accounted.
3343 # Later packets within a flow are correctly accounted.
3344 # Flow actions changing (in this case, due to MAC learning)
3345 # cause a record to be sent.
3347 # IP_VERSION_TYPE is used in AT_SETUP
3348 m4_define([CHECK_NETFLOW_EXPIRATION],
3349 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3350 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3351 ADD_OF_PORTS([br0], 1, 2)
3353 ovs-appctl time/stop
3354 ON_EXIT([kill `cat test-netflow.pid`])
3355 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3356 AT_CAPTURE_FILE([netflow.log])
3357 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3360 set Bridge br0 netflow=@nf -- \
3361 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3362 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3364 for delay in 1000 30000; do
3365 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)'
3366 sleep 1 # ensure the order in which these two packets are processed
3367 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)'
3369 ovs-appctl time/warp $delay
3372 ovs-appctl time/warp 6000
3375 ovs-appctl -t test-netflow exit
3377 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])
3379 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])
3381 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3382 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3383 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3387 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3388 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3390 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3392 # Test that basic NetFlow reports active expirations correctly.
3394 # IP_VERSION_TYPE is used in AT_SETUP
3395 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3396 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3398 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3399 ADD_OF_PORTS([br0], 1, 2)
3401 ON_EXIT([kill `cat test-netflow.pid`])
3402 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3403 AT_CAPTURE_FILE([netflow.log])
3404 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3407 set Bridge br0 netflow=@nf -- \
3408 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3409 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3411 AT_CHECK([ovs-appctl time/stop])
3413 while test $n -le 60; do
3416 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)'
3417 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)'
3419 ovs-appctl time/warp 1000
3422 ovs-appctl time/warp 10000
3426 ovs-appctl -t test-netflow exit
3428 # Count the number of reported packets:
3429 # - From source to destination before MAC learning kicks in (just one).
3430 # - From source to destination after that.
3431 # - From destination to source.
3439 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3446 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3449 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3452 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3459 eval $counter=\`expr \$$counter + \$pkts\`
3460 n_recs=`expr $n_recs + 1`
3463 # There should be exactly 1 MAC learning packet,
3464 # exactly 59 other packets in that direction,
3465 # and exactly 60 packets in the other direction.
3466 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3471 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3472 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3474 AT_SETUP([ofproto-dpif - flow stats])
3476 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3477 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3479 ovs-appctl time/stop
3481 for i in `seq 1 10`; do
3482 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)'
3485 ovs-appctl time/warp 1000
3486 sleep 1 # wait for revalidator to update stats
3488 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3489 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3490 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3491 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3496 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3498 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3499 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3501 ovs-appctl time/stop
3503 for i in `seq 1 10`; do
3504 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)'
3507 ovs-appctl time/warp 100
3508 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3509 ovs-appctl time/warp 1000
3511 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3512 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3513 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3514 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3519 AT_SETUP([idle_age and hard_age increase over time])
3522 # get_ages DURATION HARD IDLE
3524 # Fetch the flow duration, hard age, and idle age into the variables
3525 # whose names are given as arguments. Rounds DURATION down to the
3526 # nearest integer. If hard_age doesn't appear in the output, sets
3527 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3530 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3532 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3533 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3534 AS_VAR_COPY([$1], [duration])
3536 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3537 if test X"$hard" = X; then
3540 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3542 AS_VAR_COPY([$2], [hard])
3544 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3545 if test X"$idle" = X; then
3548 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3550 AS_VAR_COPY([$3], [idle])
3553 # Add a flow and get its initial hard and idle age.
3554 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3555 get_ages duration1 hard1 idle1
3557 ovs-appctl time/stop
3558 # Warp time forward by 10 seconds, then modify the flow's actions.
3559 ovs-appctl time/warp 10000
3560 get_ages duration2 hard2 idle2
3561 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3563 # Warp time forward by 10 seconds.
3564 ovs-appctl time/warp 10000
3565 get_ages duration3 hard3 idle3
3567 # Warp time forward 10 more seconds, then pass some packets through the flow,
3568 # then warp forward a few more times because idle times are only updated
3570 ovs-appctl time/warp 10000
3571 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)'
3572 ovs-appctl time/warp 1000
3573 ovs-appctl time/warp 1000
3574 ovs-appctl time/warp 1000
3576 get_ages duration4 hard4 idle4
3578 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3579 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3580 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3582 # Duration should increase steadily over time.
3583 AT_CHECK([test $duration1 -lt $duration2])
3584 AT_CHECK([test $duration2 -lt $duration3])
3585 AT_CHECK([test $duration3 -lt $duration4])
3587 # Hard age should be "none" initially because it's the same as flow_duration,
3588 # then it should increase.
3589 AT_CHECK([test $hard1 = none])
3590 AT_CHECK([test $hard2 = none])
3591 AT_CHECK([test $hard3 != none])
3592 AT_CHECK([test $hard4 != none])
3593 AT_CHECK([test $hard3 -lt $hard4])
3595 # Idle age should increase from 1 to 2 to 3, then decrease.
3596 AT_CHECK([test $idle1 -lt $idle2])
3597 AT_CHECK([test $idle2 -lt $idle3])
3598 AT_CHECK([test $idle3 -gt $idle4])
3600 # Check some invariant relationships.
3601 AT_CHECK([test $duration1 = $idle1])
3602 AT_CHECK([test $duration2 = $idle2])
3603 AT_CHECK([test $duration3 = $idle3])
3604 AT_CHECK([test $idle3 -gt $hard3])
3605 AT_CHECK([test $idle4 -lt $hard4])
3606 AT_CHECK([test $hard4 -lt $duration4])
3611 AT_SETUP([ofproto-dpif - fin_timeout])
3613 AT_DATA([flows.txt], [dnl
3614 in_port=1 actions=output:2
3615 in_port=2 actions=mod_vlan_vid:17,output:1
3617 ovs-appctl time/stop
3618 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3619 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3621 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3624 # Check that a TCP SYN packet does not change the timeout. (Because
3625 # flow stats updates are mainly what implements the fin_timeout
3626 # feature, we warp forward a couple of times to ensure that flow stats
3627 # run before re-checking the flow table.)
3628 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3629 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3633 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3635 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3637 # Check that a TCP FIN packet does change the timeout.
3638 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3639 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3642 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3644 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3649 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3650 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3651 ADD_OF_PORTS([br0], [1], [2])
3652 ADD_OF_PORTS([br1], [3])
3654 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3661 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3662 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3663 ADD_OF_PORTS([br0], [1], [2])
3664 ADD_OF_PORTS([br1], [3])
3666 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3667 dummy@ovs-dummy: hit:0 missed:0
3669 br0 65534/100: (dummy)
3673 br1 65534/101: (dummy)
3679 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3680 OVS_VSWITCHD_START([add-br br1 -- \
3681 set bridge br1 datapath-type=dummy fail-mode=secure])
3682 ADD_OF_PORTS([br0], [1], [2])
3683 ADD_OF_PORTS([br1], [3])
3685 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)'])
3686 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)'])
3687 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)'])
3689 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3690 skb_priority(0),recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:drop
3691 skb_priority(0),recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:drop
3694 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3695 skb_priority(0),recirc_id(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:drop
3698 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3699 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3700 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3703 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3704 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3710 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
3711 OVS_VSWITCHD_START([dnl
3712 add-port br0 p1 -- set Interface p1 type=dummy
3714 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3715 ON_EXIT([kill `cat ovs-ofctl.pid`])
3717 AT_CAPTURE_FILE([ofctl_monitor.log])
3718 AT_DATA([flows.txt], [dnl
3719 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3720 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3722 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3724 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3725 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3727 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3728 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)
3729 dnl (label 20, exp 0, [S], ttl 32)
3730 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3731 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3733 for dl_src in 00 01; do
3734 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"])
3736 sleep 1 # wait for the datapath flow installed
3737 for dl_src in 00 01; do
3738 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3739 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))
3747 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
3748 OVS_VSWITCHD_START([dnl
3749 add-port br0 p1 -- set Interface p1 type=dummy
3751 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3752 ON_EXIT([kill `cat ovs-ofctl.pid`])
3754 AT_CAPTURE_FILE([ofctl_monitor.log])
3755 AT_DATA([flows.txt], [dnl
3756 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3757 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3759 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3761 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3762 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3763 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3765 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3766 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)
3767 dnl (label 20, exp 0, ttl 32)
3768 dnl (label 20, exp 0, ttl 32)
3769 dnl (label 20, exp 0, [S], ttl 32)
3770 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3771 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3773 for dl_src in 00 01; do
3774 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"])
3776 sleep 1 # wait for the datapath flow installed
3777 for dl_src in 00 01; do
3778 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3779 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))
3786 AT_SETUP([ofproto-dpif - patch ports])
3787 OVS_VSWITCHD_START([add-br br1 \
3788 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3789 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3790 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3792 ADD_OF_PORTS([br0], [2])
3793 ADD_OF_PORTS([br1], [3])
3795 AT_CHECK([ovs-appctl time/stop])
3796 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3798 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3799 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3801 for i in $(seq 1 10); do
3802 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)'
3803 if [[ $i -eq 1 ]]; then
3808 for i in $(seq 1 5); do
3809 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)'
3810 if [[ $i -eq 1 ]]; then
3815 AT_CHECK([ovs-appctl time/warp 500], [0],
3819 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3820 dummy@ovs-dummy: hit:13 missed:2
3822 br0 65534/100: (dummy)
3824 pbr0 1/none: (patch: peer=pbr1)
3826 br1 65534/101: (dummy)
3828 pbr1 1/none: (patch: peer=pbr0)
3831 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3832 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
3833 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
3836 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3837 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:9, bytes:540, used:0.0s, actions:101,3,2
3839 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3840 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:4, bytes:240, used:0.0s, actions:100,2,3
3843 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3844 OFPST_PORT reply (xid=0x4): 1 ports
3845 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3846 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3849 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3850 OFPST_PORT reply (xid=0x4): 1 ports
3851 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3852 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3858 AT_SETUP([ofproto-dpif - port duration])
3859 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3860 ADD_OF_PORTS([br0], 1, 2)
3862 ovs-appctl time/stop
3863 ovs-appctl time/warp 10000
3865 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3866 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3875 dnl ----------------------------------------------------------------------
3876 AT_BANNER([ofproto-dpif -- megaflows])
3878 AT_SETUP([ofproto-dpif megaflow - port classification])
3880 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3881 ADD_OF_PORTS([br0], [1], [2])
3882 AT_DATA([flows.txt], [dnl
3883 table=0 in_port=1 actions=output(2)
3885 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3886 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)'])
3888 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)'])
3890 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3891 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>
3896 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3898 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3899 ADD_OF_PORTS([br0], [1], [2])
3900 AT_DATA([flows.txt], [dnl
3901 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3903 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3904 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)'])
3905 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)'])
3907 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3908 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>
3909 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>
3914 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3916 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3917 ADD_OF_PORTS([br0], [1], [2])
3918 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], [])
3919 AT_DATA([flows.txt], [dnl
3920 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3922 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3923 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)'])
3924 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)'])
3926 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3927 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>
3928 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>
3933 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3935 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3936 ADD_OF_PORTS([br0], [1], [2])
3937 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], [])
3938 AT_DATA([flows.txt], [dnl
3939 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3941 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3942 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)'])
3943 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)'])
3945 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3946 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>
3947 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>
3952 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3954 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3955 ADD_OF_PORTS([br0], [1], [2])
3956 AT_DATA([flows.txt], [dnl
3957 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3959 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3960 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)'])
3962 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)'])
3964 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3965 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>
3970 AT_SETUP([ofproto-dpif megaflow - normal])
3972 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3973 ADD_OF_PORTS([br0], [1], [2])
3974 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3975 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)'])
3976 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)'])
3978 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3979 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>
3980 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>
3985 AT_SETUP([ofproto-dpif megaflow - mpls])
3987 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3988 ADD_OF_PORTS([br0], [1], [2])
3989 AT_DATA([flows.txt], [dnl
3990 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3991 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3993 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3994 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)'])
3995 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)'])
3997 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3998 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>
3999 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>
4004 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4006 # IP_VERSION_TYPE is used in AT_SETUP
4007 m4_define([CHECK_MEGAFLOW_NETFLOW],
4008 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4010 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4011 ADD_OF_PORTS([br0], [1], [2])
4013 dnl NetFlow configuration disables wildcarding relevant fields
4014 ON_EXIT([kill `cat test-netflow.pid`])
4015 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4016 AT_CAPTURE_FILE([netflow.log])
4017 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4019 set Bridge br0 netflow=@nf -- \
4020 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4021 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4023 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4024 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)'])
4025 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)'])
4027 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4028 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>
4029 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>
4034 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4035 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4037 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4039 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4040 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4041 set interface p2 type=dummy ofport_request=2 -- \
4042 set interface p3 type=dummy ofport_request=3])
4043 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4045 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4047 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4048 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)'])
4049 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)'])
4051 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4052 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>
4053 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>
4058 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4060 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4061 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4062 set interface p2 type=dummy ofport_request=2 -- \
4063 set interface p3 type=dummy ofport_request=3])
4064 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4066 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4068 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4069 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)'])
4070 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)'])
4072 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4073 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>
4074 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>
4079 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4080 # Create bond0 on br0 with interfaces p0 and p1
4081 # and bond1 on br1 with interfaces p2 and p3
4082 # with p0 patched to p2 and p1 patched to p3.
4084 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4085 other-config:lacp-time=fast \
4086 other-config:bond-rebalance-interval=0 -- \
4087 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4088 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4090 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4091 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4092 fail-mode=secure -- \
4093 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4094 other-config:lacp-time=fast \
4095 other-config:bond-rebalance-interval=0 -- \
4096 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4097 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4099 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4101 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4102 ADD_OF_PORTS([br0], [7])
4103 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4104 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4105 ovs-appctl time/stop
4106 ovs-appctl time/warp 5000
4107 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)'])
4108 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)'])
4110 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4111 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>
4112 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>
4117 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4119 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4120 ADD_OF_PORTS([br0], [1], [2])
4121 AT_DATA([flows.txt], [dnl
4122 table=0 in_port=1,ip actions=resubmit(90)
4123 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4125 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4126 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)'])
4127 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)'])
4129 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4130 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>
4131 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>
4136 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4138 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4139 ADD_OF_PORTS([br0], [1], [2])
4140 AT_DATA([flows.txt], [dnl
4141 table=0 in_port=1,ip actions=resubmit(,1)
4142 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4144 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4145 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)'])
4146 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=
4147 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4149 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4150 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>
4151 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>
4156 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4158 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4159 ADD_OF_PORTS([br0], [1], [2])
4160 AT_DATA([flows.txt], [dnl
4161 table=0 in_port=1,ip actions=goto_table(1)
4162 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4164 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4165 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)'])
4166 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)'])
4168 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4169 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>
4170 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>
4175 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4177 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4178 ADD_OF_PORTS([br0], [1], [2], [3])
4180 set Bridge br0 mirrors=@m --\
4181 --id=@p3 get Port p3 --\
4182 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4184 AT_DATA([flows.txt], [dnl
4185 in_port=1 actions=output:2
4187 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4188 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)'])
4190 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)'])
4192 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4193 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>
4198 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4200 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4201 ADD_OF_PORTS([br0], [1], [2], [3])
4203 set Bridge br0 mirrors=@m --\
4204 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4205 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4207 AT_DATA([flows.txt], [dnl
4208 in_port=1 actions=output:2
4210 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4211 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))'])
4212 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4214 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4215 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(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>
4216 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>
4221 AT_SETUP([ofproto-dpif megaflow - move action])
4223 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4224 ADD_OF_PORTS([br0], [1], [2])
4225 AT_DATA([flows.txt], [dnl
4226 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4227 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4228 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4230 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4231 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)'])
4232 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)'])
4234 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4235 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>
4236 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>
4241 AT_SETUP([ofproto-dpif megaflow - push action])
4243 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4244 ADD_OF_PORTS([br0], [1], [2])
4245 AT_DATA([flows.txt], [dnl
4246 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4248 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4249 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)'])
4250 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)'])
4252 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4253 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>
4254 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>
4259 AT_SETUP([ofproto-dpif megaflow - learning])
4261 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4262 ADD_OF_PORTS([br0], [1], [2])
4263 AT_DATA([flows.txt], [dnl
4264 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
4266 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4267 ovs-appctl time/stop
4268 # We send each packet twice because the first packet in each flow causes the
4269 # flow table to change and thus revalidations, which (depending on timing)
4270 # can keep a megaflow from being installed. The revalidations are done by
4271 # the second iteration, allowing the flows to be installed.
4273 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4274 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4275 ovs-appctl time/warp 100
4278 dnl The original flow is missing due to a revalidation.
4279 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4280 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>
4281 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>
4286 AT_SETUP([ofproto-dpif megaflow - tunnels])
4288 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4289 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4290 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4291 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4292 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4294 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4295 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4296 ofport_request=4 options:key=flow])
4297 AT_DATA([flows.txt], [dnl
4298 in_port=1,actions=output(2)
4299 in_port=3,actions=output(4)
4301 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4302 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4303 dnl will cause the packet to be dropped.
4304 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)'])
4306 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)'])
4307 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)'])
4309 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)'])
4311 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4312 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>
4313 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>
4314 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>
4319 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4321 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4322 ADD_OF_PORTS([br0], [1], [2])
4323 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], [])
4324 AT_DATA([flows.txt], [dnl
4325 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4327 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4328 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)'])
4329 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)'])
4331 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4332 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>
4333 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>
4338 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4340 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4341 ADD_OF_PORTS([br0], [1], [2])
4342 AT_DATA([flows.txt], [dnl
4343 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4345 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4346 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4347 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4349 dnl The megaflows do not match the same fields, since the first packet
4350 dnl is essentially a no-op. (The new destination MAC is the same as the
4351 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4352 dnl so that a packet that doesn't need its MAC address changed doesn't
4353 dnl hide one that does. Since the first entry doesn't need to change,
4354 dnl only the destination MAC address is matched (as decided by
4355 dnl ofproto-dpif). The second entry actually updates the destination
4356 dnl MAC, so both the source and destination MAC addresses are
4357 dnl un-wildcarded, since the ODP commit functions update both the source
4358 dnl and destination MAC addresses.
4359 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4360 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
4361 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
4366 AT_SETUP([ofproto-dpif megaflow - disabled])
4368 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4369 ADD_OF_PORTS([br0], [1], [2])
4370 AT_DATA([flows.txt], [dnl
4371 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4372 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4374 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4376 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4377 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4378 for i in 1 2 3 4; do
4379 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)'])
4380 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4381 if [[ $i -eq 1 ]]; then
4386 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4387 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
4388 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
4390 AT_CHECK([cat ovs-vswitchd.log | grep '00:09.*packets:3' | FILTER_FLOW_DUMP], [0], [dnl
4391 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:2
4393 AT_CHECK([cat ovs-vswitchd.log | grep '00:0b.*packets:3' | FILTER_FLOW_DUMP], [0], [dnl
4394 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
4399 AT_SETUP([ofproto-dpif - datapath port number change])
4400 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4401 ADD_OF_PORTS([br0], 1)
4403 # Trace a flow that should output to p1.
4404 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4406 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4409 # Change p1's port number to 5.
4410 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4412 # Trace a flow that should output to p1 in its new location.
4413 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4415 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4420 # Tests the bundling with various bfd and cfm configurations.
4421 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4422 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4423 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4424 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4425 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4426 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4427 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4428 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4429 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4430 set Interface p0 cfm_mpid=1 -- \
4431 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4433 ovs-appctl time/stop
4434 # advance the clock to stablize everything.
4435 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4436 # cfm/show should show 'recv' fault.
4437 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4440 # bfd/show should show 'up'.
4441 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4442 Local Session State: up
4443 Remote Session State: up
4444 Local Session State: up
4445 Remote Session State: up
4447 # bond/show should show 'may-enable: true' for all slaves.
4448 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4455 # now disable the bfd on p1.
4456 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4457 # advance the clock to stablize everything.
4458 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4459 # cfm/show should show 'recv' fault.
4460 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4463 # bfd/show should show 'down'.
4464 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4465 Local Session State: down
4466 Remote Session State: down
4468 # bond/show should show 'may-enable: false' for p0.
4469 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4474 # now enable the bfd on p1 and disable bfd on p0.
4475 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4476 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4477 # advance the clock to stablize everything.
4478 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4479 # cfm/show should show 'recv' fault.
4480 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4483 # bfd/show should show 'down'.
4484 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4485 Local Session State: down
4486 Remote Session State: down
4488 # bond/show should show 'may-enable: false' for p0 and p1.
4489 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4499 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4500 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4503 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4505 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4506 # disable bfd on p0.
4507 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4509 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4510 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4513 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4515 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4516 # disable cfm on p0.
4517 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4519 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4520 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4522 # enable both bfd and cfm on p0.
4523 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4525 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
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[[0-9]]*)|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[[0-9]]*)|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 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4545 # this test helps avoid the deadlock between the main thread and monitor thread.
4546 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4549 for i in `seq 1 199`
4551 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])
4557 AT_BANNER([ofproto-dpif - flow translation resource limits])
4559 AT_SETUP([ofproto-dpif - infinite resubmit])
4561 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4562 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4564 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4566 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4569 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4572 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4574 ADD_OF_PORTS([br0], 1)
4575 (for i in `seq 1 64`; do
4577 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4579 echo "in_port=65, actions=local") > flows
4580 AT_CHECK([ovs-ofctl add-flows br0 flows])
4581 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4582 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4584 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4587 AT_SETUP([ofproto-dpif - too many output actions])
4589 ADD_OF_PORTS([br0], 1)
4590 (for i in `seq 1 12`; do
4592 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4594 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4595 AT_CHECK([ovs-ofctl add-flows br0 flows])
4596 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4597 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4600 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4602 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4605 AT_SETUP([ofproto-dpif - stack too deep])
4607 ADD_OF_PORTS([br0], 1)
4608 (for i in `seq 1 12`; do
4610 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4612 push="push:NXM_NX_REG0[[]]"
4613 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4614 AT_CHECK([ovs-ofctl add-flows br0 flows])
4615 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4616 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4618 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])