1 AT_BANNER([ofproto-dpif])
3 AT_SETUP([ofproto-dpif, active-backup bonding])
4 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
5 # and br1 with interfaces p3, p4 and p8.
6 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
8 [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
9 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
10 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
11 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
13 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
14 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
16 add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
17 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
18 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
20 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
22 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
23 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
24 ovs-appctl netdev-dummy/set-admin-state up
25 ovs-appctl time/warp 100
26 ovs-appctl netdev-dummy/set-admin-state p2 down
28 ovs-appctl time/warp 100
29 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)'])
30 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)'])
31 ovs-appctl time/warp 100
32 ovs-appctl netdev-dummy/set-admin-state p2 up
33 ovs-appctl netdev-dummy/set-admin-state p1 down
34 ovs-appctl time/warp 100
35 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)'])
36 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)'])
37 ovs-appctl time/warp 100
38 ovs-appctl time/warp 100
40 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port([[348]])' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
41 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
42 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
43 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
44 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
45 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
46 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
51 AT_SETUP([ofproto-dpif, balance-slb bonding])
52 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
53 # and br1 with interfaces p4, p5, p6 and p8.
54 # p1 <-> p4, p2 <-> p5, p3 <-> p6
55 # Send some traffic, make sure the traffic are spread based on source mac.
57 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
58 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
59 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
60 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
61 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
63 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
64 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
66 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
67 add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
68 add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
69 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
71 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
72 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
73 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
75 ovs-appctl netdev-dummy/set-admin-state up
77 ovs-appctl time/warp 100
79 for i in `seq 0 100 |xargs printf '%02x\n'`;
81 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)"
82 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
85 ovs-appctl time/warp 100
86 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
87 # Make sure there is resonable distribution to all three ports.
88 # We don't want to make this check precise, in case hash function changes.
89 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
90 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
91 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
95 AT_SETUP([ofproto-dpif, balance-tcp bonding])
96 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
97 # and br1 with interfaces bond1(p4, p5, p6) and p8.
99 # Send some traffic, make sure the traffic are spread based on L4 headers.
101 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
102 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
103 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
104 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
105 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
106 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
108 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
109 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
110 fail-mode=secure -- \
111 add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
112 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
113 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
114 set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
115 set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
116 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
117 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
119 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
120 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
121 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
125 ovs-appctl time/warp 100
126 ovs-appctl lacp/show > lacp.txt
127 ovs-appctl bond/show > bond.txt
129 for i in `seq 0 255` ;
131 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)"
132 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
135 ovs-appctl time/warp 100
136 ovs-appctl time/warp 100
137 ovs-appctl time/warp 100
138 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
139 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > 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 `grep in_port.4 br1_flows.txt |wc -l` -gt 24])
143 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24])
144 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24])
148 AT_SETUP([ofproto-dpif - resubmit])
150 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
151 [16], [17], [18], [19], [20], [21])
152 AT_DATA([flows.txt], [dnl
153 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
154 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
155 table=0 in_port=3 priority=2000 icmp actions=output(20)
156 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
157 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
158 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
160 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
161 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])
162 AT_CHECK([tail -1 stdout], [0],
163 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
168 AT_SETUP([ofproto-dpif - goto table])
170 ADD_OF_PORTS([br0], [1], [10], [11])
171 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
172 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
173 echo "table=64 actions=output(11)" >> flows.txt
174 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
175 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])
176 AT_CHECK([tail -1 stdout], [0],
177 [Datapath actions: 10,11
182 AT_SETUP([ofproto-dpif - write actions])
184 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
185 AT_DATA([flows.txt], [dnl
186 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
187 table=1 ip actions=write_actions(output(13)),goto_table(2)
188 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
190 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
191 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])
192 AT_CHECK([tail -2 stdout], [0],
193 [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
194 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
199 AT_SETUP([ofproto-dpif - clear actions])
201 ADD_OF_PORTS([br0], [1], [10], [11], [12])
202 AT_DATA([flows.txt], [dnl
203 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
204 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
206 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
207 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])
208 AT_CHECK([tail -2 stdout], [0],
209 [Megaflow: recirc_id=0,skb_priority=0,tcp,in_port=1,nw_frag=no,tp_src=8,tp_dst=9
210 Datapath actions: 10,set(tcp(src=91,dst=9)),11
215 AT_SETUP([ofproto-dpif - group chaining not supported])
217 ADD_OF_PORTS([br0], [1], [10], [11])
218 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'],
220 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
221 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
226 AT_SETUP([ofproto-dpif - all group in action list])
228 ADD_OF_PORTS([br0], [1], [10], [11])
229 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'])
230 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
231 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])
232 AT_CHECK([tail -2 stdout], [0],
233 [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
234 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
239 AT_SETUP([ofproto-dpif - indirect group in action list])
241 ADD_OF_PORTS([br0], [1], [10])
242 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
243 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
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 -1 stdout], [0],
246 [Datapath actions: 10
251 AT_SETUP([ofproto-dpif - all group in action set])
253 ADD_OF_PORTS([br0], [1], [10], [11])
254 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'])
255 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
256 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])
257 AT_CHECK([tail -2 stdout], [0],
258 [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
259 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
264 AT_SETUP([ofproto-dpif - indirect group in action set])
266 ADD_OF_PORTS([br0], [1], [10])
267 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
268 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
269 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])
270 AT_CHECK([tail -1 stdout], [0],
271 [Datapath actions: 10
276 AT_SETUP([ofproto-dpif - select group])
278 ADD_OF_PORTS([br0], [1], [10], [11])
279 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
280 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
282 # Try a bunch of different flows and make sure that they get distributed
284 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
285 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])
286 tail -1 stdout >> results
288 sort results | uniq -c
289 AT_CHECK([sort results | uniq], [0],
290 [Datapath actions: 10
296 AT_SETUP([ofproto-dpif - select group with watch port])
298 ADD_OF_PORTS([br0], [1], [10], [11])
299 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
300 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
301 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])
302 AT_CHECK([tail -1 stdout], [0],
303 [Datapath actions: 11
308 AT_SETUP([ofproto-dpif - select group with weight])
310 ADD_OF_PORTS([br0], [1], [10], [11], [12])
311 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'])
312 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
313 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])
314 AT_CHECK([tail -1 stdout], [0],
315 [Datapath actions: 11
320 AT_SETUP([ofproto-dpif - fast failover group])
322 ADD_OF_PORTS([br0], [1], [10], [11])
323 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'])
324 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
325 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])
326 AT_CHECK([tail -1 stdout], [0],
327 [Datapath actions: drop
332 AT_SETUP([ofproto-dpif - group stats single bucket])
334 ADD_OF_PORTS([br0], [1], [10], [11])
335 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,weight=2000,bucket=output:11,weight=0'])
336 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
340 pkt="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)"
341 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
344 ovs-appctl time/warp 100
345 sleep 1 # wait for forwarders process packets
346 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
347 AT_CHECK([STRIP_XIDS stdout | sort], [0], [dnl
348 group_id=1234,ref_count=0,packet_count=3,byte_count=180,bucket0:packet_count=3,byte_count=180,bucket1:packet_count=0,byte_count=0
349 OFPST_GROUP reply (OF1.2):
354 AT_SETUP([ofproto-dpif - group stats all buckets])
356 ADD_OF_PORTS([br0], [1], [10], [11])
357 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:11'])
358 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
362 pkt="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)"
363 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
366 ovs-appctl time/warp 100
367 sleep 1 # wait for forwarders process packets
368 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
369 AT_CHECK([STRIP_XIDS stdout | sort], [0], [dnl
370 group_id=1234,ref_count=0,packet_count=3,byte_count=180,bucket0:packet_count=3,byte_count=180,bucket1:packet_count=3,byte_count=180
371 OFPST_GROUP reply (OF1.2):
376 AT_SETUP([ofproto-dpif - registers])
378 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
379 AT_DATA([flows.txt], [dnl
380 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
381 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
382 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
383 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
385 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
386 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
387 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
388 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
389 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
390 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
391 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
392 in_port=9,reg0=0xdeadbeef actions=output:20
393 in_port=10,reg1=0xdeadbeef actions=output:21
394 in_port=11,reg2=0xeef22dea actions=output:22
396 dnl Sanilty check all registers
397 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
398 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
399 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
400 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
403 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
404 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])
405 AT_CHECK([tail -1 stdout], [0],
406 [Datapath actions: 20,21,22,33
411 AT_SETUP([ofproto-dpif - push-pop])
413 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
414 AT_DATA([flows.txt], [dnl
415 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
416 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
417 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
418 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
419 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
422 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
423 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])
424 AT_CHECK([tail -1 stdout], [0],
425 [Datapath actions: 33,22,21,20
430 AT_SETUP([ofproto-dpif - output])
432 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
433 AT_DATA([flows.txt], [dnl
434 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
435 in_port=2 actions=output:9
436 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
437 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
438 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
439 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
440 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
441 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
443 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
444 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])
445 AT_CHECK([tail -1 stdout], [0],
446 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
451 AT_SETUP([ofproto-dpif - dec_ttl])
453 ADD_OF_PORTS([br0], [1], [2], [3], [4])
454 AT_DATA([flows.txt], [dnl
455 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
456 table=1 in_port=1 action=dec_ttl,output:3
458 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
459 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])
460 AT_CHECK([tail -4 stdout], [0],
461 [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
462 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
463 This flow is handled by the userspace slow path because it:
464 - Sends "packet-in" messages to the OpenFlow controller.
466 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])
467 AT_CHECK([tail -2 stdout], [0],
468 [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
469 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
471 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])
472 AT_CHECK([tail -2 stdout], [0],
473 [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
474 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
477 AT_CAPTURE_FILE([ofctl_monitor.log])
478 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
479 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
480 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
481 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
482 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
483 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
488 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
489 dnl buffer to be resized just before pushing the id of the dec_ttl action.
490 dnl Thus the implementation must account for this by using the
491 dnl reallocated buffer rather than the original buffer.
493 dnl A number of similar rules are added to try and exercise
494 dnl xrealloc sufficiently that it returns a different base pointer
495 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
497 ADD_OF_PORTS([br0], [1])
498 (for i in `seq 0 255`; do
499 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
501 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
505 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
506 dnl buffer to be resized just before pushing the id of the dec_ttl action.
507 dnl Thus the implementation must account for this by using the
508 dnl reallocated buffer rather than the original buffer.
510 dnl A number of similar rules are added to try and exercise
511 dnl xrealloc sufficiently that it returns a different base pointer
512 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
514 ADD_OF_PORTS([br0], [1])
515 (for i in `seq 0 255`; do
516 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
518 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
522 dnl A note action at offset 24 in ofpacts will cause the ofpacts
523 dnl buffer to be resized just before pushing the id of the dec_ttl action.
524 dnl Thus the implementation must account for this by using the
525 dnl reallocated buffer rather than the original buffer.
527 dnl A number of similar rules are added to try and exercise
528 dnl xrealloc sufficiently that it returns a different base pointer
529 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
531 ADD_OF_PORTS([br0], [1])
532 (for i in `seq 0 255`; do
533 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
535 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
539 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
541 ADD_OF_PORTS([br0], [1], [2])
543 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
545 # "in_port" defaults to OFPP_NONE if it's not specified.
546 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"
547 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
548 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
557 AT_SETUP([ofproto-dpif - DSCP])
558 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
559 ADD_OF_PORTS([br0], [9])
560 AT_DATA([flows.txt], [dnl
561 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
563 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
564 AT_CHECK([ovs-vsctl -- \
565 set Port p1 qos=@newqos --\
566 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
567 --id=@q1 create Queue dscp=1 --\
568 --id=@q2 create Queue dscp=2], [0], [ignore])
569 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])
570 AT_CHECK([tail -2 stdout], [0],
571 [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
572 Datapath actions: dnl
574 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
575 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
577 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
578 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
579 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
585 AT_SETUP([ofproto-dpif - output/flood flags])
587 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
589 AT_DATA([flows.txt], [dnl
590 in_port=local actions=local,flood
591 in_port=1 actions=flood
592 in_port=2 actions=all
593 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
594 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
596 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
597 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
598 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
600 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])
601 AT_CHECK([tail -1 stdout \
602 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
610 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])
611 AT_CHECK([tail -1 stdout \
612 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
620 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])
621 AT_CHECK([tail -1 stdout \
622 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
631 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])
632 AT_CHECK([tail -1 stdout], [0],
633 [Datapath actions: 100,1,2,4,6,7
636 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])
637 AT_CHECK([tail -1 stdout], [0],
638 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
643 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
644 OVS_VSWITCHD_START([dnl
645 add-port br0 p1 -- set Interface p1 type=dummy
647 ON_EXIT([kill `cat ovs-ofctl.pid`])
649 AT_CAPTURE_FILE([ofctl_monitor.log])
651 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
654 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)'
656 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
657 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
658 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
659 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
660 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
662 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
663 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
665 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
666 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
669 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
670 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
677 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
678 OVS_VSWITCHD_START([dnl
679 add-port br0 p1 -- set Interface p1 type=dummy
681 ON_EXIT([kill `cat ovs-ofctl.pid`])
683 AT_CAPTURE_FILE([ofctl_monitor.log])
684 AT_CHECK([ovs-ofctl del-flows br0])
686 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
688 dnl Test that missed packets are droped
690 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)'
692 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
694 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
697 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
698 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
699 OFPST_FLOW reply (OF1.3):
705 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
706 OVS_VSWITCHD_START([dnl
707 add-port br0 p1 -- set Interface p1 type=dummy
709 ON_EXIT([kill `cat ovs-ofctl.pid`])
711 AT_CAPTURE_FILE([ofctl_monitor.log])
712 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
714 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
717 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)'
719 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
720 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
721 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
722 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
723 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
725 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
726 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
728 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
729 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
732 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
733 sleep 1 # wait for revalidator to update stats
734 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
735 n_packets=3, n_bytes=180, actions=goto_table:1
736 OFPST_FLOW reply (OF1.2):
742 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
743 OVS_VSWITCHD_START([dnl
744 add-port br0 p1 -- set Interface p1 type=dummy
746 ON_EXIT([kill `cat ovs-ofctl.pid`])
748 AT_CAPTURE_FILE([ofctl_monitor.log])
749 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
751 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
754 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)'
757 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
758 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
761 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
762 sleep 1 # wait for revalidator to update stats
763 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
764 n_packets=3, n_bytes=180, actions=resubmit(1,1)
765 OFPST_FLOW reply (OF1.2):
771 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
772 OVS_VSWITCHD_START([dnl
773 add-port br0 p1 -- set Interface p1 type=dummy
775 ON_EXIT([kill `cat ovs-ofctl.pid`])
777 AT_CAPTURE_FILE([ofctl_monitor.log])
778 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
779 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
781 dnl Miss table 0, Hit table 1
782 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
785 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)'
787 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
788 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
790 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
791 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
792 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
794 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
795 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
797 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
798 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
801 dnl Hit table 0, Miss all other tables, sent to controller
802 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
805 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)'
807 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
808 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
810 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
811 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
812 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
814 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
815 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
817 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
818 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
821 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
822 sleep 1 # wait for revalidator to update stats
823 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
824 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
825 OFPST_FLOW reply (OF1.2):
831 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
832 OVS_VSWITCHD_START([dnl
833 add-port br0 p1 -- set Interface p1 type=dummy
835 ON_EXIT([kill `cat ovs-ofctl.pid`])
837 AT_CAPTURE_FILE([ofctl_monitor.log])
838 AT_DATA([flows.txt], [dnl
839 table=0 actions=goto_table(1)
840 table=2 dl_src=10:11:11:11:11:11 actions=controller
842 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
843 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
845 dnl Hit table 0, Miss table 1, Hit table 2
846 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
849 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)'
851 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
852 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
854 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
855 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
856 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
858 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
859 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
861 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
862 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
865 dnl Hit table 1, Miss all other tables, sent to controller
866 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
869 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)'
871 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
872 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
874 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
875 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
876 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
878 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
879 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
881 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
882 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
885 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
886 sleep 1 # wait for revalidator to update stats
887 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
888 n_packets=6, n_bytes=360, actions=goto_table:1
889 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
890 OFPST_FLOW reply (OF1.2):
896 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
897 OVS_VSWITCHD_START([dnl
898 add-port br0 p1 -- set Interface p1 type=dummy
900 ON_EXIT([kill `cat ovs-ofctl.pid`])
902 AT_CAPTURE_FILE([ofctl_monitor.log])
903 AT_DATA([flows.txt], [dnl
904 table=0 actions=resubmit(1,1)
905 table=2 dl_src=10:11:11:11:11:11 actions=controller
907 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
908 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
910 dnl Hit table 0, Miss table 1, Dropped
911 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
914 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)'
916 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
918 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
921 dnl Hit table 1, Dropped
922 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
925 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)'
927 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
929 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
932 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
933 sleep 1 # wait for revalidator to update stats
934 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
935 n_packets=6, n_bytes=360, actions=resubmit(1,1)
936 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
937 OFPST_FLOW reply (OF1.2):
943 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
944 OVS_VSWITCHD_START([dnl
945 add-port br0 p1 -- set Interface p1 type=dummy
947 ON_EXIT([kill `cat ovs-ofctl.pid`])
949 AT_CAPTURE_FILE([ofctl_monitor.log])
950 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
952 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
954 dnl Test that missed packets are droped
956 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
958 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
960 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
963 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
964 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
971 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
972 OVS_VSWITCHD_START([dnl
973 add-port br0 p1 -- set Interface p1 type=dummy
975 ON_EXIT([kill `cat ovs-ofctl.pid`])
977 AT_CAPTURE_FILE([ofctl_monitor.log])
978 AT_CHECK([ovs-ofctl del-flows br0])
979 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
980 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
982 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
984 dnl Test that missed packets are droped
986 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)'
988 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
990 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
993 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
994 sleep 1 # wait for revalidator to update stats
995 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
996 n_packets=3, n_bytes=180, actions=goto_table:1
997 OFPST_FLOW reply (OF1.2):
1003 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1004 OVS_VSWITCHD_START([dnl
1005 add-port br0 p1 -- set Interface p1 type=dummy
1007 ON_EXIT([kill `cat ovs-ofctl.pid`])
1009 AT_CAPTURE_FILE([ofctl_monitor.log])
1010 AT_CHECK([ovs-ofctl del-flows br0])
1011 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1012 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1014 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1016 dnl Test that missed packets are droped
1018 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)'
1020 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1022 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1025 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1026 sleep 1 # wait for revalidator to update stats
1027 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1028 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1029 OFPST_FLOW reply (OF1.2):
1035 AT_SETUP([ofproto-dpif - controller])
1036 OVS_VSWITCHD_START([dnl
1037 add-port br0 p1 -- set Interface p1 type=dummy
1039 ON_EXIT([kill `cat ovs-ofctl.pid`])
1041 AT_CAPTURE_FILE([ofctl_monitor.log])
1042 AT_DATA([flows.txt], [dnl
1043 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1044 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1045 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1047 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1048 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)
1049 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)
1050 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1051 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)
1052 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1053 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1054 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1055 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
1057 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1060 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1063 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)'
1065 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1066 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1068 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1069 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1070 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
1072 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1073 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
1075 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1076 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
1079 dnl Singleton controller action.
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=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)'
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 action) data_len=60 (unbuffered)
1090 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
1092 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1093 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
1095 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1096 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
1099 dnl Modified 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=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)'
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=64 in_port=1 (via action) data_len=64 (unbuffered)
1110 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
1112 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1113 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
1115 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1116 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
1119 dnl Modified VLAN controller action.
1120 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1123 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)'
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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1130 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
1132 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1133 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
1135 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1136 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
1140 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1143 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)'
1145 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1146 ovs-appctl -t ovs-ofctl exit
1148 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1149 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1150 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
1152 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1153 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
1155 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)
1156 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
1158 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)
1159 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
1161 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)
1162 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
1164 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)
1165 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
1167 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)
1168 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
1170 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)
1171 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=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
1173 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)
1174 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=0x001 tcp_csum:316d
1178 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1181 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'
1183 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1184 ovs-appctl -t ovs-ofctl exit
1186 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1187 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1188 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
1190 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1191 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
1193 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)
1194 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
1196 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)
1197 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
1199 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)
1200 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
1202 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)
1203 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
1205 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)
1206 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
1208 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)
1209 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1211 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)
1212 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1215 dnl Modified ARP controller action.
1216 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1219 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)'
1222 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1223 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1224 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1225 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
1226 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1227 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
1228 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1229 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
1230 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1231 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
1232 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1233 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
1234 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1235 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
1236 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1237 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
1238 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1239 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
1240 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1241 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
1244 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1247 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1250 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'
1253 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1254 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1255 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1256 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1257 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
1259 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1260 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
1262 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)
1263 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
1265 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)
1266 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
1268 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)
1269 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
1271 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)
1272 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
1274 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)
1275 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
1277 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)
1278 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
1280 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)
1281 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
1284 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1285 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1286 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1287 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)
1288 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)
1289 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)
1290 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)
1291 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)
1292 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1293 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1294 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
1295 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
1296 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1303 AT_SETUP([ofproto-dpif - MPLS handling])
1304 OVS_VSWITCHD_START([dnl
1305 add-port br0 p1 -- set Interface p1 type=dummy
1307 ON_EXIT([kill `cat ovs-ofctl.pid`])
1309 AT_CAPTURE_FILE([ofctl_monitor.log])
1310 AT_DATA([flows.txt], [dnl
1311 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
1312 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
1313 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
1314 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
1315 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
1316 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
1317 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
1318 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
1319 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1320 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1321 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
1323 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1325 dnl Modified MPLS controller action.
1326 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1329 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=17,tos=0,ttl=64,frag=no),udp(src=7777,dst=80)'
1331 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1332 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1334 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1335 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1336 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1338 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1339 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
1341 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1342 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
1345 dnl Modified MPLS controller action.
1346 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1349 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)'
1351 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1352 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1354 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1355 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1356 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
1358 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1359 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
1361 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1362 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
1365 dnl Modified MPLS controller action.
1366 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1368 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)
1371 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)'
1373 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1374 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1376 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1377 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1378 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1380 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1381 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1383 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1384 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1387 dnl Modified MPLS controller action.
1388 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1391 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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))'
1393 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1394 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1396 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1397 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1398 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
1400 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1401 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
1403 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1404 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
1407 dnl Modified MPLS controller action.
1408 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1411 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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)'
1413 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1414 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1416 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1417 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1418 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
1420 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1421 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
1423 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1424 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
1427 dnl Modified MPLS controller action.
1428 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1431 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)'
1433 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1434 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1436 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1437 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1438 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
1440 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1441 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
1443 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1444 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
1447 dnl Modified MPLS controller action.
1448 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1451 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)'
1453 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1454 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1456 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1457 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1458 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
1460 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1461 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
1463 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1464 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
1467 dnl Modified MPLS controller action.
1468 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1471 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)'
1473 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1474 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1476 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1477 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1478 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
1480 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1481 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
1483 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1484 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
1487 dnl Modified MPLS actions.
1488 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1491 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)'
1493 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1494 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1496 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1497 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1498 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
1500 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1501 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
1503 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1504 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
1507 dnl Modified MPLS ipv6 controller action.
1508 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1511 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)'
1513 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1514 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1516 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1517 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1518 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
1520 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1521 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
1523 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1524 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
1528 dnl Modified MPLS pop action.
1529 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1530 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)
1531 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1533 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1536 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'
1539 # 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)'
1541 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1542 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1544 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1545 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1546 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
1548 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1549 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
1551 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1552 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
1555 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1557 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1558 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
1559 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
1560 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
1561 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
1562 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
1563 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
1564 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
1565 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
1566 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
1567 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
1568 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1576 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1577 OVS_VSWITCHD_START([dnl
1578 add-port br0 p1 -- set Interface p1 type=dummy
1580 ON_EXIT([kill `cat ovs-ofctl.pid`])
1582 AT_CAPTURE_FILE([ofctl_monitor.log])
1583 # A table-miss flow has priority 0 and no match
1584 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1586 dnl Singleton controller action.
1587 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1590 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)'
1592 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1593 ovs-appctl -t ovs-ofctl exit
1595 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1596 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1597 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
1599 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1600 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
1602 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1603 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
1606 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1608 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1609 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1617 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1618 OVS_VSWITCHD_START([dnl
1619 add-port br0 p1 -- set Interface p1 type=dummy
1621 ON_EXIT([kill `cat ovs-ofctl.pid`])
1623 AT_CAPTURE_FILE([ofctl_monitor.log])
1624 # A table-miss flow has priority 0 and no match
1625 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1627 dnl Singleton controller action.
1628 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1631 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)'
1633 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1634 ovs-appctl -t ovs-ofctl exit
1636 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1638 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1639 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1640 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
1642 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1643 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
1645 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1646 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
1649 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1651 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1652 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1653 OFPST_FLOW reply (OF1.3):
1659 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1661 ADD_OF_PORTS([br0], [1], [2])
1663 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1664 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'
1666 # Input some packets that should follow the arp modification slow-path.
1668 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)'
1670 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1672 # Check the packets that were output.
1673 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1674 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
1675 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
1676 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1677 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
1678 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
1679 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
1680 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
1681 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
1682 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
1688 AT_SETUP([ofproto-dpif - VLAN handling])
1690 [set Bridge br0 fail-mode=standalone -- \
1691 add-port br0 p1 trunks=10,12 -- \
1692 add-port br0 p2 tag=10 -- \
1693 add-port br0 p3 tag=12 \
1694 other-config:priority-tags=true -- \
1695 add-port br0 p4 tag=12 -- \
1696 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1697 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1698 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1699 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1700 other-config:priority-tags=true -- \
1701 set Interface p1 type=dummy -- \
1702 set Interface p2 type=dummy -- \
1703 set Interface p3 type=dummy -- \
1704 set Interface p4 type=dummy -- \
1705 set Interface p5 type=dummy -- \
1706 set Interface p6 type=dummy -- \
1707 set Interface p7 type=dummy -- \
1708 set Interface p8 type=dummy --])
1710 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1711 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1717 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1718 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1721 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1722 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1726 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1727 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1730 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1731 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1732 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1733 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1734 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1741 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1742 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1743 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1750 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1751 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1752 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1759 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1760 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1761 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1762 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1763 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1766 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1767 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1768 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1769 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1770 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1771 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1772 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1775 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1776 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1777 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1778 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1779 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1780 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1781 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1784 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1785 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1786 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1787 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1788 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1789 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1790 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1793 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1794 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1802 if test $vlan = none; then
1803 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1805 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))"
1808 echo "----------------------------------------------------------------------"
1809 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1811 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1812 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1814 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1816 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1822 AT_SETUP([ofproto-dpif - MPLS handling])
1823 OVS_VSWITCHD_START([dnl
1824 add-port br0 p1 -- set Interface p1 type=dummy
1826 ON_EXIT([kill `cat ovs-ofctl.pid`])
1828 AT_CAPTURE_FILE([ofctl_monitor.log])
1829 AT_DATA([flows.txt], [dnl
1830 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1831 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1832 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1834 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1836 dnl In this test, we push an MPLS tag to an ethernet packet.
1837 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1840 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)'
1842 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1843 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1845 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1846 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1847 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
1848 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1849 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1850 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1851 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1853 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1854 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
1855 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1856 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1857 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1858 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1860 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1861 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
1862 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1863 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1864 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1865 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1868 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1869 dnl copied exactly, except for the BOS bit.
1870 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1873 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)'
1875 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1876 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1878 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1879 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1880 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
1881 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1882 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1883 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1884 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1886 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1887 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
1888 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1889 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1890 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1891 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1893 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1894 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
1895 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1896 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1897 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1898 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1901 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1902 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1903 dnl to the MPLS ethertype of the MPLS push action which differs to that
1904 dnl of the input packet.
1905 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1908 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:02,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
1910 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1911 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1913 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1914 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1915 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
1916 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1917 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1918 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1919 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1921 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1922 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
1923 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1924 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1925 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1926 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1928 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1929 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
1930 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1931 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1932 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1933 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1939 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1940 OVS_VSWITCHD_START([dnl
1941 add-port br0 p1 -- set Interface p1 type=dummy
1943 ON_EXIT([kill `cat ovs-ofctl.pid`])
1945 AT_CAPTURE_FILE([ofctl_monitor.log])
1946 AT_DATA([flows.txt], [dnl
1947 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
1948 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
1949 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
1950 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
1951 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
1952 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
1953 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
1954 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
1955 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
1956 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
1958 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1960 dnl Modified MPLS controller action.
1961 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1962 dnl both of these in the final flow
1963 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1966 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)'
1968 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1969 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1971 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1972 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1973 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
1974 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1975 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1976 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1977 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1978 00000040 00 00 00 00
1980 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1981 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
1982 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1983 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1984 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1985 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1986 00000040 00 00 00 00
1988 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1989 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
1990 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1991 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1992 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1993 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1994 00000040 00 00 00 00
1997 dnl Modified MPLS controller action.
1998 dnl In this test, the input packet in vlan-tagged, which should be stripped
1999 dnl before we push the MPLS and VLAN tags.
2000 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2003 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))'
2005 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2006 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2008 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2009 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2010 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
2011 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2012 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2013 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2014 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2016 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2017 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
2018 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2019 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2020 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2021 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2023 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2024 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
2025 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2026 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2027 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2028 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2031 dnl Modified MPLS controller action.
2032 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2033 dnl both of these in the final flow
2034 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2037 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)'
2039 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2040 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2042 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2043 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2044 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
2045 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2046 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2047 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2048 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2049 00000040 00 00 00 00
2051 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2052 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
2053 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2054 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2055 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2056 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2057 00000040 00 00 00 00
2059 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2060 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
2061 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2062 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2063 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2064 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2065 00000040 00 00 00 00
2068 dnl Modified MPLS controller action.
2069 dnl In this test, the input packet in vlan-tagged, which should be stripped
2070 dnl before we push the MPLS and VLAN tags.
2071 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2074 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))'
2076 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2077 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2079 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2080 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2081 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
2082 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2083 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2084 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2085 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2087 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2088 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
2089 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2090 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2091 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2092 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2094 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2095 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
2096 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2097 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2098 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2099 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2102 dnl Modified MPLS controller action.
2103 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2104 dnl actions are reordered, so we see both of these in the final flow.
2105 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2108 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)'
2110 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2111 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2113 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2114 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2115 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
2116 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2117 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2118 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2119 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2120 00000040 00 00 00 00
2122 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2123 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
2124 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2125 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2126 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2127 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2128 00000040 00 00 00 00
2130 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2131 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
2132 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2133 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2134 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2135 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2136 00000040 00 00 00 00
2139 dnl Modified MPLS controller action.
2140 dnl In this test, the input packet in vlan-tagged, which should be stripped
2141 dnl before we push the MPLS and VLAN tags.
2142 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2145 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))'
2147 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2148 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2150 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2151 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2152 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
2153 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2154 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2155 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2156 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2158 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2159 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
2160 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2161 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2162 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2163 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2165 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2166 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
2167 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2168 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2169 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2170 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2173 dnl Modified MPLS controller action.
2174 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2175 dnl actions are reordered, so we see both of these in the final flow.
2176 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2179 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)'
2181 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2182 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2184 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2185 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2186 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
2187 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2188 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2189 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2190 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2191 00000040 00 00 00 00
2193 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2194 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
2195 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2196 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2197 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2198 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2199 00000040 00 00 00 00
2201 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2202 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
2203 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2204 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2205 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2206 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2207 00000040 00 00 00 00
2210 dnl Modified MPLS controller action.
2211 dnl In this test, the input packet in vlan-tagged, which should be stripped
2212 dnl before we push the MPLS and VLAN tags.
2213 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2216 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))'
2218 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2219 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2221 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2222 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2223 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
2224 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2225 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2226 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2227 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2229 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2230 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
2231 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2232 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2233 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2234 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2236 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2237 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
2238 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2239 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2240 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2241 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2244 dnl Modified MPLS controller action.
2245 dnl In this test, the input packet in vlan-tagged, which should be stripped
2246 dnl before we push the MPLS and VLAN tags.
2247 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2250 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))'
2252 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2253 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2255 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2256 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2257 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
2258 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2259 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2260 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2261 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2263 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2264 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
2265 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2266 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2267 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2268 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2270 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2271 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
2272 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2273 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2274 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2275 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2278 dnl Modified MPLS controller action.
2279 dnl In this test, the input packet in vlan-tagged, which should be modified
2280 dnl before we push MPLS and VLAN tags.
2281 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2284 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54: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))'
2286 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2287 ovs-appctl -t ovs-ofctl exit
2289 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2290 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2291 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2292 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2293 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2294 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2295 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2297 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2298 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2299 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2300 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2301 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2302 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2304 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2305 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2306 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2307 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2308 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2309 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2312 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2313 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2314 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
2315 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
2316 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
2317 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
2318 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
2319 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
2320 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
2321 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
2322 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
2323 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
2324 OFPST_FLOW reply (OF1.2):
2330 AT_SETUP([ofproto-dpif - fragment handling])
2332 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2333 AT_DATA([flows.txt], [dnl
2334 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2335 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2336 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2337 priority=50 tcp ip_frag=no actions=output:4
2338 priority=50 tcp ip_frag=first actions=output:5
2339 priority=50 tcp ip_frag=later actions=output:6
2341 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2343 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"
2344 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2345 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2346 later_flow="$base_flow,frag=later)"
2348 # mode no first later
2351 'drop 1 drop drop' \
2360 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2361 for type in no first later; do
2362 eval flow=\$${type}_flow exp_output=\$$type
2363 printf "\n%s\n" "----$mode $type-----"
2364 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2366 if test $mode = drop && test $type != no; then
2367 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2369 echo "Datapath actions: $exp_output" >> expout
2370 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2376 AT_SETUP([ofproto-dpif - exit])
2378 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2379 AT_DATA([flows.txt], [dnl
2380 in_port=1 actions=output:10,exit,output:11
2381 in_port=2 actions=output:12,resubmit:1,output:12
2382 in_port=3 actions=output:13,resubmit:2,output:14
2384 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2385 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])
2386 AT_CHECK([tail -1 stdout], [0],
2387 [Datapath actions: 10
2389 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])
2390 AT_CHECK([tail -1 stdout], [0],
2391 [Datapath actions: 12,10
2393 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])
2394 AT_CHECK([tail -1 stdout], [0],
2395 [Datapath actions: 13,12,10
2401 AT_SETUP([ofproto-dpif - mirroring, select_all])
2403 ADD_OF_PORTS([br0], 1, 2, 3)
2405 set Bridge br0 mirrors=@m --\
2406 --id=@p3 get Port p3 --\
2407 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2409 AT_DATA([flows.txt], [dnl
2410 in_port=1 actions=output:2
2411 in_port=2 actions=output:1
2413 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2415 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)"
2416 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2417 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2418 [Datapath actions: 2,3
2421 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)"
2422 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2423 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2424 [Datapath actions: 1,3
2431 AT_SETUP([ofproto-dpif - mirroring, select_src])
2433 ADD_OF_PORTS([br0], 1, 2, 3)
2435 set Bridge br0 mirrors=@m --\
2436 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2437 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2439 AT_DATA([flows.txt], [dnl
2440 in_port=1 actions=output:2
2441 in_port=2 actions=output:1
2443 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2445 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)"
2446 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2447 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2448 [Datapath actions: 2,3
2451 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)"
2452 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2453 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2454 [Datapath actions: 1
2459 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2461 ADD_OF_PORTS([br0], 1, 2)
2463 set Bridge br0 mirrors=@m --\
2464 --id=@p2 get Port p2 --\
2465 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2467 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2469 # "in_port" defaults to OFPP_NONE if it's not specified.
2470 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"
2471 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2472 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2473 [Datapath actions: 1,2
2480 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2482 ADD_OF_PORTS([br0], 1, 2, 3)
2484 set Bridge br0 mirrors=@m --\
2485 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2486 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2488 AT_DATA([flows.txt], [dnl
2489 in_port=1 actions=output:2
2490 in_port=2 actions=output:1
2492 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2494 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)"
2495 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2496 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2497 [Datapath actions: 2,3
2500 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)"
2501 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2502 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2503 [Datapath actions: 1
2510 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2512 ADD_OF_PORTS([br0], 1, 2, 3)
2514 set Bridge br0 mirrors=@m --\
2515 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2516 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2518 AT_DATA([flows.txt], [dnl
2519 in_port=1, actions=output:2
2521 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2523 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)"
2524 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2525 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2526 [Datapath actions: 2
2529 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))"
2530 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2531 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2532 [Datapath actions: 2
2535 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))"
2536 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2537 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2538 [Datapath actions: 2,3
2545 AT_SETUP([ofproto-dpif - mirroring, output_port])
2547 ADD_OF_PORTS([br0], 1, 2, 3)
2549 set Bridge br0 mirrors=@m --\
2550 --id=@p3 get Port p3 --\
2551 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2553 AT_DATA([flows.txt], [dnl
2554 in_port=1 actions=mod_vlan_vid:17,output:2
2555 in_port=2 actions=output:1
2557 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2559 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)"
2560 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2561 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2562 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2565 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)"
2566 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2567 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2568 [Datapath actions: 1,3
2574 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2576 ADD_OF_PORTS([br0], 1, 2)
2578 set Bridge br0 mirrors=@m --\
2579 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2581 AT_DATA([flows.txt], [dnl
2582 in_port=1 actions=output:2
2583 in_port=2 actions=mod_vlan_vid:17,output:1
2585 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2587 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)"
2588 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2589 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2591 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2592 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2594 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2596 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)"
2597 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2598 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2600 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2601 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2603 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2608 # Two testcases below are for the ofproto/trace command
2609 # The first one tests all correct syntax:
2610 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2611 # ofproto/trace br_name br_flow [-generate|packet]
2612 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2613 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2614 ADD_OF_PORTS([br0], 1, 2, 3)
2616 AT_DATA([flows.txt], [dnl
2617 in_port=1 actions=output:2
2618 in_port=2 actions=output:1
2620 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2622 odp_flow="in_port(1)"
2624 # Test command: ofproto/trace odp_flow with in_port as a name.
2625 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2626 AT_CHECK([tail -1 stdout], [0], [dnl
2630 odp_flow="in_port(1)"
2631 # Test command: ofproto/trace odp_flow
2632 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2633 AT_CHECK([tail -1 stdout], [0], [dnl
2637 # Test command: ofproto/trace dp_name odp_flow
2638 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2639 AT_CHECK([tail -1 stdout], [0], [dnl
2642 # Test commmand: ofproto/trace br_name br_flow
2643 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2644 AT_CHECK([tail -1 stdout], [0], [dnl
2648 # Delete the inserted flows
2649 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2650 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2652 # This section beflow tests the [-generate] option
2653 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2654 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"
2656 # Test command: ofproto/trace odp_flow
2657 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2658 # Check for no MAC learning entry
2659 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2663 # Test command: ofproto/trace br_name br_flow
2664 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2665 # Check for no MAC learning entry
2666 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2670 # Test command: ofproto/trace odp_flow -generate
2671 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2672 # Check for the MAC learning entry
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 ?
2678 # Test command: ofproto/trace dp_name odp_flow -generate
2679 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2680 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2681 -generate], [0], [stdout])
2682 # Check for both MAC learning entries
2683 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2685 3 0 50:54:00:00:00:05 ?
2686 1 0 50:54:00:00:00:06 ?
2689 # Test command: ofproto/trace br_name br_flow -generate
2690 AT_CHECK([ovs-appctl ofproto/trace br0 \
2691 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2692 -generate], [0], [stdout])
2693 # Check for both MAC learning entries.
2694 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2696 3 0 50:54:00:00:00:05 ?
2697 1 0 50:54:00:00:00:06 ?
2698 2 0 50:54:00:00:00:07 ?
2701 # This section beflow tests the [packet] option
2702 # The ovs-tcpundump of packets between port1 and port2
2703 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2704 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2706 # Construct the MAC learning table
2707 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2708 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2709 -generate], [0], [stdout])
2711 # Construct the MAC learning table
2712 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2713 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2714 -generate], [0], [stdout])
2716 # Test command: ofproto/trace odp_flow packet
2717 AT_CHECK([ovs-appctl ofproto/trace \
2718 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2719 AT_CHECK([tail -1 stdout], [0], [dnl
2722 AT_CHECK([head -n 2 stdout], [0], [dnl
2724 Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
2727 # Test command: ofproto/trace dp_name odp_flow packet
2728 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2729 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2730 AT_CHECK([tail -1 stdout], [0], [dnl
2733 AT_CHECK([head -n 2 stdout], [0], [dnl
2735 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
2738 # Test command: ofproto/trace br_name br_flow packet
2739 AT_CHECK([ovs-appctl ofproto/trace br0 \
2740 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2741 AT_CHECK([tail -1 stdout], [0], [dnl
2744 AT_CHECK([head -n 2 stdout], [0], [dnl
2746 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
2752 # The second test tests the corner cases
2753 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2755 ADD_OF_PORTS([br0], 1, 2)
2758 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2759 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2761 generate="-generate"
2762 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2764 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2770 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2772 AT_CHECK([tail -2 stderr], [0], [dnl
2773 Cannot find the datapath
2774 ovs-appctl: ovs-vswitchd: server returned an error
2777 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2783 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2785 AT_CHECK([tail -2 stderr], [0], [dnl
2786 Cannot find the datapath
2787 ovs-appctl: ovs-vswitchd: server returned an error
2790 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2796 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2798 AT_CHECK([tail -2 stderr], [0], [dnl
2799 Cannot find the datapath
2800 ovs-appctl: ovs-vswitchd: server returned an error
2803 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2809 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2811 AT_CHECK([tail -2 stderr], [0], [dnl
2812 Cannot find the datapath
2813 ovs-appctl: ovs-vswitchd: server returned an error
2816 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2822 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2824 AT_CHECK([tail -2 stderr], [0], [dnl
2826 ovs-appctl: ovs-vswitchd: server returned an error
2829 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2835 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2837 AT_CHECK([tail -2 stderr], [0], [dnl
2838 Must specify bridge name
2839 ovs-appctl: ovs-vswitchd: server returned an error
2842 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2843 AT_CHECK([ovs-appctl ofproto/trace \
2844 ovs-dummy "$odp_flow" garbage_option],
2845 [2], [stdout],[stderr])
2846 AT_CHECK([tail -2 stderr], [0], [dnl
2847 Trailing garbage in packet data
2848 ovs-appctl: ovs-vswitchd: server returned an error
2851 # Test incorrect command: ofproto/trace with 4 arguments
2852 AT_CHECK([ovs-appctl ofproto/trace \
2853 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2854 AT_CHECK([tail -2 stderr], [0], [dnl
2855 "ofproto/trace" command takes at most 3 arguments
2856 ovs-appctl: ovs-vswitchd: server returned an error
2859 # Test incorrect command: ofproto/trace with 0 argument
2860 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2861 AT_CHECK([tail -2 stderr], [0], [dnl
2862 "ofproto/trace" command requires at least 1 arguments
2863 ovs-appctl: ovs-vswitchd: server returned an error
2869 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2871 ADD_OF_PORTS([br0], 1, 2, 3)
2873 AT_DATA([flows.txt], [dnl
2874 in_port=1 actions=output:2
2875 in_port=2 actions=output:1
2877 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2879 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2880 AT_CHECK([tail -1 stdout], [0], [dnl
2881 Datapath actions: push_vlan(vid=123,pcp=0),2
2888 m4_define([OFPROTO_TRACE],
2890 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2891 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2893 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2896 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2899 AT_SETUP([ofproto-dpif - MAC learning])
2900 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2901 ADD_OF_PORTS([br0], 1, 2, 3)
2903 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)'
2905 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2908 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2912 # Check for the MAC learning entry.
2913 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2915 3 0 50:54:00:00:00:05 ?
2918 # Trace a packet arrival destined for the learned MAC.
2919 # (This will also learn a MAC.)
2922 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2926 # Check for both MAC learning entries.
2927 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2929 3 0 50:54:00:00:00:05 ?
2930 1 0 50:54:00:00:00:06 ?
2933 # Trace a packet arrival that updates the first learned MAC entry.
2936 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2940 # Check that the MAC learning entry was updated.
2941 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2943 1 0 50:54:00:00:00:06 ?
2944 2 0 50:54:00:00:00:05 ?
2947 # Add another bridge.
2951 -- set bridge br1 datapath-type=dummy])
2952 ADD_OF_PORTS([br1], 4, 5)
2954 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2957 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2962 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2966 # Check that the MAC learning entries were added.
2967 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2969 4 0 50:54:00:00:00:06 ?
2970 5 0 50:54:00:00:00:07 ?
2973 # Delete port p1 and see that its MAC learning entry disappeared, and
2974 # that the MAC learning entry for the same MAC was also deleted from br1.
2975 AT_CHECK([ovs-vsctl del-port p1])
2976 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2978 2 0 50:54:00:00:00:05 ?
2980 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2982 5 0 50:54:00:00:00:07 ?
2988 AT_SETUP([ofproto-dpif - MAC table overflow])
2990 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2991 ADD_OF_PORTS([br0], 1, 2, 3)
2993 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)'
2995 AT_CHECK([ovs-appctl time/stop])
2997 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2998 for i in 0 1 2 3 4 5 6 7 8 9; do
3001 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
3004 ovs-appctl time/warp 1000
3007 # Check for the MAC learning entries.
3008 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3010 3 0 50:54:00:00:00:00
3011 3 0 50:54:00:00:00:01
3012 3 0 50:54:00:00:00:02
3013 3 0 50:54:00:00:00:03
3014 3 0 50:54:00:00:00:04
3015 3 0 50:54:00:00:00:05
3016 3 0 50:54:00:00:00:06
3017 3 0 50:54:00:00:00:07
3018 3 0 50:54:00:00:00:08
3019 3 0 50:54:00:00:00:09
3023 # Trace another ARP packet on another MAC.
3026 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3030 # Check that the new one chased the oldest one out of the table.
3031 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3033 3 0 50:54:00:00:00:01 ?
3034 3 0 50:54:00:00:00:02 ?
3035 3 0 50:54:00:00:00:03 ?
3036 3 0 50:54:00:00:00:04 ?
3037 3 0 50:54:00:00:00:05 ?
3038 3 0 50:54:00:00:00:06 ?
3039 3 0 50:54:00:00:00:07 ?
3040 3 0 50:54:00:00:00:08 ?
3041 3 0 50:54:00:00:00:09 ?
3042 3 0 50:54:00:00:00:10 ?
3048 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3050 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3052 # IP_VERSION_TYPE is used in AT_SETUP
3053 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3054 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3055 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3057 ON_EXIT([kill `cat test-sflow.pid`])
3058 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3059 AT_CAPTURE_FILE([sflow.log])
3060 SFLOW_PORT=`parse_listening_port < test-sflow.log`
3061 ovs-appctl time/stop
3063 ADD_OF_PORTS([br0], 1, 2)
3065 set Interface br0 options:ifindex=1002 -- \
3066 set Interface p1 options:ifindex=1004 -- \
3067 set Interface p2 options:ifindex=1003 -- \
3068 set Bridge br0 sflow=@sf -- \
3069 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3070 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3072 dnl open with ARP packets to seed the bridge-learning. The output
3073 dnl ifIndex numbers should be reported predictably after that.
3074 dnl Since we set sampling=1 we should see all of these packets
3075 dnl reported. Sorting the output by data-source and seqNo makes
3076 dnl it deterministic. Ensuring that we send at least two packets
3077 dnl into each port means we get to check the seq nos are
3078 dnl incrementing correctly.
3079 dnl because packets from different ports can be handled by separate
3080 dnl threads, put some sleeps
3082 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)'
3084 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)'
3086 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)'
3088 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)'
3089 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)'
3091 dnl sleep long enough to get more than one counter sample
3092 dnl from each datasource so we can check sequence numbers
3093 for i in `seq 1 30`; do
3094 ovs-appctl time/warp 100
3097 ovs-appctl -t test-sflow exit
3099 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3120 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
3140 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
3160 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
3180 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
3200 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
3203 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3217 in_broadcasts=4294967295
3220 in_unknownprotos=4294967295
3223 out_multicasts=4294967295
3224 out_broadcasts=4294967295
3240 in_broadcasts=4294967295
3243 in_unknownprotos=4294967295
3246 out_multicasts=4294967295
3247 out_broadcasts=4294967295
3263 in_broadcasts=4294967295
3266 in_unknownprotos=4294967295
3269 out_multicasts=4294967295
3270 out_broadcasts=4294967295
3286 in_broadcasts=4294967295
3289 in_unknownprotos=4294967295
3292 out_multicasts=4294967295
3293 out_broadcasts=4294967295
3309 in_broadcasts=4294967295
3312 in_unknownprotos=4294967295
3315 out_multicasts=4294967295
3316 out_broadcasts=4294967295
3332 in_broadcasts=4294967295
3335 in_unknownprotos=4294967295
3338 out_multicasts=4294967295
3339 out_broadcasts=4294967295
3346 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3347 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3349 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3351 # Test that basic NetFlow reports flow statistics correctly:
3352 # The initial packet of a flow are correctly accounted.
3353 # Later packets within a flow are correctly accounted.
3354 # Flow actions changing (in this case, due to MAC learning)
3355 # cause a record to be sent.
3357 # IP_VERSION_TYPE is used in AT_SETUP
3358 m4_define([CHECK_NETFLOW_EXPIRATION],
3359 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3360 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3361 ADD_OF_PORTS([br0], 1, 2)
3363 ovs-appctl time/stop
3364 ON_EXIT([kill `cat test-netflow.pid`])
3365 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3366 AT_CAPTURE_FILE([netflow.log])
3367 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3370 set Bridge br0 netflow=@nf -- \
3371 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3372 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3374 for delay in 1000 30000; do
3375 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)'
3376 sleep 1 # ensure the order in which these two packets are processed
3377 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)'
3379 ovs-appctl time/warp $delay
3382 ovs-appctl time/warp 6000
3385 ovs-appctl -t test-netflow exit
3387 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])
3389 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])
3391 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3392 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3393 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3397 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3398 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3400 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3402 # Test that basic NetFlow reports active expirations correctly.
3404 # IP_VERSION_TYPE is used in AT_SETUP
3405 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3406 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3408 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3409 ADD_OF_PORTS([br0], 1, 2)
3411 ON_EXIT([kill `cat test-netflow.pid`])
3412 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3413 AT_CAPTURE_FILE([netflow.log])
3414 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3417 set Bridge br0 netflow=@nf -- \
3418 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3419 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3421 AT_CHECK([ovs-appctl time/stop])
3423 while test $n -le 60; do
3426 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)'
3427 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)'
3429 ovs-appctl time/warp 1000
3432 ovs-appctl time/warp 10000
3436 ovs-appctl -t test-netflow exit
3438 # Count the number of reported packets:
3439 # - From source to destination before MAC learning kicks in (just one).
3440 # - From source to destination after that.
3441 # - From destination to source.
3449 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3456 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3459 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3462 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3469 eval $counter=\`expr \$$counter + \$pkts\`
3470 n_recs=`expr $n_recs + 1`
3473 # There should be exactly 1 MAC learning packet,
3474 # exactly 59 other packets in that direction,
3475 # and exactly 60 packets in the other direction.
3476 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3481 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3482 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3484 AT_SETUP([ofproto-dpif - flow stats])
3486 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3487 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3489 ovs-appctl time/stop
3491 for i in `seq 1 10`; do
3492 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)'
3495 ovs-appctl time/warp 1000
3496 sleep 1 # wait for revalidator to update stats
3498 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3499 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3500 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3501 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3506 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3508 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3509 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3511 ovs-appctl time/stop
3513 for i in `seq 1 10`; do
3514 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)'
3517 ovs-appctl time/warp 100
3518 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3519 ovs-appctl time/warp 1000
3521 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3522 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3523 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3524 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3529 AT_SETUP([idle_age and hard_age increase over time])
3532 # get_ages DURATION HARD IDLE
3534 # Fetch the flow duration, hard age, and idle age into the variables
3535 # whose names are given as arguments. Rounds DURATION down to the
3536 # nearest integer. If hard_age doesn't appear in the output, sets
3537 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3540 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3542 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3543 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3544 AS_VAR_COPY([$1], [duration])
3546 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3547 if test X"$hard" = X; then
3550 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3552 AS_VAR_COPY([$2], [hard])
3554 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3555 if test X"$idle" = X; then
3558 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3560 AS_VAR_COPY([$3], [idle])
3563 # Add a flow and get its initial hard and idle age.
3564 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3565 get_ages duration1 hard1 idle1
3567 ovs-appctl time/stop
3568 # Warp time forward by 10 seconds, then modify the flow's actions.
3569 ovs-appctl time/warp 10000
3570 get_ages duration2 hard2 idle2
3571 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3573 # Warp time forward by 10 seconds.
3574 ovs-appctl time/warp 10000
3575 get_ages duration3 hard3 idle3
3577 # Warp time forward 10 more seconds, then pass some packets through the flow,
3578 # then warp forward a few more times because idle times are only updated
3580 ovs-appctl time/warp 10000
3581 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)'
3582 ovs-appctl time/warp 1000
3583 ovs-appctl time/warp 1000
3584 ovs-appctl time/warp 1000
3586 get_ages duration4 hard4 idle4
3588 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3589 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3590 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3592 # Duration should increase steadily over time.
3593 AT_CHECK([test $duration1 -lt $duration2])
3594 AT_CHECK([test $duration2 -lt $duration3])
3595 AT_CHECK([test $duration3 -lt $duration4])
3597 # Hard age should be "none" initially because it's the same as flow_duration,
3598 # then it should increase.
3599 AT_CHECK([test $hard1 = none])
3600 AT_CHECK([test $hard2 = none])
3601 AT_CHECK([test $hard3 != none])
3602 AT_CHECK([test $hard4 != none])
3603 AT_CHECK([test $hard3 -lt $hard4])
3605 # Idle age should increase from 1 to 2 to 3, then decrease.
3606 AT_CHECK([test $idle1 -lt $idle2])
3607 AT_CHECK([test $idle2 -lt $idle3])
3608 AT_CHECK([test $idle3 -gt $idle4])
3610 # Check some invariant relationships.
3611 AT_CHECK([test $duration1 = $idle1])
3612 AT_CHECK([test $duration2 = $idle2])
3613 AT_CHECK([test $duration3 = $idle3])
3614 AT_CHECK([test $idle3 -gt $hard3])
3615 AT_CHECK([test $idle4 -lt $hard4])
3616 AT_CHECK([test $hard4 -lt $duration4])
3621 AT_SETUP([ofproto-dpif - fin_timeout])
3623 ovs-appctl time/stop
3624 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3625 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3627 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3630 # Check that a TCP SYN packet does not change the timeout. (Because
3631 # flow stats updates are mainly what implements the fin_timeout
3632 # feature, we warp forward a couple of times to ensure that flow stats
3633 # run before re-checking the flow table.)
3634 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3635 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3639 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3641 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3643 # Check that a TCP FIN packet does change the timeout.
3644 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3645 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3648 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3650 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3655 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3656 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3657 ADD_OF_PORTS([br0], [1], [2])
3658 ADD_OF_PORTS([br1], [3])
3660 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3667 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3668 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3669 ADD_OF_PORTS([br0], [1], [2])
3670 ADD_OF_PORTS([br1], [3])
3672 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3673 dummy@ovs-dummy: hit:0 missed:0
3675 br0 65534/100: (dummy)
3679 br1 65534/101: (dummy)
3685 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3686 # bump max-idle to avoid the flows being reclaimed behind us
3687 OVS_VSWITCHD_START([add-br br1 -- \
3688 set bridge br1 datapath-type=dummy fail-mode=secure -- \
3689 set Open_vSwitch . other_config:max-idle=10000])
3690 ADD_OF_PORTS([br0], [1], [2])
3691 ADD_OF_PORTS([br1], [3])
3693 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)'])
3694 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)'])
3695 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)'])
3696 sleep 1 # wait for upcall handlers
3697 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3698 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
3699 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
3702 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3703 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
3706 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3707 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3708 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3711 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3712 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3718 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
3719 OVS_VSWITCHD_START([dnl
3720 add-port br0 p1 -- set Interface p1 type=dummy
3722 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3723 ON_EXIT([kill `cat ovs-ofctl.pid`])
3725 AT_CAPTURE_FILE([ofctl_monitor.log])
3726 AT_DATA([flows.txt], [dnl
3727 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3728 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3730 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3732 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3733 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3735 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3736 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)
3737 dnl (label 20, exp 0, [S], ttl 32)
3738 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3739 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3741 for dl_src in 00 01; do
3742 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"])
3744 sleep 1 # wait for the datapath flow installed
3745 for dl_src in 00 01; do
3746 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3747 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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))
3755 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
3756 OVS_VSWITCHD_START([dnl
3757 add-port br0 p1 -- set Interface p1 type=dummy
3759 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3760 ON_EXIT([kill `cat ovs-ofctl.pid`])
3762 AT_CAPTURE_FILE([ofctl_monitor.log])
3763 AT_DATA([flows.txt], [dnl
3764 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3765 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3767 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3769 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3770 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3771 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3773 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3774 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)
3775 dnl (label 20, exp 0, ttl 32)
3776 dnl (label 20, exp 0, ttl 32)
3777 dnl (label 20, exp 0, [S], ttl 32)
3778 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3779 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3781 for dl_src in 00 01; do
3782 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"])
3784 sleep 1 # wait for the datapath flow installed
3785 for dl_src in 00 01; do
3786 AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3787 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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))
3794 AT_SETUP([ofproto-dpif - patch ports])
3795 OVS_VSWITCHD_START([add-br br1 \
3796 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3797 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3798 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3800 ADD_OF_PORTS([br0], [2])
3801 ADD_OF_PORTS([br1], [3])
3803 AT_CHECK([ovs-appctl time/stop])
3804 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3806 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3807 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3809 for i in $(seq 1 10); do
3810 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)'
3811 if [[ $i -eq 1 ]]; then
3816 for i in $(seq 1 5); do
3817 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)'
3818 if [[ $i -eq 1 ]]; then
3823 AT_CHECK([ovs-appctl time/warp 500], [0],
3826 sleep 1 # wait for log writer
3828 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3829 dummy@ovs-dummy: hit:13 missed:2
3831 br0 65534/100: (dummy)
3833 pbr0 1/none: (patch: peer=pbr1)
3835 br1 65534/101: (dummy)
3837 pbr1 1/none: (patch: peer=pbr0)
3840 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3841 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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
3842 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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
3845 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3846 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:9, bytes:540, used:0.0s, actions:101,3,2
3848 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3849 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:4, bytes:240, used:0.0s, actions:100,2,3
3852 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3853 OFPST_PORT reply (xid=0x4): 1 ports
3854 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3855 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3858 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3859 OFPST_PORT reply (xid=0x4): 1 ports
3860 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3861 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3867 AT_SETUP([ofproto-dpif - port duration])
3868 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3869 ADD_OF_PORTS([br0], 1, 2)
3871 ovs-appctl time/stop
3872 ovs-appctl time/warp 10000
3874 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3875 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3884 dnl ----------------------------------------------------------------------
3885 AT_BANNER([ofproto-dpif -- megaflows])
3887 AT_SETUP([ofproto-dpif megaflow - port classification])
3889 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3890 ADD_OF_PORTS([br0], [1], [2])
3891 AT_DATA([flows.txt], [dnl
3892 table=0 in_port=1 actions=output(2)
3894 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3895 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)'])
3897 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)'])
3899 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3900 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
3905 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3907 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3908 ADD_OF_PORTS([br0], [1], [2])
3909 AT_DATA([flows.txt], [dnl
3910 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3912 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3913 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)'])
3914 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)'])
3916 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3917 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
3918 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
3923 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3925 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3926 ADD_OF_PORTS([br0], [1], [2])
3927 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], [])
3928 AT_DATA([flows.txt], [dnl
3929 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3931 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3932 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)'])
3933 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)'])
3935 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3936 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
3937 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
3942 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3944 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3945 ADD_OF_PORTS([br0], [1], [2])
3946 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], [])
3947 AT_DATA([flows.txt], [dnl
3948 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3950 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3951 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)'])
3952 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)'])
3954 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3955 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
3956 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
3961 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3963 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3964 ADD_OF_PORTS([br0], [1], [2])
3965 AT_DATA([flows.txt], [dnl
3966 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3968 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3969 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)'])
3971 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)'])
3973 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3974 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
3979 AT_SETUP([ofproto-dpif megaflow - normal])
3981 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3982 ADD_OF_PORTS([br0], [1], [2])
3983 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3984 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)'])
3985 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)'])
3987 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3988 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
3989 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
3994 AT_SETUP([ofproto-dpif megaflow - mpls])
3996 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3997 ADD_OF_PORTS([br0], [1], [2])
3998 AT_DATA([flows.txt], [dnl
3999 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
4000 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
4002 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4003 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)'])
4004 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)'])
4006 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4007 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4008 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4013 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4015 # IP_VERSION_TYPE is used in AT_SETUP
4016 m4_define([CHECK_MEGAFLOW_NETFLOW],
4017 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4019 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4020 ADD_OF_PORTS([br0], [1], [2])
4022 dnl NetFlow configuration disables wildcarding relevant fields
4023 ON_EXIT([kill `cat test-netflow.pid`])
4024 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4025 AT_CAPTURE_FILE([netflow.log])
4026 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4028 set Bridge br0 netflow=@nf -- \
4029 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4030 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4032 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4033 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4034 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)'])
4036 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4037 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4038 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4043 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4044 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4046 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4048 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4049 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4050 set interface p2 type=dummy ofport_request=2 -- \
4051 set interface p3 type=dummy ofport_request=3])
4052 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4054 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4056 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4057 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)'])
4058 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)'])
4060 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4061 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4062 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4067 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4069 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4070 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4071 set interface p2 type=dummy ofport_request=2 -- \
4072 set interface p3 type=dummy ofport_request=3])
4073 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4075 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4077 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4078 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)'])
4079 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)'])
4081 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4082 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4083 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4088 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4089 # Create bond0 on br0 with interfaces p0 and p1
4090 # and bond1 on br1 with interfaces p2 and p3
4091 # with p0 patched to p2 and p1 patched to p3.
4093 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4094 other-config:lacp-time=fast \
4095 other-config:bond-rebalance-interval=0 -- \
4096 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4097 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4099 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4100 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4101 fail-mode=secure -- \
4102 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4103 other-config:lacp-time=fast \
4104 other-config:bond-rebalance-interval=0 -- \
4105 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4106 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4108 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4110 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4111 ADD_OF_PORTS([br0], [7])
4112 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4113 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4114 ovs-appctl time/stop
4115 ovs-appctl time/warp 5000
4116 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)'])
4117 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)'])
4119 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4120 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4121 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4126 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4128 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4129 ADD_OF_PORTS([br0], [1], [2])
4130 AT_DATA([flows.txt], [dnl
4131 table=0 in_port=1,ip actions=resubmit(90)
4132 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4134 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4135 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)'])
4136 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)'])
4138 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4139 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4140 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4145 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4147 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4148 ADD_OF_PORTS([br0], [1], [2])
4149 AT_DATA([flows.txt], [dnl
4150 table=0 in_port=1,ip actions=resubmit(,1)
4151 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4153 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4154 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)'])
4155 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=
4156 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4158 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4159 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4160 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4165 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4167 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4168 ADD_OF_PORTS([br0], [1], [2])
4169 AT_DATA([flows.txt], [dnl
4170 table=0 in_port=1,ip actions=goto_table(1)
4171 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4173 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4174 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)'])
4175 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)'])
4177 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4178 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4179 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4184 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4186 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4187 ADD_OF_PORTS([br0], [1], [2], [3])
4189 set Bridge br0 mirrors=@m --\
4190 --id=@p3 get Port p3 --\
4191 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4193 AT_DATA([flows.txt], [dnl
4194 in_port=1 actions=output:2
4196 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4197 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)'])
4199 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)'])
4201 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4202 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4207 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4209 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4210 ADD_OF_PORTS([br0], [1], [2], [3])
4212 set Bridge br0 mirrors=@m --\
4213 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4214 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4216 AT_DATA([flows.txt], [dnl
4217 in_port=1 actions=output:2
4219 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4220 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))'])
4221 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)'])
4223 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4224 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4225 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4230 AT_SETUP([ofproto-dpif megaflow - move action])
4232 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4233 ADD_OF_PORTS([br0], [1], [2])
4234 AT_DATA([flows.txt], [dnl
4235 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4236 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4237 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4239 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4240 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)'])
4241 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)'])
4243 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4244 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4245 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4250 AT_SETUP([ofproto-dpif megaflow - push action])
4252 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4253 ADD_OF_PORTS([br0], [1], [2])
4254 AT_DATA([flows.txt], [dnl
4255 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4257 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4258 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4259 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4261 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4262 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4263 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4268 AT_SETUP([ofproto-dpif megaflow - learning])
4270 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4271 ADD_OF_PORTS([br0], [1], [2])
4272 AT_DATA([flows.txt], [dnl
4273 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
4275 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4276 ovs-appctl time/stop
4277 # We send each packet twice because the first packet in each flow causes the
4278 # flow table to change and thus revalidations, which (depending on timing)
4279 # can keep a megaflow from being installed. The revalidations are done by
4280 # the second iteration, allowing the flows to be installed.
4282 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)'])
4283 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)'])
4284 ovs-appctl time/warp 100
4287 dnl The original flow is missing due to a revalidation.
4288 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4289 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4290 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4295 AT_SETUP([ofproto-dpif megaflow - tunnels])
4297 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4298 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4299 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4300 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4301 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4303 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4304 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4305 ofport_request=4 options:key=flow])
4306 AT_DATA([flows.txt], [dnl
4307 in_port=1,actions=output(2)
4308 in_port=3,actions=output(4)
4310 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4311 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4312 dnl will cause the packet to be dropped.
4313 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)'])
4315 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)'])
4316 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)'])
4318 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)'])
4320 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4321 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4322 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4323 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4328 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4330 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4331 ADD_OF_PORTS([br0], [1], [2])
4332 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], [])
4333 AT_DATA([flows.txt], [dnl
4334 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4336 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4337 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)'])
4338 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)'])
4340 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4341 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4342 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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>
4347 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4349 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4350 ADD_OF_PORTS([br0], [1], [2])
4351 AT_DATA([flows.txt], [dnl
4352 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4354 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4355 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)'])
4356 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)'])
4358 dnl The megaflows do not match the same fields, since the first packet
4359 dnl is essentially a no-op. (The new destination MAC is the same as the
4360 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4361 dnl so that a packet that doesn't need its MAC address changed doesn't
4362 dnl hide one that does. Since the first entry doesn't need to change,
4363 dnl only the destination MAC address is matched (as decided by
4364 dnl ofproto-dpif). The second entry actually updates the destination
4365 dnl MAC, so both the source and destination MAC addresses are
4366 dnl un-wildcarded, since the ODP commit functions update both the source
4367 dnl and destination MAC addresses.
4368 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4369 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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
4370 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(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
4375 AT_SETUP([ofproto-dpif megaflow - disabled])
4377 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4378 ADD_OF_PORTS([br0], [1], [2])
4379 AT_DATA([flows.txt], [dnl
4380 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4381 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4383 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4385 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4386 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4387 for i in 1 2 3 4; do
4388 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)'])
4389 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)'])
4390 if [[ $i -eq 1 ]]; then
4395 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4396 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), actions:2
4397 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), actions:drop
4399 AT_CHECK([cat ovs-vswitchd.log | grep '00:09.*packets:3' | FILTER_FLOW_DUMP], [0], [dnl
4400 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
4402 AT_CHECK([cat ovs-vswitchd.log | grep '00:0b.*packets:3' | FILTER_FLOW_DUMP], [0], [dnl
4403 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
4408 AT_SETUP([ofproto-dpif - datapath port number change])
4409 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4410 ADD_OF_PORTS([br0], 1)
4412 # Trace a flow that should output to p1.
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: 1
4418 # Change p1's port number to 5.
4419 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4421 # Trace a flow that should output to p1 in its new location.
4422 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4424 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4429 # Tests the bundling with various bfd and cfm configurations.
4430 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4431 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4432 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4433 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4434 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4435 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4436 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4437 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4438 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4439 set Interface p0 cfm_mpid=1 -- \
4440 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4442 ovs-appctl time/stop
4443 # advance the clock to stablize everything.
4444 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4445 # cfm/show should show 'recv' fault.
4446 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4449 # bfd/show should show 'up'.
4450 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4451 Local Session State: up
4452 Remote Session State: up
4453 Local Session State: up
4454 Remote Session State: up
4456 # bond/show should show 'may-enable: true' for all slaves.
4457 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4464 # now disable the bfd on p1.
4465 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4466 # advance the clock to stablize everything.
4467 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4468 # cfm/show should show 'recv' fault.
4469 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4472 # bfd/show should show 'down'.
4473 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4474 Local Session State: down
4475 Remote Session State: down
4477 # bond/show should show 'may-enable: false' for p0.
4478 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4483 # now enable the bfd on p1 and disable bfd on p0.
4484 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4485 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4486 # advance the clock to stablize everything.
4487 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4488 # cfm/show should show 'recv' fault.
4489 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4492 # bfd/show should show 'down'.
4493 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4494 Local Session State: down
4495 Remote Session State: down
4497 # bond/show should show 'may-enable: false' for p0 and p1.
4498 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4508 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4509 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4512 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4514 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4515 # disable bfd on p0.
4516 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4518 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4519 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4522 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4524 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4525 # disable cfm on p0.
4526 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4528 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4529 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4531 # enable both bfd and cfm on p0.
4532 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4534 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4535 # disable bfd on p0.
4536 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4537 # check log, there should not be the log of thread terminated.
4538 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4540 # reenable bfd on p0.
4541 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4542 # check log, should still be on log of thread created.
4543 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4544 monitor thread created
4546 # disable bfd and cfm together.
4547 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4549 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4554 # this test helps avoid the deadlock between the main thread and monitor thread.
4555 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4558 for i in `seq 1 199`
4560 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])
4566 AT_BANNER([ofproto-dpif - flow translation resource limits])
4568 AT_SETUP([ofproto-dpif - infinite resubmit])
4570 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4571 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4573 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4575 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4578 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4581 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4583 ADD_OF_PORTS([br0], 1)
4584 (for i in `seq 1 64`; do
4586 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4588 echo "in_port=65, actions=local") > flows
4589 AT_CHECK([ovs-ofctl add-flows br0 flows])
4590 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4591 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4593 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4596 AT_SETUP([ofproto-dpif - too many output actions])
4598 ADD_OF_PORTS([br0], 1)
4599 (for i in `seq 1 12`; do
4601 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4603 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4604 AT_CHECK([ovs-ofctl add-flows br0 flows])
4605 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4606 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4609 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4611 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4614 AT_SETUP([ofproto-dpif - stack too deep])
4616 ADD_OF_PORTS([br0], 1)
4617 (for i in `seq 1 12`; do
4619 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4621 push="push:NXM_NX_REG0[[]]"
4622 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4623 AT_CHECK([ovs-ofctl add-flows br0 flows])
4624 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4625 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4627 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
4631 AT_SETUP([ofproto-dpif packet-out controller])
4633 ADD_OF_PORTS([br0], 1, 2)
4635 AT_CHECK([ovs-ofctl add-flow br0 'dl_dst=50:54:00:00:00:0a actions=controller'])
4637 AT_CAPTURE_FILE([ofctl_monitor.log])
4638 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4641 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER controller '50540000000a5054000000091234'])
4644 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4645 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4646 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
4647 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4649 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
4650 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4652 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
4653 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4656 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
4657 dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
4661 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2): 254 tables"
4662 echo " 0: active=1, lookup=0, matched=0"
4664 while test $x -lt 254; do
4665 echo " $x: active=0, lookup=0, matched=0"
4668 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
4674 AT_SETUP([ofproto-dpif packet-out controller (patch port)])
4677 add-port br0 p1 -- \
4678 set interface p1 type=patch options:peer=p2 -- \
4680 set bridge br1 datapath-type=dummy -- \
4681 set bridge br1 fail-mode=secure -- \
4682 set bridge br1 protocols='[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13]' -- \
4683 add-port br1 p2 -- \
4684 set interface p2 type=patch options:peer=p1 --])
4686 AT_CAPTURE_FILE([ofctl_monitor.log])
4687 AT_CHECK([ovs-ofctl monitor br1 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4690 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER output:1 '50540000000a5054000000091234'])
4693 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4694 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4695 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
4696 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4698 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
4699 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4701 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
4702 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4705 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2): 254 tables"
4707 while test $x -lt 254; do
4708 echo " $x: active=0, lookup=0, matched=0"
4711 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
4713 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2): 254 tables"
4714 echo " 0: active=0, lookup=3, matched=0"
4716 while test $x -lt 254; do
4717 echo " $x: active=0, lookup=0, matched=0"
4720 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br1 ], [0], [expout])
4726 AT_SETUP([ofproto-dpif packet-out goto_table])
4728 ADD_OF_PORTS([br0], 1, 2)
4730 AT_DATA([flows.txt], [dnl
4731 table=0 dl_dst=50:54:00:00:00:0a actions=goto_table(1)
4732 table=1 dl_dst=50:54:00:00:00:0a actions=controller
4734 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
4736 AT_CAPTURE_FILE([ofctl_monitor.log])
4737 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4740 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(0x1234)'
4743 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
4744 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4745 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4746 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4747 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4749 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4750 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4752 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4753 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4756 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
4758 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
4759 n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=goto_table:1
4760 table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
4761 OFPST_FLOW reply (OF1.3):
4764 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2): 254 tables"
4765 echo " 0: active=1, lookup=3, matched=3"
4766 echo " 1: active=1, lookup=3, matched=3"
4768 while test $x -lt 254; do
4769 echo " $x: active=0, lookup=0, matched=0"
4772 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
4778 AT_SETUP([ofproto-dpif packet-out table-miss (continue)])
4780 ADD_OF_PORTS([br0], 1, 2)
4782 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 'table=1 dl_dst=50:54:00:00:00:0a actions=controller'])
4783 AT_CHECK([ovs-ofctl -O OpenFlow13 mod-table br0 all continue])
4785 AT_CAPTURE_FILE([ofctl_monitor.log])
4786 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4789 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(0x1234)'
4792 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
4793 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4794 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4795 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4796 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4798 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4799 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4801 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4802 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4805 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
4807 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
4808 table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
4809 OFPST_FLOW reply (OF1.3):
4812 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2): 254 tables"
4813 echo " 0: active=0, lookup=3, matched=0"
4814 echo " 1: active=1, lookup=3, matched=3"
4816 while test $x -lt 254; do
4817 echo " $x: active=0, lookup=0, matched=0"
4820 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
4825 AT_SETUP([ofproto-dpif - ICMPv6])
4827 ADD_OF_PORTS([br0], 1)
4829 AT_CAPTURE_FILE([ofctl_monitor.log])
4831 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4833 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
4835 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4837 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4838 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
4839 icmp6,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=00:00:86:05:80:da,dl_dst=00:60:97:07:69:ea,ipv6_src=fe80::200:86ff:fe05:80da,ipv6_dst=fe80::260:97ff:fe07:69ea,ipv6_label=0x00000,nw_tos=0,nw_ecn=0,nw_ttl=255,icmp_type=135,icmp_code=0,nd_target=fe80::260:97ff:fe07:69ea,nd_sll=00:00:86:05:80:da,nd_tll=00:00:00:00:00:00