1 AT_BANNER([ofproto-dpif])
3 # Strips out uninteresting parts of flow output, as well as parts
4 # that vary from one run to another (e.g., timing and bond actions).
5 m4_define([STRIP_USED], [[sed '
6 s/used:[0-9]*\.[0-9]*/used:0.0/
8 m4_define([STRIP_XOUT], [[sed '
9 s/used:[0-9]*\.[0-9]*/used:0.0/
10 s/actions:.*/actions: <del>/
11 s/packets:[0-9]*/packets:0/
12 s/bytes:[0-9]*/bytes:0/
15 AT_SETUP([ofproto-dpif - dummy interface])
16 # Create br0 with interfaces p1 and p7
17 # and br1 with interfaces p2 and p8
18 # with p1 and p2 connected via unix domain socket
20 [add-port br0 p1 -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
21 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
23 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
24 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
26 add-port br1 p2 -- set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
27 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
29 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
30 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
32 ovs-appctl time/warp 5000
33 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)'])
34 AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
35 ovs-appctl time/warp 100
36 sleep 1 # wait for forwarders process packets
38 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
39 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
40 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
43 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_XOUT], [0], [dnl
44 skb_priority(0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
45 skb_priority(0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
50 AT_SETUP([ofproto-dpif, active-backup bonding])
51 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
52 # and br1 with interfaces p3, p4 and p8.
53 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
55 [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
56 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
57 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
58 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
60 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
61 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
63 add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
64 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
65 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
67 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
68 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
69 ovs-appctl netdev-dummy/set-admin-state up
70 ovs-appctl time/warp 100
71 ovs-appctl netdev-dummy/set-admin-state p2 down
73 ovs-appctl time/warp 100
74 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)'])
75 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)'])
76 ovs-appctl time/warp 100
77 ovs-appctl netdev-dummy/set-admin-state p2 up
78 ovs-appctl netdev-dummy/set-admin-state p1 down
79 ovs-appctl time/warp 100
80 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)'])
81 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)'])
82 ovs-appctl time/warp 100
83 ovs-appctl time/warp 100
84 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_XOUT], [0], [dnl
85 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
86 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
87 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
88 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
89 skb_priority(0),in_port(4),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035), packets:0, bytes:0, used:never, actions: <del>
90 skb_priority(0),in_port(4),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035), packets:0, bytes:0, used:never, actions: <del>
95 AT_SETUP([ofproto-dpif, balance-slb bonding])
96 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
97 # and br1 with interfaces p4, p5, p6 and p8.
98 # p1 <-> p4, p2 <-> p5, p3 <-> p6
99 # Send some traffic, make sure the traffic are spread based on source mac.
101 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
102 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
103 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
104 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
105 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
107 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
108 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
109 fail-mode=secure -- \
110 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
111 add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
112 add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
113 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
115 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
116 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
117 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
119 ovs-appctl netdev-dummy/set-admin-state up
121 ovs-appctl time/warp 100
123 for i in `seq 0 100 |xargs printf '%02x\n'`;
125 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)"
126 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
129 ovs-appctl time/warp 100
130 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
131 # Make sure there is resonable distribution to all three ports.
132 # We don't want to make this check precise, in case hash function changes.
133 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
134 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
135 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
139 AT_SETUP([ofproto-dpif, balance-tcp bonding])
140 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
141 # and br1 with interfaces bond1(p4, p5, p6) and p8.
143 # Send some traffic, make sure the traffic are spread based on L4 headers.
145 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
146 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
147 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
148 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
149 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
150 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
152 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
153 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
154 fail-mode=secure -- \
155 add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
156 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
157 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
158 set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
159 set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
160 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
161 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
163 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
164 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
165 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
169 ovs-appctl time/warp 100
170 ovs-appctl lacp/show > lacp.txt
171 ovs-appctl bond/show > bond.txt
173 for i in `seq 10 100` ;
175 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)"
176 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
179 ovs-appctl time/warp 100
180 ovs-appctl time/warp 100
181 ovs-appctl time/warp 100
182 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
183 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
184 # Make sure there is resonable distribution to all three ports.
185 # We don't want to make this check precise, in case hash function changes.
186 AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 7])
187 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 7])
188 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 7])
192 AT_SETUP([ofproto-dpif - resubmit])
194 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
195 [16], [17], [18], [19], [20], [21])
196 AT_DATA([flows.txt], [dnl
197 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
198 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
199 table=0 in_port=3 priority=2000 icmp actions=output(20)
200 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
201 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
202 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
204 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
205 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])
206 AT_CHECK([tail -1 stdout], [0],
207 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
212 AT_SETUP([ofproto-dpif - goto table])
214 ADD_OF_PORTS([br0], [1], [10], [11])
215 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
216 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
217 echo "table=64 actions=output(11)" >> flows.txt
218 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
219 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])
220 AT_CHECK([tail -1 stdout], [0],
221 [Datapath actions: 10,11
226 AT_SETUP([ofproto-dpif - write actions])
228 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
229 AT_DATA([flows.txt], [dnl
230 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
231 table=1 ip actions=write_actions(output(13)),goto_table(2)
232 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
234 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
235 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])
236 AT_CHECK([tail -2 stdout], [0],
237 [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
238 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
243 AT_SETUP([ofproto-dpif - clear actions])
245 ADD_OF_PORTS([br0], [1], [10], [11], [12])
246 AT_DATA([flows.txt], [dnl
247 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
248 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
250 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
251 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])
252 AT_CHECK([tail -2 stdout], [0],
253 [Megaflow: recirc_id=0,skb_priority=0,tcp,in_port=1,nw_frag=no,tp_src=8,tp_dst=9
254 Datapath actions: 10,set(tcp(src=91,dst=9)),11
259 AT_SETUP([ofproto-dpif - group chaining not supported])
261 ADD_OF_PORTS([br0], [1], [10], [11])
262 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'],
264 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
265 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
270 AT_SETUP([ofproto-dpif - all group in action list])
272 ADD_OF_PORTS([br0], [1], [10], [11])
273 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'])
274 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
275 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])
276 AT_CHECK([tail -2 stdout], [0],
277 [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
278 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
283 AT_SETUP([ofproto-dpif - indirect group in action list])
285 ADD_OF_PORTS([br0], [1], [10])
286 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
287 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
288 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])
289 AT_CHECK([tail -1 stdout], [0],
290 [Datapath actions: 10
295 AT_SETUP([ofproto-dpif - all group in action set])
297 ADD_OF_PORTS([br0], [1], [10], [11])
298 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'])
299 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
300 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])
301 AT_CHECK([tail -2 stdout], [0],
302 [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
303 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
308 AT_SETUP([ofproto-dpif - indirect group in action set])
310 ADD_OF_PORTS([br0], [1], [10])
311 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
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: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])
314 AT_CHECK([tail -1 stdout], [0],
315 [Datapath actions: 10
320 AT_SETUP([ofproto-dpif - select group])
322 ADD_OF_PORTS([br0], [1], [10], [11])
323 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
324 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
326 # Try a bunch of different flows and make sure that they get distributed
328 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
329 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])
330 tail -1 stdout >> results
332 sort results | uniq -c
333 AT_CHECK([sort results | uniq], [0],
334 [Datapath actions: 10
340 AT_SETUP([ofproto-dpif - select group with watch port])
342 ADD_OF_PORTS([br0], [1], [10], [11])
343 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
344 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
345 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])
346 AT_CHECK([tail -1 stdout], [0],
347 [Datapath actions: 11
352 AT_SETUP([ofproto-dpif - select group with weight])
354 ADD_OF_PORTS([br0], [1], [10], [11], [12])
355 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'])
356 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
357 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])
358 AT_CHECK([tail -1 stdout], [0],
359 [Datapath actions: 11
364 AT_SETUP([ofproto-dpif - fast failover group])
366 ADD_OF_PORTS([br0], [1], [10], [11])
367 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'])
368 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
369 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])
370 AT_CHECK([tail -1 stdout], [0],
371 [Datapath actions: drop
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=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
1056 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
1057 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
1058 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
1059 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
1060 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
1061 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
1062 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
1063 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1064 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1065 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
1066 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
1068 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1071 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1074 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)'
1076 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1077 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1079 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1080 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1081 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
1083 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1084 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
1086 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1087 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
1090 dnl Singleton controller action.
1091 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1094 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)'
1096 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1097 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1099 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1100 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1101 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
1103 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1104 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
1106 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1107 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
1110 dnl Modified controller action.
1111 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1114 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)'
1116 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1117 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1119 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1120 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1121 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
1123 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1124 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
1126 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1127 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
1130 dnl Modified VLAN controller action.
1131 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1134 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)'
1136 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1137 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1139 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1140 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1141 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
1143 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1144 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
1146 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1147 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
1150 dnl Modified MPLS controller action.
1151 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1154 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1156 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1157 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1159 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1160 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1161 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
1163 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1164 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
1166 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1167 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
1170 dnl Modified MPLS controller action.
1171 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1174 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)'
1176 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1177 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1179 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1180 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1181 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
1183 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1184 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
1186 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1187 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
1190 dnl Modified MPLS controller action.
1191 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1193 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)
1196 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)'
1198 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1199 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1201 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1202 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1203 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
1205 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1206 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
1208 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1209 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
1212 dnl Modified MPLS controller action.
1213 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1216 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))'
1218 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1219 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1221 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1222 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1223 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
1225 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1226 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
1228 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1229 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
1232 dnl Modified MPLS controller action.
1233 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1236 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)'
1238 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1239 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1241 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1242 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1243 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
1245 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1246 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
1248 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1249 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
1252 dnl Modified MPLS controller action.
1253 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1256 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)'
1258 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1259 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1261 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1262 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1263 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
1265 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1266 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
1268 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1269 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
1272 dnl Modified MPLS controller action.
1273 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1276 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)'
1278 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1279 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1281 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1282 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1283 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
1285 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1286 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
1288 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1289 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
1292 dnl Modified MPLS controller action.
1293 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1296 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)'
1298 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1299 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1301 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1302 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1303 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
1305 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1306 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
1308 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1309 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
1312 dnl Modified MPLS actions.
1313 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1316 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)'
1318 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1319 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1321 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1322 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1323 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
1325 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1326 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
1328 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1329 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
1332 dnl Modified MPLS ipv6 controller action.
1333 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1336 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)'
1338 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1339 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1341 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1342 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1343 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
1345 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1346 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
1348 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1349 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1353 dnl Modified MPLS pop action.
1354 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1355 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)
1356 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1358 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1361 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'
1364 # 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)'
1366 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1367 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1369 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1370 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1371 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
1373 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1374 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
1376 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1377 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
1381 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1384 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)'
1386 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1387 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1389 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1390 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1391 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
1393 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1394 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
1396 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)
1397 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
1399 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)
1400 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
1402 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)
1403 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
1405 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)
1406 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
1408 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)
1409 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
1411 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)
1412 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=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
1414 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)
1415 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86,tcp_flags=0x001 tcp_csum:316d
1419 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1422 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'
1424 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1425 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1427 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1428 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1429 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
1431 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1432 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
1434 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)
1435 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
1437 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)
1438 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
1440 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)
1441 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
1443 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)
1444 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
1446 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)
1447 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
1449 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)
1450 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1452 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)
1453 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
1456 dnl Modified ARP controller action.
1457 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1460 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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)'
1463 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1464 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1465 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1466 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1467 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
1468 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1469 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
1470 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1471 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
1472 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1473 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
1474 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1475 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.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
1476 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1477 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=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
1478 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1479 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=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
1480 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1481 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.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
1482 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1483 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1486 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1489 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1492 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'
1495 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1496 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1497 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1498 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1499 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
1501 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1502 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
1504 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)
1505 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
1507 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)
1508 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
1510 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)
1511 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
1513 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)
1514 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
1516 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)
1517 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
1519 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)
1520 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
1522 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)
1523 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
1526 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1527 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1528 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1529 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)
1530 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)
1531 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)
1532 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)
1533 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)
1534 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1535 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1536 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
1537 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
1538 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
1539 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
1540 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
1541 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
1542 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
1543 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
1544 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
1545 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
1546 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
1547 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
1548 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1549 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1557 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1558 OVS_VSWITCHD_START([dnl
1559 add-port br0 p1 -- set Interface p1 type=dummy
1561 ON_EXIT([kill `cat ovs-ofctl.pid`])
1563 AT_CAPTURE_FILE([ofctl_monitor.log])
1564 # A table-miss flow has priority 0 and no match
1565 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1567 dnl Singleton controller action.
1568 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1571 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)'
1573 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1574 ovs-appctl -t ovs-ofctl exit
1576 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1577 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1578 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
1580 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1581 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
1583 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1584 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
1587 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1589 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1590 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1598 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1599 OVS_VSWITCHD_START([dnl
1600 add-port br0 p1 -- set Interface p1 type=dummy
1602 ON_EXIT([kill `cat ovs-ofctl.pid`])
1604 AT_CAPTURE_FILE([ofctl_monitor.log])
1605 # A table-miss flow has priority 0 and no match
1606 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1608 dnl Singleton controller action.
1609 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1612 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)'
1614 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1615 ovs-appctl -t ovs-ofctl exit
1617 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1619 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1620 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1621 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
1623 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1624 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
1626 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1627 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
1630 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1632 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1633 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1634 OFPST_FLOW reply (OF1.3):
1640 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1642 ADD_OF_PORTS([br0], [1], [2])
1644 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1645 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'
1647 # Input some packets that should follow the arp modification slow-path.
1649 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)'
1651 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1653 # Check the packets that were output.
1654 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1655 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
1656 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
1657 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
1658 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
1659 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
1660 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
1661 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
1662 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
1663 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1669 AT_SETUP([ofproto-dpif - VLAN handling])
1671 [set Bridge br0 fail-mode=standalone -- \
1672 add-port br0 p1 trunks=10,12 -- \
1673 add-port br0 p2 tag=10 -- \
1674 add-port br0 p3 tag=12 \
1675 other-config:priority-tags=true -- \
1676 add-port br0 p4 tag=12 -- \
1677 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1678 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1679 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1680 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1681 other-config:priority-tags=true -- \
1682 set Interface p1 type=dummy -- \
1683 set Interface p2 type=dummy -- \
1684 set Interface p3 type=dummy -- \
1685 set Interface p4 type=dummy -- \
1686 set Interface p5 type=dummy -- \
1687 set Interface p6 type=dummy -- \
1688 set Interface p7 type=dummy -- \
1689 set Interface p8 type=dummy --])
1691 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1692 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1698 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1699 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1702 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1703 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1707 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1708 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1711 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1712 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1713 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1714 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1715 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1722 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1723 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1724 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1731 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1732 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1733 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1740 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1741 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1742 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1743 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1744 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1747 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1748 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1749 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1750 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1751 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1752 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1753 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1756 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1757 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1758 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1759 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1760 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1761 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1762 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1765 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1766 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1767 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1768 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1769 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1770 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1771 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1774 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1775 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1783 if test $vlan = none; then
1784 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1786 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))"
1789 echo "----------------------------------------------------------------------"
1790 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1792 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1793 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1795 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1797 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1803 AT_SETUP([ofproto-dpif - MPLS handling])
1804 OVS_VSWITCHD_START([dnl
1805 add-port br0 p1 -- set Interface p1 type=dummy
1807 ON_EXIT([kill `cat ovs-ofctl.pid`])
1809 AT_CAPTURE_FILE([ofctl_monitor.log])
1810 AT_DATA([flows.txt], [dnl
1811 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1812 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1813 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1815 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1817 dnl In this test, we push an MPLS tag to an ethernet packet.
1818 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1821 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)'
1823 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1824 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1826 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1827 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1828 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
1829 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1830 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1831 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1832 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1834 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1835 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
1836 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1837 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1838 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1839 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1841 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1842 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
1843 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1844 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1845 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1846 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1849 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1850 dnl copied exactly, except for the BOS bit.
1851 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1854 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)'
1856 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1857 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1859 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
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:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1862 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1863 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1864 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1865 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1867 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1868 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
1869 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1870 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1871 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1872 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1874 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1875 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
1876 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1877 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1878 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1879 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1882 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1883 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1884 dnl to the MPLS ethertype of the MPLS push action which differs to that
1885 dnl of the input packet.
1886 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1889 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)'
1891 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1892 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1894 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1895 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1896 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
1897 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1898 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1899 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1900 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1902 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1903 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
1904 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1905 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1906 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1907 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1909 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1910 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
1911 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1912 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1913 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1914 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1920 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1921 OVS_VSWITCHD_START([dnl
1922 add-port br0 p1 -- set Interface p1 type=dummy
1924 ON_EXIT([kill `cat ovs-ofctl.pid`])
1926 AT_CAPTURE_FILE([ofctl_monitor.log])
1927 AT_DATA([flows.txt], [dnl
1928 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
1929 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
1930 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
1931 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
1932 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
1933 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
1934 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
1935 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
1936 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
1937 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
1939 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1941 dnl Modified MPLS controller action.
1942 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1943 dnl both of these in the final flow
1944 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1947 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)'
1949 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1950 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1952 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1953 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1954 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
1955 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1956 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1957 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1958 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1959 00000040 00 00 00 00
1961 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1962 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1963 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1964 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1965 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1966 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1967 00000040 00 00 00 00
1969 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1970 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1971 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1972 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1973 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1974 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1975 00000040 00 00 00 00
1978 dnl Modified MPLS controller action.
1979 dnl In this test, the input packet in vlan-tagged, which should be stripped
1980 dnl before we push the MPLS and VLAN tags.
1981 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1984 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))'
1986 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1987 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1989 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1990 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1991 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
1992 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1993 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1994 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1995 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1997 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1998 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
1999 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2000 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2001 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2002 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2004 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2005 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
2006 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2007 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2008 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2009 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2012 dnl Modified MPLS controller action.
2013 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2014 dnl both of these in the final flow
2015 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2018 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)'
2020 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2021 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2023 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2024 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2025 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
2026 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2027 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2028 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2029 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2030 00000040 00 00 00 00
2032 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2033 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2034 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2035 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2036 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2037 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2038 00000040 00 00 00 00
2040 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2041 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2042 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2043 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2044 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2045 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2046 00000040 00 00 00 00
2049 dnl Modified MPLS controller action.
2050 dnl In this test, the input packet in vlan-tagged, which should be stripped
2051 dnl before we push the MPLS and VLAN tags.
2052 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2055 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))'
2057 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2058 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2060 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2061 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2062 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
2063 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2064 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2065 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2066 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2068 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2069 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
2070 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2071 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2072 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2073 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2075 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2076 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
2077 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2078 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2079 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2080 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2083 dnl Modified MPLS controller action.
2084 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2085 dnl actions are reordered, so we see both of these in the final flow.
2086 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2089 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)'
2091 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2092 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2094 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2095 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2096 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
2097 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2098 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2099 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2100 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2101 00000040 00 00 00 00
2103 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2104 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2105 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2106 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2107 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2108 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2109 00000040 00 00 00 00
2111 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2112 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2113 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2114 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2115 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2116 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2117 00000040 00 00 00 00
2120 dnl Modified MPLS controller action.
2121 dnl In this test, the input packet in vlan-tagged, which should be stripped
2122 dnl before we push the MPLS and VLAN tags.
2123 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2126 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))'
2128 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2129 ovs-appctl -t ovs-ofctl exit
2131 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2132 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2133 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
2134 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2135 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2136 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2137 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2139 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2140 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
2141 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2142 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2143 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2144 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2146 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2147 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
2148 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2149 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2150 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2151 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2154 dnl Modified MPLS controller action.
2155 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2156 dnl actions are reordered, so we see both of these in the final flow.
2157 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2160 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)'
2162 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2163 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2165 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2166 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2167 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
2168 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2169 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2170 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2171 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2172 00000040 00 00 00 00
2174 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2175 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2176 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2177 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2178 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2179 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2180 00000040 00 00 00 00
2182 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2183 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2184 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2185 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2186 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2187 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2188 00000040 00 00 00 00
2191 dnl Modified MPLS controller action.
2192 dnl In this test, the input packet in vlan-tagged, which should be stripped
2193 dnl before we push the MPLS and VLAN tags.
2194 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2197 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))'
2199 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2200 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2202 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2203 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2204 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
2205 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2206 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2207 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2208 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2210 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2211 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
2212 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2213 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2214 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2215 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2217 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2218 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
2219 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2220 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2221 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2222 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2225 dnl Modified MPLS controller action.
2226 dnl In this test, the input packet in vlan-tagged, which should be stripped
2227 dnl before we push the MPLS and VLAN tags.
2228 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2231 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))'
2233 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2234 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2236 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2237 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2238 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
2239 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2240 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2241 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2242 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2244 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2245 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
2246 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2247 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2248 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2249 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2251 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2252 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
2253 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2254 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2255 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2256 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2259 dnl Modified MPLS controller action.
2260 dnl In this test, the input packet in vlan-tagged, which should be modified
2261 dnl before we push MPLS and VLAN tags.
2262 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2265 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))'
2267 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2268 ovs-appctl -t ovs-ofctl exit
2270 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2271 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2272 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
2273 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2274 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2275 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2276 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2278 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2279 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
2280 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2281 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2282 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2283 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2285 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2286 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
2287 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2288 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2289 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2290 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2293 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2294 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2295 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
2296 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
2297 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
2298 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
2299 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
2300 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
2301 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
2302 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
2303 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
2304 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
2305 OFPST_FLOW reply (OF1.2):
2311 AT_SETUP([ofproto-dpif - fragment handling])
2313 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2314 AT_DATA([flows.txt], [dnl
2315 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2316 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2317 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2318 priority=50 tcp ip_frag=no actions=output:4
2319 priority=50 tcp ip_frag=first actions=output:5
2320 priority=50 tcp ip_frag=later actions=output:6
2322 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2324 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"
2325 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2326 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2327 later_flow="$base_flow,frag=later)"
2329 # mode no first later
2332 'drop 1 drop drop' \
2341 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2342 for type in no first later; do
2343 eval flow=\$${type}_flow exp_output=\$$type
2344 printf "\n%s\n" "----$mode $type-----"
2345 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2347 if test $mode = drop && test $type != no; then
2348 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2350 echo "Datapath actions: $exp_output" >> expout
2351 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2357 AT_SETUP([ofproto-dpif - exit])
2359 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2360 AT_DATA([flows.txt], [dnl
2361 in_port=1 actions=output:10,exit,output:11
2362 in_port=2 actions=output:12,resubmit:1,output:12
2363 in_port=3 actions=output:13,resubmit:2,output:14
2365 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2366 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])
2367 AT_CHECK([tail -1 stdout], [0],
2368 [Datapath actions: 10
2370 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])
2371 AT_CHECK([tail -1 stdout], [0],
2372 [Datapath actions: 12,10
2374 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])
2375 AT_CHECK([tail -1 stdout], [0],
2376 [Datapath actions: 13,12,10
2382 AT_SETUP([ofproto-dpif - mirroring, select_all])
2384 ADD_OF_PORTS([br0], 1, 2, 3)
2386 set Bridge br0 mirrors=@m --\
2387 --id=@p3 get Port p3 --\
2388 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2390 AT_DATA([flows.txt], [dnl
2391 in_port=1 actions=output:2
2392 in_port=2 actions=output:1
2394 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2396 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)"
2397 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2398 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2399 [Datapath actions: 2,3
2402 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)"
2403 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2404 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2405 [Datapath actions: 1,3
2412 AT_SETUP([ofproto-dpif - mirroring, select_src])
2414 ADD_OF_PORTS([br0], 1, 2, 3)
2416 set Bridge br0 mirrors=@m --\
2417 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2418 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2420 AT_DATA([flows.txt], [dnl
2421 in_port=1 actions=output:2
2422 in_port=2 actions=output:1
2424 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2426 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)"
2427 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2428 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2429 [Datapath actions: 2,3
2432 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)"
2433 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2434 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2435 [Datapath actions: 1
2440 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2442 ADD_OF_PORTS([br0], 1, 2)
2444 set Bridge br0 mirrors=@m --\
2445 --id=@p2 get Port p2 --\
2446 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2448 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2450 # "in_port" defaults to OFPP_NONE if it's not specified.
2451 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"
2452 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2453 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2454 [Datapath actions: 1,2
2461 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2463 ADD_OF_PORTS([br0], 1, 2, 3)
2465 set Bridge br0 mirrors=@m --\
2466 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2467 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2469 AT_DATA([flows.txt], [dnl
2470 in_port=1 actions=output:2
2471 in_port=2 actions=output:1
2473 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2475 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)"
2476 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2477 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2478 [Datapath actions: 2,3
2481 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)"
2482 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2483 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2484 [Datapath actions: 1
2491 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2493 ADD_OF_PORTS([br0], 1, 2, 3)
2495 set Bridge br0 mirrors=@m --\
2496 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2497 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2499 AT_DATA([flows.txt], [dnl
2500 in_port=1, actions=output:2
2502 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2504 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)"
2505 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2506 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2507 [Datapath actions: 2
2510 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))"
2511 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2512 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2513 [Datapath actions: 2
2516 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))"
2517 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2518 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2519 [Datapath actions: 2,3
2526 AT_SETUP([ofproto-dpif - mirroring, output_port])
2528 ADD_OF_PORTS([br0], 1, 2, 3)
2530 set Bridge br0 mirrors=@m --\
2531 --id=@p3 get Port p3 --\
2532 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2534 AT_DATA([flows.txt], [dnl
2535 in_port=1 actions=mod_vlan_vid:17,output:2
2536 in_port=2 actions=output:1
2538 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2540 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)"
2541 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2542 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2543 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2546 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)"
2547 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2548 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2549 [Datapath actions: 1,3
2555 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2557 ADD_OF_PORTS([br0], 1, 2)
2559 set Bridge br0 mirrors=@m --\
2560 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2562 AT_DATA([flows.txt], [dnl
2563 in_port=1 actions=output:2
2564 in_port=2 actions=mod_vlan_vid:17,output:1
2566 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2568 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
2569 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2570 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2572 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2573 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2575 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2577 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)"
2578 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2579 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2581 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2582 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2584 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2589 # Two testcases below are for the ofproto/trace command
2590 # The first one tests all correct syntax:
2591 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2592 # ofproto/trace br_name br_flow [-generate|packet]
2593 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2594 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2595 ADD_OF_PORTS([br0], 1, 2, 3)
2597 AT_DATA([flows.txt], [dnl
2598 in_port=1 actions=output:2
2599 in_port=2 actions=output:1
2601 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2603 odp_flow="in_port(p1)"
2605 # Test command: ofproto/trace odp_flow with in_port as a name.
2606 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2607 AT_CHECK([tail -1 stdout], [0], [dnl
2611 odp_flow="in_port(1)"
2612 # Test command: ofproto/trace odp_flow
2613 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2614 AT_CHECK([tail -1 stdout], [0], [dnl
2618 # Test command: ofproto/trace dp_name odp_flow
2619 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2620 AT_CHECK([tail -1 stdout], [0], [dnl
2623 # Test commmand: ofproto/trace br_name br_flow
2624 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2625 AT_CHECK([tail -1 stdout], [0], [dnl
2629 # Delete the inserted flows
2630 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2631 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2633 # This section beflow tests the [-generate] option
2634 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2635 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"
2637 # Test command: ofproto/trace odp_flow
2638 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2639 # Check for no MAC learning entry
2640 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2644 # Test command: ofproto/trace br_name br_flow
2645 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2646 # Check for no MAC learning entry
2647 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2651 # Test command: ofproto/trace odp_flow -generate
2652 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2653 # Check for the MAC learning entry
2654 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2656 3 0 50:54:00:00:00:05 ?
2659 # Test command: ofproto/trace dp_name odp_flow -generate
2660 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2661 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2662 -generate], [0], [stdout])
2663 # Check for both MAC learning entries
2664 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2666 3 0 50:54:00:00:00:05 ?
2667 1 0 50:54:00:00:00:06 ?
2670 # Test command: ofproto/trace br_name br_flow -generate
2671 AT_CHECK([ovs-appctl ofproto/trace br0 \
2672 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2673 -generate], [0], [stdout])
2674 # Check for both MAC learning entries.
2675 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2677 3 0 50:54:00:00:00:05 ?
2678 1 0 50:54:00:00:00:06 ?
2679 2 0 50:54:00:00:00:07 ?
2682 # This section beflow tests the [packet] option
2683 # The ovs-tcpundump of packets between port1 and port2
2684 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2685 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2687 # Construct the MAC learning table
2688 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2689 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2690 -generate], [0], [stdout])
2692 # Construct the MAC learning table
2693 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2694 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2695 -generate], [0], [stdout])
2697 # Test command: ofproto/trace odp_flow packet
2698 AT_CHECK([ovs-appctl ofproto/trace \
2699 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2700 AT_CHECK([tail -1 stdout], [0], [dnl
2703 AT_CHECK([head -n 2 stdout], [0], [dnl
2705 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
2708 # Test command: ofproto/trace dp_name odp_flow packet
2709 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2710 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2711 AT_CHECK([tail -1 stdout], [0], [dnl
2714 AT_CHECK([head -n 2 stdout], [0], [dnl
2716 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
2719 # Test command: ofproto/trace br_name br_flow packet
2720 AT_CHECK([ovs-appctl ofproto/trace br0 \
2721 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2722 AT_CHECK([tail -1 stdout], [0], [dnl
2725 AT_CHECK([head -n 2 stdout], [0], [dnl
2727 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
2733 # The second test tests the corner cases
2734 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2736 ADD_OF_PORTS([br0], 1, 2)
2739 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2740 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2742 generate="-generate"
2743 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2745 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2751 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2753 AT_CHECK([tail -2 stderr], [0], [dnl
2754 Cannot find the datapath
2755 ovs-appctl: ovs-vswitchd: server returned an error
2758 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2764 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2766 AT_CHECK([tail -2 stderr], [0], [dnl
2767 Cannot find the datapath
2768 ovs-appctl: ovs-vswitchd: server returned an error
2771 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2777 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2779 AT_CHECK([tail -2 stderr], [0], [dnl
2780 Cannot find the datapath
2781 ovs-appctl: ovs-vswitchd: server returned an error
2784 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2790 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2792 AT_CHECK([tail -2 stderr], [0], [dnl
2793 Cannot find the datapath
2794 ovs-appctl: ovs-vswitchd: server returned an error
2797 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2803 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2805 AT_CHECK([tail -2 stderr], [0], [dnl
2807 ovs-appctl: ovs-vswitchd: server returned an error
2810 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2816 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2818 AT_CHECK([tail -2 stderr], [0], [dnl
2819 Must specify bridge name
2820 ovs-appctl: ovs-vswitchd: server returned an error
2823 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2824 AT_CHECK([ovs-appctl ofproto/trace \
2825 ovs-dummy "$odp_flow" garbage_option],
2826 [2], [stdout],[stderr])
2827 AT_CHECK([tail -2 stderr], [0], [dnl
2828 Trailing garbage in packet data
2829 ovs-appctl: ovs-vswitchd: server returned an error
2832 # Test incorrect command: ofproto/trace with 4 arguments
2833 AT_CHECK([ovs-appctl ofproto/trace \
2834 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2835 AT_CHECK([tail -2 stderr], [0], [dnl
2836 "ofproto/trace" command takes at most 3 arguments
2837 ovs-appctl: ovs-vswitchd: server returned an error
2840 # Test incorrect command: ofproto/trace with 0 argument
2841 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2842 AT_CHECK([tail -2 stderr], [0], [dnl
2843 "ofproto/trace" command requires at least 1 arguments
2844 ovs-appctl: ovs-vswitchd: server returned an error
2850 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2852 ADD_OF_PORTS([br0], 1, 2, 3)
2854 AT_DATA([flows.txt], [dnl
2855 in_port=1 actions=output:2
2856 in_port=2 actions=output:1
2858 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2860 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2861 AT_CHECK([tail -1 stdout], [0], [dnl
2862 Datapath actions: push_vlan(vid=123,pcp=0),2
2869 m4_define([OFPROTO_TRACE],
2871 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2872 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2874 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2877 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2880 AT_SETUP([ofproto-dpif - MAC learning])
2881 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2882 ADD_OF_PORTS([br0], 1, 2, 3)
2884 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)'
2886 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2889 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2893 # Check for the MAC learning entry.
2894 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2896 3 0 50:54:00:00:00:05 ?
2899 # Trace a packet arrival destined for the learned MAC.
2900 # (This will also learn a MAC.)
2903 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2907 # Check for both MAC learning entries.
2908 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2910 3 0 50:54:00:00:00:05 ?
2911 1 0 50:54:00:00:00:06 ?
2914 # Trace a packet arrival that updates the first learned MAC entry.
2917 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2921 # Check that the MAC learning entry was updated.
2922 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2924 1 0 50:54:00:00:00:06 ?
2925 2 0 50:54:00:00:00:05 ?
2928 # Add another bridge.
2932 -- set bridge br1 datapath-type=dummy])
2933 ADD_OF_PORTS([br1], 4, 5)
2935 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2938 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2943 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2947 # Check that the MAC learning entries were added.
2948 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2950 4 0 50:54:00:00:00:06 ?
2951 5 0 50:54:00:00:00:07 ?
2954 # Delete port p1 and see that its MAC learning entry disappeared, and
2955 # that the MAC learning entry for the same MAC was also deleted from br1.
2956 AT_CHECK([ovs-vsctl del-port p1])
2957 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2959 2 0 50:54:00:00:00:05 ?
2961 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2963 5 0 50:54:00:00:00:07 ?
2969 AT_SETUP([ofproto-dpif - MAC table overflow])
2971 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2972 ADD_OF_PORTS([br0], 1, 2, 3)
2974 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)'
2976 AT_CHECK([ovs-appctl time/stop])
2978 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2979 for i in 0 1 2 3 4 5 6 7 8 9; do
2982 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2985 ovs-appctl time/warp 1000
2988 # Check for the MAC learning entries.
2989 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2991 3 0 50:54:00:00:00:00
2992 3 0 50:54:00:00:00:01
2993 3 0 50:54:00:00:00:02
2994 3 0 50:54:00:00:00:03
2995 3 0 50:54:00:00:00:04
2996 3 0 50:54:00:00:00:05
2997 3 0 50:54:00:00:00:06
2998 3 0 50:54:00:00:00:07
2999 3 0 50:54:00:00:00:08
3000 3 0 50:54:00:00:00:09
3004 # Trace another ARP packet on another MAC.
3007 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3011 # Check that the new one chased the oldest one out of the table.
3012 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3014 3 0 50:54:00:00:00:01 ?
3015 3 0 50:54:00:00:00:02 ?
3016 3 0 50:54:00:00:00:03 ?
3017 3 0 50:54:00:00:00:04 ?
3018 3 0 50:54:00:00:00:05 ?
3019 3 0 50:54:00:00:00:06 ?
3020 3 0 50:54:00:00:00:07 ?
3021 3 0 50:54:00:00:00:08 ?
3022 3 0 50:54:00:00:00:09 ?
3023 3 0 50:54:00:00:00:10 ?
3029 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3031 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3033 # IP_VERSION_TYPE is used in AT_SETUP
3034 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3035 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3036 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3038 ON_EXIT([kill `cat test-sflow.pid`])
3039 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3040 AT_CAPTURE_FILE([sflow.log])
3041 SFLOW_PORT=`parse_listening_port < test-sflow.log`
3042 ovs-appctl time/stop
3044 ADD_OF_PORTS([br0], 1, 2)
3046 set Interface br0 options:ifindex=1002 -- \
3047 set Interface p1 options:ifindex=1004 -- \
3048 set Interface p2 options:ifindex=1003 -- \
3049 set Bridge br0 sflow=@sf -- \
3050 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3051 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3053 dnl open with ARP packets to seed the bridge-learning. The output
3054 dnl ifIndex numbers should be reported predictably after that.
3055 dnl Since we set sampling=1 we should see all of these packets
3056 dnl reported. Sorting the output by data-source and seqNo makes
3057 dnl it deterministic. Ensuring that we send at least two packets
3058 dnl into each port means we get to check the seq nos are
3059 dnl incrementing correctly.
3060 dnl because packets from different ports can be handled by separate
3061 dnl threads, put some sleeps
3063 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)'
3065 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)'
3067 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)'
3069 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)'
3070 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)'
3072 dnl sleep long enough to get more than one counter sample
3073 dnl from each datasource so we can check sequence numbers
3074 for i in `seq 1 30`; do
3075 ovs-appctl time/warp 100
3078 ovs-appctl -t test-sflow exit
3080 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3101 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
3121 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
3141 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
3161 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
3181 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
3184 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3198 in_broadcasts=4294967295
3201 in_unknownprotos=4294967295
3204 out_multicasts=4294967295
3205 out_broadcasts=4294967295
3221 in_broadcasts=4294967295
3224 in_unknownprotos=4294967295
3227 out_multicasts=4294967295
3228 out_broadcasts=4294967295
3244 in_broadcasts=4294967295
3247 in_unknownprotos=4294967295
3250 out_multicasts=4294967295
3251 out_broadcasts=4294967295
3267 in_broadcasts=4294967295
3270 in_unknownprotos=4294967295
3273 out_multicasts=4294967295
3274 out_broadcasts=4294967295
3290 in_broadcasts=4294967295
3293 in_unknownprotos=4294967295
3296 out_multicasts=4294967295
3297 out_broadcasts=4294967295
3313 in_broadcasts=4294967295
3316 in_unknownprotos=4294967295
3319 out_multicasts=4294967295
3320 out_broadcasts=4294967295
3327 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3328 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3330 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3332 # Test that basic NetFlow reports flow statistics correctly:
3333 # The initial packet of a flow are correctly accounted.
3334 # Later packets within a flow are correctly accounted.
3335 # Flow actions changing (in this case, due to MAC learning)
3336 # cause a record to be sent.
3338 # IP_VERSION_TYPE is used in AT_SETUP
3339 m4_define([CHECK_NETFLOW_EXPIRATION],
3340 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3341 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3342 ADD_OF_PORTS([br0], 1, 2)
3344 ovs-appctl time/stop
3345 ON_EXIT([kill `cat test-netflow.pid`])
3346 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3347 AT_CAPTURE_FILE([netflow.log])
3348 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3351 set Bridge br0 netflow=@nf -- \
3352 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3353 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3355 for delay in 1000 30000; do
3356 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)'
3357 sleep 1 # ensure the order in which these two packets are processed
3358 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)'
3360 ovs-appctl time/warp $delay
3363 ovs-appctl time/warp 6000
3366 ovs-appctl -t test-netflow exit
3368 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])
3370 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])
3372 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3373 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3374 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3378 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3379 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3381 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3383 # Test that basic NetFlow reports active expirations correctly.
3385 # IP_VERSION_TYPE is used in AT_SETUP
3386 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3387 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3389 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3390 ADD_OF_PORTS([br0], 1, 2)
3392 ON_EXIT([kill `cat test-netflow.pid`])
3393 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3394 AT_CAPTURE_FILE([netflow.log])
3395 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3398 set Bridge br0 netflow=@nf -- \
3399 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3400 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3402 AT_CHECK([ovs-appctl time/stop])
3404 while test $n -le 60; do
3407 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)'
3408 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)'
3410 ovs-appctl time/warp 1000
3413 ovs-appctl time/warp 10000
3417 ovs-appctl -t test-netflow exit
3419 # Count the number of reported packets:
3420 # - From source to destination before MAC learning kicks in (just one).
3421 # - From source to destination after that.
3422 # - From destination to source.
3430 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3437 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3440 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3443 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3450 eval $counter=\`expr \$$counter + \$pkts\`
3451 n_recs=`expr $n_recs + 1`
3454 # There should be exactly 1 MAC learning packet,
3455 # exactly 59 other packets in that direction,
3456 # and exactly 60 packets in the other direction.
3457 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3462 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3463 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3465 AT_SETUP([ofproto-dpif - flow stats])
3467 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3468 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3470 ovs-appctl time/stop
3472 for i in `seq 1 10`; do
3473 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)'
3476 ovs-appctl time/warp 1000
3477 sleep 1 # wait for revalidator to update stats
3479 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3480 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3481 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3482 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3487 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3489 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3490 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3492 ovs-appctl time/stop
3494 for i in `seq 1 10`; do
3495 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)'
3498 ovs-appctl time/warp 100
3499 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3500 ovs-appctl time/warp 1000
3502 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3503 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3504 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3505 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3510 AT_SETUP([idle_age and hard_age increase over time])
3513 # get_ages DURATION HARD IDLE
3515 # Fetch the flow duration, hard age, and idle age into the variables
3516 # whose names are given as arguments. Rounds DURATION down to the
3517 # nearest integer. If hard_age doesn't appear in the output, sets
3518 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3521 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3523 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3524 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3525 AS_VAR_COPY([$1], [duration])
3527 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3528 if test X"$hard" = X; then
3531 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3533 AS_VAR_COPY([$2], [hard])
3535 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3536 if test X"$idle" = X; then
3539 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3541 AS_VAR_COPY([$3], [idle])
3544 # Add a flow and get its initial hard and idle age.
3545 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3546 get_ages duration1 hard1 idle1
3548 ovs-appctl time/stop
3549 # Warp time forward by 10 seconds, then modify the flow's actions.
3550 ovs-appctl time/warp 10000
3551 get_ages duration2 hard2 idle2
3552 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3554 # Warp time forward by 10 seconds.
3555 ovs-appctl time/warp 10000
3556 get_ages duration3 hard3 idle3
3558 # Warp time forward 10 more seconds, then pass some packets through the flow,
3559 # then warp forward a few more times because idle times are only updated
3561 ovs-appctl time/warp 10000
3562 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)'
3563 ovs-appctl time/warp 1000
3564 ovs-appctl time/warp 1000
3565 ovs-appctl time/warp 1000
3567 get_ages duration4 hard4 idle4
3569 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3570 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3571 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3573 # Duration should increase steadily over time.
3574 AT_CHECK([test $duration1 -lt $duration2])
3575 AT_CHECK([test $duration2 -lt $duration3])
3576 AT_CHECK([test $duration3 -lt $duration4])
3578 # Hard age should be "none" initially because it's the same as flow_duration,
3579 # then it should increase.
3580 AT_CHECK([test $hard1 = none])
3581 AT_CHECK([test $hard2 = none])
3582 AT_CHECK([test $hard3 != none])
3583 AT_CHECK([test $hard4 != none])
3584 AT_CHECK([test $hard3 -lt $hard4])
3586 # Idle age should increase from 1 to 2 to 3, then decrease.
3587 AT_CHECK([test $idle1 -lt $idle2])
3588 AT_CHECK([test $idle2 -lt $idle3])
3589 AT_CHECK([test $idle3 -gt $idle4])
3591 # Check some invariant relationships.
3592 AT_CHECK([test $duration1 = $idle1])
3593 AT_CHECK([test $duration2 = $idle2])
3594 AT_CHECK([test $duration3 = $idle3])
3595 AT_CHECK([test $idle3 -gt $hard3])
3596 AT_CHECK([test $idle4 -lt $hard4])
3597 AT_CHECK([test $hard4 -lt $duration4])
3602 AT_SETUP([ofproto-dpif - fin_timeout])
3604 AT_DATA([flows.txt], [dnl
3605 in_port=1 actions=output:2
3606 in_port=2 actions=mod_vlan_vid:17,output:1
3608 ovs-appctl time/stop
3609 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3610 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3612 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3615 # Check that a TCP SYN packet does not change the timeout. (Because
3616 # flow stats updates are mainly what implements the fin_timeout
3617 # feature, we warp forward a couple of times to ensure that flow stats
3618 # run before re-checking the flow table.)
3619 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3620 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3624 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3626 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3628 # Check that a TCP FIN packet does change the timeout.
3629 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3630 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3633 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3635 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3640 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3641 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3642 ADD_OF_PORTS([br0], [1], [2])
3643 ADD_OF_PORTS([br1], [3])
3645 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3652 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3653 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3654 ADD_OF_PORTS([br0], [1], [2])
3655 ADD_OF_PORTS([br1], [3])
3657 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3658 dummy@ovs-dummy: hit:0 missed:0
3660 br0 65534/100: (dummy)
3664 br1 65534/101: (dummy)
3670 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3671 OVS_VSWITCHD_START([add-br br1 -- \
3672 set bridge br1 datapath-type=dummy fail-mode=secure])
3673 ADD_OF_PORTS([br0], [1], [2])
3674 ADD_OF_PORTS([br1], [3])
3676 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)'])
3677 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)'])
3678 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)'])
3680 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3681 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:drop
3682 skb_priority(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:drop
3685 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3686 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:drop
3689 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3690 skb_priority(0),skb_mark(0/0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3691 skb_priority(0),skb_mark(0/0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3694 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3695 skb_priority(0),skb_mark(0/0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
3701 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
3702 OVS_VSWITCHD_START([dnl
3703 add-port br0 p1 -- set Interface p1 type=dummy
3705 ON_EXIT([kill `cat ovs-ofctl.pid`])
3707 AT_CAPTURE_FILE([ofctl_monitor.log])
3708 AT_DATA([flows.txt], [dnl
3709 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3710 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3712 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3714 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3715 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3717 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3718 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)
3719 dnl (label 20, exp 0, [S], ttl 32)
3720 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3721 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3723 for dl_src in 00 01; do
3724 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"])
3726 sleep 1 # wait for the datapath flow installed
3727 for dl_src in 00 01; do
3728 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3729 skb_priority(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), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3737 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3738 OVS_VSWITCHD_START([dnl
3739 add-port br0 p1 -- set Interface p1 type=dummy
3741 ON_EXIT([kill `cat ovs-ofctl.pid`])
3743 AT_CAPTURE_FILE([ofctl_monitor.log])
3744 AT_DATA([flows.txt], [dnl
3745 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3746 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3748 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3750 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3751 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3752 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3754 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3755 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)
3756 dnl (label 20, exp 0, ttl 32)
3757 dnl (label 20, exp 0, ttl 32)
3758 dnl (label 20, exp 0, [S], ttl 32)
3759 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3760 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3762 for dl_src in 00 01; do
3763 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"])
3765 sleep 1 # wait for the datapath flow installed
3766 for dl_src in 00 01; do
3767 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3768 skb_priority(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), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller))
3775 AT_SETUP([ofproto-dpif - patch ports])
3776 OVS_VSWITCHD_START([add-br br1 \
3777 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3778 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3779 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3781 ADD_OF_PORTS([br0], [2])
3782 ADD_OF_PORTS([br1], [3])
3784 AT_CHECK([ovs-appctl time/stop])
3786 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3787 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3789 for i in $(seq 1 10); do
3790 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)'
3791 if [[ $i -eq 1 ]]; then
3796 for i in $(seq 1 5); do
3797 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)'
3798 if [[ $i -eq 1 ]]; then
3803 AT_CHECK([ovs-appctl time/warp 500], [0],
3807 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3808 dummy@ovs-dummy: hit:13 missed:2
3810 br0 65534/100: (dummy)
3812 pbr0 1/none: (patch: peer=pbr1)
3814 br1 65534/101: (dummy)
3816 pbr1 1/none: (patch: peer=pbr0)
3819 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3820 skb_priority(0),in_port(100),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:9, bytes:540, used:0.0s, actions:101,3,2
3822 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
3823 skb_priority(0),in_port(101),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:4, bytes:240, used:0.0s, actions:100,2,3
3826 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3827 OFPST_PORT reply (xid=0x4): 1 ports
3828 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3829 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3832 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3833 OFPST_PORT reply (xid=0x4): 1 ports
3834 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3835 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3841 AT_SETUP([ofproto-dpif - port duration])
3842 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3843 ADD_OF_PORTS([br0], 1, 2)
3845 ovs-appctl time/stop
3846 ovs-appctl time/warp 10000
3848 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3849 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3858 dnl ----------------------------------------------------------------------
3859 AT_BANNER([ofproto-dpif -- megaflows])
3861 AT_SETUP([ofproto-dpif megaflow - port classification])
3863 ADD_OF_PORTS([br0], [1], [2])
3864 AT_DATA([flows.txt], [dnl
3865 table=0 in_port=1 actions=output(2)
3867 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3868 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)'])
3869 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)'])
3871 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3872 skb_priority(0),in_port(1),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:0.0s, actions: <del>
3877 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3879 ADD_OF_PORTS([br0], [1], [2])
3880 AT_DATA([flows.txt], [dnl
3881 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3883 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3884 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)'])
3885 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)'])
3887 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3888 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
3889 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
3894 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3896 ADD_OF_PORTS([br0], [1], [2])
3897 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], [])
3898 AT_DATA([flows.txt], [dnl
3899 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3901 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3902 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3903 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3905 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3906 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:never, actions: <del>
3907 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:never, actions: <del>
3912 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3914 ADD_OF_PORTS([br0], [1], [2])
3915 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], [])
3916 AT_DATA([flows.txt], [dnl
3917 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3919 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3920 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)'])
3921 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(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)'])
3923 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3924 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:never, actions: <del>
3925 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:never, actions: <del>
3930 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3932 ADD_OF_PORTS([br0], [1], [2])
3933 AT_DATA([flows.txt], [dnl
3934 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3936 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3937 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)'])
3938 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)'])
3939 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3940 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:0.0s, actions: <del>
3945 AT_SETUP([ofproto-dpif megaflow - normal])
3947 ADD_OF_PORTS([br0], [1], [2])
3948 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3949 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)'])
3950 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)'])
3952 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3953 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
3954 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
3959 AT_SETUP([ofproto-dpif megaflow - mpls])
3961 ADD_OF_PORTS([br0], [1], [2])
3962 AT_DATA([flows.txt], [dnl
3963 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3964 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3966 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3967 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)'])
3968 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)'])
3970 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3971 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
3972 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
3977 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3979 # IP_VERSION_TYPE is used in AT_SETUP
3980 m4_define([CHECK_MEGAFLOW_NETFLOW],
3981 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3983 ADD_OF_PORTS([br0], [1], [2])
3985 dnl NetFlow configuration disables wildcarding relevant fields
3986 ON_EXIT([kill `cat test-netflow.pid`])
3987 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3988 AT_CAPTURE_FILE([netflow.log])
3989 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3991 set Bridge br0 netflow=@nf -- \
3992 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3993 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3995 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3996 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)'])
3997 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)'])
3999 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4000 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4001 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4006 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4007 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4009 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4011 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4012 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4013 set interface p2 type=dummy ofport_request=2 -- \
4014 set interface p3 type=dummy ofport_request=3])
4015 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4018 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4019 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)'])
4020 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)'])
4022 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4023 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4024 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4029 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4031 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4032 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4033 set interface p2 type=dummy ofport_request=2 -- \
4034 set interface p3 type=dummy ofport_request=3])
4035 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4038 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4039 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)'])
4040 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)'])
4042 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4043 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4044 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4049 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4050 # Create bond0 on br0 with interfaces p0 and p1
4051 # and bond1 on br1 with interfaces p2 and p3
4052 # with p0 patched to p2 and p1 patched to p3.
4054 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4055 other-config:lacp-time=fast \
4056 other-config:bond-rebalance-interval=0 -- \
4057 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4058 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4060 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4061 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4062 fail-mode=secure -- \
4063 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4064 other-config:lacp-time=fast \
4065 other-config:bond-rebalance-interval=0 -- \
4066 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4067 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4069 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4071 ADD_OF_PORTS([br0], [7])
4072 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4073 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4074 ovs-appctl time/stop
4075 ovs-appctl time/warp 5000
4076 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)'])
4077 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)'])
4079 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4080 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4081 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4086 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4088 ADD_OF_PORTS([br0], [1], [2])
4089 AT_DATA([flows.txt], [dnl
4090 table=0 in_port=1,ip actions=resubmit(90)
4091 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4093 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4094 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)'])
4095 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)'])
4097 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4098 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4099 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4104 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4106 ADD_OF_PORTS([br0], [1], [2])
4107 AT_DATA([flows.txt], [dnl
4108 table=0 in_port=1,ip actions=resubmit(,1)
4109 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4111 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4112 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)'])
4113 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=
4114 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4116 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4117 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4118 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4123 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4125 ADD_OF_PORTS([br0], [1], [2])
4126 AT_DATA([flows.txt], [dnl
4127 table=0 in_port=1,ip actions=goto_table(1)
4128 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4130 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4131 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)'])
4132 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)'])
4134 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4135 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4136 skb_priority(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), packets:0, bytes:0, used:never, actions: <del>
4141 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4143 ADD_OF_PORTS([br0], [1], [2], [3])
4145 set Bridge br0 mirrors=@m --\
4146 --id=@p3 get Port p3 --\
4147 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4149 AT_DATA([flows.txt], [dnl
4150 in_port=1 actions=output:2
4152 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4153 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)'])
4154 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)'])
4156 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4157 skb_priority(0),in_port(1),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:0.0s, actions: <del>
4162 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4164 ADD_OF_PORTS([br0], [1], [2], [3])
4166 set Bridge br0 mirrors=@m --\
4167 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4168 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4170 AT_DATA([flows.txt], [dnl
4171 in_port=1 actions=output:2
4173 AT_CHECK([ovs-ofctl 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(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))'])
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([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4178 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:never, actions: <del>
4179 skb_priority(0),in_port(1),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)), packets:0, bytes:0, used:never, actions: <del>
4184 AT_SETUP([ofproto-dpif megaflow - move action])
4186 ADD_OF_PORTS([br0], [1], [2])
4187 AT_DATA([flows.txt], [dnl
4188 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4189 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4190 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4192 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4193 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)'])
4194 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)'])
4196 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4197 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:never, actions: <del>
4198 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:never, actions: <del>
4203 AT_SETUP([ofproto-dpif megaflow - push action])
4205 ADD_OF_PORTS([br0], [1], [2])
4206 AT_DATA([flows.txt], [dnl
4207 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4209 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4210 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4211 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)'])
4213 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4214 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:never, actions: <del>
4215 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:never, actions: <del>
4220 AT_SETUP([ofproto-dpif megaflow - learning])
4222 ADD_OF_PORTS([br0], [1], [2])
4223 AT_DATA([flows.txt], [dnl
4224 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
4226 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4227 ovs-appctl time/stop
4228 # We send each packet twice because the first packet in each flow causes the
4229 # flow table to change and thus revalidations, which (depending on timing)
4230 # can keep a megaflow from being installed. The revalidations are done by
4231 # the second iteration, allowing the flows to be installed.
4233 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4234 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4235 ovs-appctl time/warp 100
4238 dnl The original flow is missing due to a revalidation.
4239 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4240 skb_priority(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), packets:0, bytes:0, used:0.0s, actions: <del>
4241 skb_priority(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), packets:0, bytes:0, used:0.0s, actions: <del>
4246 AT_SETUP([ofproto-dpif megaflow - tunnels])
4248 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4249 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4250 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4251 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4253 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4254 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4255 ofport_request=4 options:key=flow])
4256 AT_DATA([flows.txt], [dnl
4257 in_port=1,actions=output(2)
4258 in_port=3,actions=output(4)
4260 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4261 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4262 dnl will cause the packet to be dropped.
4263 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)'])
4264 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)'])
4265 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)'])
4266 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)'])
4268 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4269 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:0.0s, actions: <del>
4270 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0xff,ttl=128/0xff,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
4271 skb_priority(0),in_port(3),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), packets:0, bytes:0, used:never, actions: <del>
4276 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4278 ADD_OF_PORTS([br0], [1], [2])
4279 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], [])
4280 AT_DATA([flows.txt], [dnl
4281 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4283 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4284 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)'])
4285 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)'])
4287 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4288 skb_priority(0),in_port(1),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), packets:0, bytes:0, used:never, actions: <del>
4289 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no), packets:0, bytes:0, used:never, actions: <del>
4294 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4296 ADD_OF_PORTS([br0], [1], [2])
4297 AT_DATA([flows.txt], [dnl
4298 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4300 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4301 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)'])
4302 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)'])
4304 dnl The megaflows do not match the same fields, since the first packet
4305 dnl is essentially a no-op. (The new destination MAC is the same as the
4306 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4307 dnl so that a packet that doesn't need its MAC address changed doesn't
4308 dnl hide one that does. Since the first entry doesn't need to change,
4309 dnl only the destination MAC address is matched (as decided by
4310 dnl ofproto-dpif). The second entry actually updates the destination
4311 dnl MAC, so both the source and destination MAC addresses are
4312 dnl un-wildcarded, since the ODP commit functions update both the source
4313 dnl and destination MAC addresses.
4314 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4315 skb_priority(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), packets:0, bytes:0, used:never, actions:2
4316 skb_priority(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), packets:0, bytes:0, used:never, actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
4321 AT_SETUP([ofproto-dpif megaflow - disabled])
4323 ADD_OF_PORTS([br0], [1], [2])
4324 AT_DATA([flows.txt], [dnl
4325 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4326 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4328 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4330 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4331 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4332 for i in 1 2 3 4; do
4333 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)'])
4334 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)'])
4337 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4338 skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:2
4339 skb_priority(0),skb_mark(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
4344 AT_SETUP([ofproto-dpif - datapath port number change])
4345 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4346 ADD_OF_PORTS([br0], 1)
4348 # Trace a flow that should output to p1.
4349 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4351 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4354 # Change p1's port number to 5.
4355 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4357 # Trace a flow that should output to p1 in its new location.
4358 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4360 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4365 # Tests the bundling with various bfd and cfm configurations.
4366 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4367 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4368 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4369 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4370 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4371 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4372 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4373 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4374 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4375 set Interface p0 cfm_mpid=1 -- \
4376 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4378 ovs-appctl time/stop
4379 # advance the clock to stablize everything.
4380 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4381 # cfm/show should show 'recv' fault.
4382 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4385 # bfd/show should show 'up'.
4386 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4387 Local Session State: up
4388 Remote Session State: up
4389 Local Session State: up
4390 Remote Session State: up
4392 # bond/show should show 'may-enable: true' for all slaves.
4393 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4400 # now disable the bfd on p1.
4401 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4402 # advance the clock to stablize everything.
4403 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4404 # cfm/show should show 'recv' fault.
4405 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4408 # bfd/show should show 'down'.
4409 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4410 Local Session State: down
4411 Remote Session State: down
4413 # bond/show should show 'may-enable: false' for p0.
4414 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4419 # now enable the bfd on p1 and disable bfd on p0.
4420 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4421 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4422 # advance the clock to stablize everything.
4423 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4424 # cfm/show should show 'recv' fault.
4425 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4428 # bfd/show should show 'down'.
4429 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4430 Local Session State: down
4431 Remote Session State: down
4433 # bond/show should show 'may-enable: false' for p0 and p1.
4434 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4444 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4445 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4448 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4450 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4451 monitor thread created
4453 # disable bfd on p0.
4454 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4456 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4457 monitor thread terminated
4459 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4462 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4464 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4465 monitor thread created
4467 # disable cfm on p0.
4468 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4470 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4471 monitor thread terminated
4473 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4475 # enable both bfd and cfm on p0.
4476 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4478 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4479 monitor thread created
4481 # disable bfd on p0.
4482 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4483 # check log, there should not be the log of thread terminated.
4484 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4486 # reenable bfd on p0.
4487 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4488 # check log, should still be on log of thread created.
4489 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4490 monitor thread created
4492 # disable bfd and cfm together.
4493 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4495 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4496 monitor thread terminated
4502 # this test helps avoid the deadlock between the main thread and monitor thread.
4503 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4506 for i in `seq 1 199`
4508 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])
4514 AT_BANNER([ofproto-dpif - flow translation resource limits])
4516 AT_SETUP([ofproto-dpif - infinite resubmit])
4518 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4519 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4521 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4523 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4526 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4529 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4531 ADD_OF_PORTS([br0], 1)
4532 (for i in `seq 1 64`; do
4534 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4536 echo "in_port=65, actions=local") > flows
4537 AT_CHECK([ovs-ofctl add-flows br0 flows])
4538 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4539 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4541 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4544 AT_SETUP([ofproto-dpif - too many output actions])
4546 ADD_OF_PORTS([br0], 1)
4547 (for i in `seq 1 12`; do
4549 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4551 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4552 AT_CHECK([ovs-ofctl add-flows br0 flows])
4553 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4554 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4557 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4559 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4562 AT_SETUP([ofproto-dpif - stack too deep])
4564 ADD_OF_PORTS([br0], 1)
4565 (for i in `seq 1 12`; do
4567 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4569 push="push:NXM_NX_REG0[[]]"
4570 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4571 AT_CHECK([ovs-ofctl add-flows br0 flows])
4572 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4573 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4575 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])