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 -1 stdout], [0],
237 [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
242 AT_SETUP([ofproto-dpif - clear actions])
244 ADD_OF_PORTS([br0], [1], [10], [11], [12])
245 AT_DATA([flows.txt], [dnl
246 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
247 table=1 ip actions=set_field:192.168.3.91->ip_src,output(11),clear_actions
249 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
250 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])
251 AT_CHECK([tail -1 stdout], [0],
252 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
257 AT_SETUP([ofproto-dpif - group chaining not supported])
259 ADD_OF_PORTS([br0], [1], [10], [11])
260 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'],
262 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
263 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
268 AT_SETUP([ofproto-dpif - all group in action list])
270 ADD_OF_PORTS([br0], [1], [10], [11])
271 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
272 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
273 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])
274 AT_CHECK([tail -1 stdout], [0],
275 [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
280 AT_SETUP([ofproto-dpif - indirect group in action list])
282 ADD_OF_PORTS([br0], [1], [10])
283 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
284 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
285 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])
286 AT_CHECK([tail -1 stdout], [0],
287 [Datapath actions: 10
292 AT_SETUP([ofproto-dpif - all group in action set])
294 ADD_OF_PORTS([br0], [1], [10], [11])
295 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'])
296 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
297 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
298 AT_CHECK([tail -1 stdout], [0],
299 [Datapath actions: 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
304 AT_SETUP([ofproto-dpif - indirect group in action set])
306 ADD_OF_PORTS([br0], [1], [10])
307 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
308 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
309 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
310 AT_CHECK([tail -1 stdout], [0],
311 [Datapath actions: 10
316 AT_SETUP([ofproto-dpif - select group])
318 ADD_OF_PORTS([br0], [1], [10], [11])
319 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
320 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
322 # Try a bunch of different flows and make sure that they get distributed
324 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
325 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])
326 tail -1 stdout >> results
328 sort results | uniq -c
329 AT_CHECK([sort results | uniq], [0],
330 [Datapath actions: 10
336 AT_SETUP([ofproto-dpif - select group with watch port])
338 ADD_OF_PORTS([br0], [1], [10], [11])
339 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
340 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
341 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])
342 AT_CHECK([tail -1 stdout], [0],
343 [Datapath actions: 11
348 AT_SETUP([ofproto-dpif - select group with weight])
350 ADD_OF_PORTS([br0], [1], [10], [11], [12])
351 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'])
352 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
353 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
354 AT_CHECK([tail -1 stdout], [0],
355 [Datapath actions: 11
360 AT_SETUP([ofproto-dpif - fast failover group])
362 ADD_OF_PORTS([br0], [1], [10], [11])
363 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'])
364 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
365 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00: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])
366 AT_CHECK([tail -1 stdout], [0],
367 [Datapath actions: drop
372 AT_SETUP([ofproto-dpif - registers])
374 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
375 AT_DATA([flows.txt], [dnl
376 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
377 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
378 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
379 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
381 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
382 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
383 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
384 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
385 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
386 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
387 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
388 in_port=9,reg0=0xdeadbeef actions=output:20
389 in_port=10,reg1=0xdeadbeef actions=output:21
390 in_port=11,reg2=0xeef22dea actions=output:22
392 dnl Sanilty check all registers
393 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
394 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
395 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
396 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
399 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
400 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])
401 AT_CHECK([tail -1 stdout], [0],
402 [Datapath actions: 20,21,22,33
407 AT_SETUP([ofproto-dpif - push-pop])
409 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
410 AT_DATA([flows.txt], [dnl
411 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
412 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
413 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
414 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
415 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
418 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
419 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])
420 AT_CHECK([tail -1 stdout], [0],
421 [Datapath actions: 33,22,21,20
426 AT_SETUP([ofproto-dpif - output])
428 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
429 AT_DATA([flows.txt], [dnl
430 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
431 in_port=2 actions=output:9
432 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
433 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
434 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
435 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
436 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
437 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
439 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
440 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])
441 AT_CHECK([tail -1 stdout], [0],
442 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
447 AT_SETUP([ofproto-dpif - dec_ttl])
449 ADD_OF_PORTS([br0], [1], [2], [3], [4])
450 AT_DATA([flows.txt], [dnl
451 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
452 table=1 in_port=1 action=dec_ttl,output:3
454 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
455 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])
456 AT_CHECK([tail -3 stdout], [0],
457 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
458 This flow is handled by the userspace slow path because it:
459 - Sends "packet-in" messages to the OpenFlow controller.
461 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])
462 AT_CHECK([tail -1 stdout], [0],
463 [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
465 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])
466 AT_CHECK([tail -1 stdout], [0],
467 [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
470 AT_CAPTURE_FILE([ofctl_monitor.log])
471 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
472 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])
473 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
474 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
475 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
476 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
481 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
482 dnl buffer to be resized just before pushing the id of the dec_ttl action.
483 dnl Thus the implementation must account for this by using the
484 dnl reallocated buffer rather than the original buffer.
486 dnl A number of similar rules are added to try and exercise
487 dnl xrealloc sufficiently that it returns a different base pointer
488 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
490 ADD_OF_PORTS([br0], [1])
491 (for i in `seq 0 255`; do
492 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
494 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
498 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
499 dnl buffer to be resized just before pushing the id of the dec_ttl action.
500 dnl Thus the implementation must account for this by using the
501 dnl reallocated buffer rather than the original buffer.
503 dnl A number of similar rules are added to try and exercise
504 dnl xrealloc sufficiently that it returns a different base pointer
505 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
507 ADD_OF_PORTS([br0], [1])
508 (for i in `seq 0 255`; do
509 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
511 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
515 dnl A note action at offset 24 in ofpacts will cause the ofpacts
516 dnl buffer to be resized just before pushing the id of the dec_ttl action.
517 dnl Thus the implementation must account for this by using the
518 dnl reallocated buffer rather than the original buffer.
520 dnl A number of similar rules are added to try and exercise
521 dnl xrealloc sufficiently that it returns a different base pointer
522 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
524 ADD_OF_PORTS([br0], [1])
525 (for i in `seq 0 255`; do
526 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
528 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
532 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
534 ADD_OF_PORTS([br0], [1], [2])
536 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
538 # "in_port" defaults to OFPP_NONE if it's not specified.
539 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"
540 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
541 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
550 AT_SETUP([ofproto-dpif - DSCP])
551 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
552 ADD_OF_PORTS([br0], [9])
553 AT_DATA([flows.txt], [dnl
554 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
556 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
557 AT_CHECK([ovs-vsctl -- \
558 set Port p1 qos=@newqos --\
559 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
560 --id=@q1 create Queue dscp=1 --\
561 --id=@q2 create Queue dscp=2], [0], [ignore])
562 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])
563 AT_CHECK([tail -1 stdout], [0],
564 [Datapath actions: dnl
566 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
567 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
569 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
570 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
571 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
577 AT_SETUP([ofproto-dpif - output/flood flags])
579 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
581 AT_DATA([flows.txt], [dnl
582 in_port=local actions=local,flood
583 in_port=1 actions=flood
584 in_port=2 actions=all
585 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
586 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
588 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
589 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
590 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
592 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])
593 AT_CHECK([tail -1 stdout \
594 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
602 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])
603 AT_CHECK([tail -1 stdout \
604 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
612 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])
613 AT_CHECK([tail -1 stdout \
614 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
623 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])
624 AT_CHECK([tail -1 stdout], [0],
625 [Datapath actions: 100,1,2,4,6,7
628 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])
629 AT_CHECK([tail -1 stdout], [0],
630 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
635 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
636 OVS_VSWITCHD_START([dnl
637 add-port br0 p1 -- set Interface p1 type=dummy
639 ON_EXIT([kill `cat ovs-ofctl.pid`])
641 AT_CAPTURE_FILE([ofctl_monitor.log])
643 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
646 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)'
648 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
649 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
650 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
651 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
652 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
654 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
655 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
657 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
658 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
661 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
662 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
669 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
670 OVS_VSWITCHD_START([dnl
671 add-port br0 p1 -- set Interface p1 type=dummy
673 ON_EXIT([kill `cat ovs-ofctl.pid`])
675 AT_CAPTURE_FILE([ofctl_monitor.log])
676 AT_CHECK([ovs-ofctl del-flows br0])
678 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
680 dnl Test that missed packets are droped
682 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)'
684 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
686 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
689 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
690 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
691 OFPST_FLOW reply (OF1.3):
697 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
698 OVS_VSWITCHD_START([dnl
699 add-port br0 p1 -- set Interface p1 type=dummy
701 ON_EXIT([kill `cat ovs-ofctl.pid`])
703 AT_CAPTURE_FILE([ofctl_monitor.log])
704 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
706 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
709 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)'
711 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
712 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
713 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
714 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
715 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
717 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
718 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
720 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
721 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
724 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
725 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
726 n_packets=3, n_bytes=180, actions=goto_table:1
727 OFPST_FLOW reply (OF1.2):
733 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
734 OVS_VSWITCHD_START([dnl
735 add-port br0 p1 -- set Interface p1 type=dummy
737 ON_EXIT([kill `cat ovs-ofctl.pid`])
739 AT_CAPTURE_FILE([ofctl_monitor.log])
740 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
742 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
745 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)'
748 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
749 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
752 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
753 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
754 n_packets=3, n_bytes=180, actions=resubmit(1,1)
755 OFPST_FLOW reply (OF1.2):
761 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
762 OVS_VSWITCHD_START([dnl
763 add-port br0 p1 -- set Interface p1 type=dummy
765 ON_EXIT([kill `cat ovs-ofctl.pid`])
767 AT_CAPTURE_FILE([ofctl_monitor.log])
768 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
769 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
771 dnl Miss table 0, Hit table 1
772 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
775 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)'
777 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
778 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
780 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
781 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
782 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
784 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
785 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
787 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
788 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
791 dnl Hit table 0, Miss all other tables, sent to controller
792 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
795 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)'
797 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
798 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
800 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
801 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
802 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
804 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
805 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
807 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
808 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
811 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
812 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
813 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
814 OFPST_FLOW reply (OF1.2):
820 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
821 OVS_VSWITCHD_START([dnl
822 add-port br0 p1 -- set Interface p1 type=dummy
824 ON_EXIT([kill `cat ovs-ofctl.pid`])
826 AT_CAPTURE_FILE([ofctl_monitor.log])
827 AT_DATA([flows.txt], [dnl
828 table=0 actions=goto_table(1)
829 table=2 dl_src=10:11:11:11:11:11 actions=controller
831 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
832 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
834 dnl Hit table 0, Miss table 1, Hit table 2
835 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
838 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)'
840 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
841 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
843 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
844 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
845 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
847 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
848 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
850 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
851 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
854 dnl Hit table 1, Miss all other tables, sent to controller
855 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
858 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)'
860 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
861 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
863 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
864 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
865 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
867 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
868 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
870 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
871 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
874 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
875 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
876 n_packets=6, n_bytes=360, actions=goto_table:1
877 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
878 OFPST_FLOW reply (OF1.2):
884 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
885 OVS_VSWITCHD_START([dnl
886 add-port br0 p1 -- set Interface p1 type=dummy
888 ON_EXIT([kill `cat ovs-ofctl.pid`])
890 AT_CAPTURE_FILE([ofctl_monitor.log])
891 AT_DATA([flows.txt], [dnl
892 table=0 actions=resubmit(1,1)
893 table=2 dl_src=10:11:11:11:11:11 actions=controller
895 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
896 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
898 dnl Hit table 0, Miss table 1, Dropped
899 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
902 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)'
904 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
906 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
909 dnl Hit table 1, Dropped
910 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
913 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)'
915 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
917 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
920 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
921 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
922 n_packets=6, n_bytes=360, actions=resubmit(1,1)
923 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
924 OFPST_FLOW reply (OF1.2):
930 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
931 OVS_VSWITCHD_START([dnl
932 add-port br0 p1 -- set Interface p1 type=dummy
934 ON_EXIT([kill `cat ovs-ofctl.pid`])
936 AT_CAPTURE_FILE([ofctl_monitor.log])
937 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
939 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
941 dnl Test that missed packets are droped
943 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)'
945 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
947 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
950 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
951 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
958 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
959 OVS_VSWITCHD_START([dnl
960 add-port br0 p1 -- set Interface p1 type=dummy
962 ON_EXIT([kill `cat ovs-ofctl.pid`])
964 AT_CAPTURE_FILE([ofctl_monitor.log])
965 AT_CHECK([ovs-ofctl del-flows br0])
966 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
967 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
969 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
971 dnl Test that missed packets are droped
973 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)'
975 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
977 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
980 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
981 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
982 n_packets=3, n_bytes=180, actions=goto_table:1
983 OFPST_FLOW reply (OF1.2):
989 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
990 OVS_VSWITCHD_START([dnl
991 add-port br0 p1 -- set Interface p1 type=dummy
993 ON_EXIT([kill `cat ovs-ofctl.pid`])
995 AT_CAPTURE_FILE([ofctl_monitor.log])
996 AT_CHECK([ovs-ofctl del-flows br0])
997 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
998 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1000 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1002 dnl Test that missed packets are droped
1004 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)'
1006 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1008 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1011 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1012 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1013 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1014 OFPST_FLOW reply (OF1.2):
1020 AT_SETUP([ofproto-dpif - controller])
1021 OVS_VSWITCHD_START([dnl
1022 add-port br0 p1 -- set Interface p1 type=dummy
1024 ON_EXIT([kill `cat ovs-ofctl.pid`])
1026 AT_CAPTURE_FILE([ofctl_monitor.log])
1027 AT_DATA([flows.txt], [dnl
1028 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1029 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1030 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1032 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1033 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)
1034 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)
1035 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1036 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)
1037 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1038 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1039 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1040 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
1041 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
1042 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
1043 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
1044 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
1045 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
1046 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
1047 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
1048 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1049 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1050 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
1051 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
1053 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1056 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1059 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)'
1061 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1062 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1064 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1065 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1066 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
1068 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1069 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
1071 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1072 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
1075 dnl Singleton controller action.
1076 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1079 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)'
1081 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1082 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1084 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1085 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1086 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
1088 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1089 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
1091 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1092 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1095 dnl Modified controller action.
1096 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1099 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)'
1101 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1102 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1104 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1105 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1106 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
1108 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1109 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
1111 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1112 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
1115 dnl Modified VLAN controller action.
1116 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1119 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)'
1121 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1122 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1124 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1125 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1126 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
1128 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1129 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
1131 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1132 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1135 dnl Modified MPLS controller action.
1136 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1139 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)'
1141 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1142 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1144 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1145 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1146 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
1148 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1149 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
1151 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1152 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
1155 dnl Modified MPLS controller action.
1156 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1159 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)'
1161 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1162 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1164 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1165 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1166 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
1168 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1169 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
1171 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1172 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
1175 dnl Modified MPLS controller action.
1176 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1178 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)
1181 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)'
1184 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1185 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1186 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1187 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
1189 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1190 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
1192 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1193 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
1196 dnl Modified MPLS controller action.
1197 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1200 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))'
1202 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1203 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1205 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1206 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1207 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
1209 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1210 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
1212 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1213 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
1216 dnl Modified MPLS controller action.
1217 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1220 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)'
1222 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1223 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1225 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1226 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1227 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
1229 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1230 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
1232 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1233 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
1236 dnl Modified MPLS controller action.
1237 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1240 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)'
1242 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1243 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1245 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1246 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1247 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
1249 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1250 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
1252 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1253 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
1256 dnl Modified MPLS controller action.
1257 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1260 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)'
1262 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1263 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1265 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1266 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1267 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
1269 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1270 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
1272 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1273 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
1276 dnl Modified MPLS controller action.
1277 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1280 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)'
1282 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1283 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1285 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1286 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1287 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
1289 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1290 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
1292 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1293 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
1296 dnl Modified MPLS actions.
1297 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1300 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)'
1302 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1303 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1305 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1306 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1307 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
1309 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1310 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
1312 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1313 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
1316 dnl Modified MPLS ipv6 controller action.
1317 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1320 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)'
1322 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1323 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1325 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1326 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1327 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
1329 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1330 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
1332 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1333 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
1337 dnl Modified MPLS pop action.
1338 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1339 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)
1340 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1342 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1345 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'
1348 # 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)'
1350 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1351 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1353 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1354 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1355 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
1357 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1358 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
1360 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1361 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
1365 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1368 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)'
1370 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1371 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1373 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1374 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1375 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
1377 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1378 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
1380 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)
1381 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
1383 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)
1384 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
1386 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)
1387 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
1389 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)
1390 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
1392 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)
1393 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
1395 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)
1396 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
1398 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)
1399 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
1403 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1406 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'
1408 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1409 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1411 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1412 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1413 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
1415 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1416 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
1418 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)
1419 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
1421 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)
1422 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
1424 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)
1425 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
1427 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)
1428 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
1430 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)
1431 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
1433 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)
1434 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
1436 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)
1437 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
1440 dnl Modified ARP controller action.
1441 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1444 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)'
1447 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1448 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1449 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1450 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1451 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
1452 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1453 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
1454 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1455 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
1456 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1457 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
1458 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1459 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
1460 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1461 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
1462 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1463 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
1464 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1465 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
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=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
1470 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1473 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1476 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'
1479 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1480 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1481 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1482 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1483 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
1485 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1486 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
1488 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)
1489 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
1491 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)
1492 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
1494 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)
1495 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
1497 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)
1498 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
1500 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)
1501 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
1503 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)
1504 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
1506 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)
1507 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
1510 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1511 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1512 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1513 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)
1514 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)
1515 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)
1516 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)
1517 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)
1518 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1519 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1520 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
1521 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
1522 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
1523 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
1524 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
1525 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
1526 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
1527 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
1528 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
1529 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
1530 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
1531 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
1532 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1533 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1541 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1542 OVS_VSWITCHD_START([dnl
1543 add-port br0 p1 -- set Interface p1 type=dummy
1545 ON_EXIT([kill `cat ovs-ofctl.pid`])
1547 AT_CAPTURE_FILE([ofctl_monitor.log])
1548 # A table-miss flow has priority 0 and no match
1549 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1551 dnl Singleton controller action.
1552 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1555 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)'
1557 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1558 ovs-appctl -t ovs-ofctl exit
1560 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1561 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1562 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
1564 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1565 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
1567 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1568 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
1571 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1573 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1574 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1582 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1583 OVS_VSWITCHD_START([dnl
1584 add-port br0 p1 -- set Interface p1 type=dummy
1586 ON_EXIT([kill `cat ovs-ofctl.pid`])
1588 AT_CAPTURE_FILE([ofctl_monitor.log])
1589 # A table-miss flow has priority 0 and no match
1590 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1592 dnl Singleton controller action.
1593 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1596 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)'
1598 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1599 ovs-appctl -t ovs-ofctl exit
1601 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1603 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1604 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1605 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
1607 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1608 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
1610 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1611 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
1614 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1616 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1617 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1618 OFPST_FLOW reply (OF1.3):
1624 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1626 ADD_OF_PORTS([br0], [1], [2])
1628 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1629 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'
1631 # Input some packets that should follow the arp modification slow-path.
1633 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)'
1635 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1637 # Check the packets that were output.
1638 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1639 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
1640 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
1641 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
1642 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
1643 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
1644 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
1645 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
1646 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
1647 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
1653 AT_SETUP([ofproto-dpif - VLAN handling])
1655 [set Bridge br0 fail-mode=standalone -- \
1656 add-port br0 p1 trunks=10,12 -- \
1657 add-port br0 p2 tag=10 -- \
1658 add-port br0 p3 tag=12 \
1659 other-config:priority-tags=true -- \
1660 add-port br0 p4 tag=12 -- \
1661 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1662 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1663 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1664 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1665 other-config:priority-tags=true -- \
1666 set Interface p1 type=dummy -- \
1667 set Interface p2 type=dummy -- \
1668 set Interface p3 type=dummy -- \
1669 set Interface p4 type=dummy -- \
1670 set Interface p5 type=dummy -- \
1671 set Interface p6 type=dummy -- \
1672 set Interface p7 type=dummy -- \
1673 set Interface p8 type=dummy --])
1675 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1676 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1682 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1683 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1686 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1687 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1691 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1692 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1695 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1696 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1697 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1698 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1699 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1706 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1707 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1708 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1715 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1716 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1717 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1724 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1725 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1726 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1727 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1728 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1731 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1732 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1733 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1734 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1735 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1736 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1737 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1740 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1741 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1742 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1743 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1744 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1745 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1746 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1749 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1750 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1751 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1752 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1753 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1754 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1755 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1758 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1759 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1767 if test $vlan = none; then
1768 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1770 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))"
1773 echo "----------------------------------------------------------------------"
1774 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1776 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1777 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1779 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1781 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1787 AT_SETUP([ofproto-dpif - MPLS handling])
1788 OVS_VSWITCHD_START([dnl
1789 add-port br0 p1 -- set Interface p1 type=dummy
1791 ON_EXIT([kill `cat ovs-ofctl.pid`])
1793 AT_CAPTURE_FILE([ofctl_monitor.log])
1794 AT_DATA([flows.txt], [dnl
1795 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1796 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1797 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1799 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1801 dnl In this test, we push an MPLS tag to an ethernet packet.
1802 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1805 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)'
1807 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1808 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1810 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1811 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1812 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
1813 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1814 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1815 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1816 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1818 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1819 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
1820 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1821 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1822 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1823 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1825 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1826 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
1827 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1828 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1829 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1830 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1833 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1834 dnl copied exactly, except for the BOS bit.
1835 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1838 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)'
1840 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1841 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1843 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1844 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1845 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
1846 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1847 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1848 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1849 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1851 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1852 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
1853 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1854 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1855 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1856 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1858 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1859 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
1860 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1861 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1862 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1863 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1866 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1867 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1868 dnl to the MPLS ethertype of the MPLS push action which differs to that
1869 dnl of the input packet.
1870 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1873 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:02,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
1875 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1876 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1878 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1879 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1880 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
1881 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1882 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1883 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1884 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1886 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1887 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
1888 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1889 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1890 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1891 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1893 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1894 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
1895 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1896 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1897 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1898 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1904 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1905 OVS_VSWITCHD_START([dnl
1906 add-port br0 p1 -- set Interface p1 type=dummy
1908 ON_EXIT([kill `cat ovs-ofctl.pid`])
1910 AT_CAPTURE_FILE([ofctl_monitor.log])
1911 AT_DATA([flows.txt], [dnl
1912 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
1913 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
1914 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
1915 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
1916 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
1917 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
1918 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
1919 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
1920 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
1921 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
1923 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1925 dnl Modified MPLS controller action.
1926 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1927 dnl both of these in the final flow
1928 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1931 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)'
1933 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1934 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1936 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1937 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1938 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
1939 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1940 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1941 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1942 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1943 00000040 00 00 00 00
1945 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1946 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
1947 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1948 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1949 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1950 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1951 00000040 00 00 00 00
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
1962 dnl Modified MPLS controller action.
1963 dnl In this test, the input packet in vlan-tagged, which should be stripped
1964 dnl before we push the MPLS and VLAN tags.
1965 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1968 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))'
1970 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1971 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1973 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1974 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1975 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
1976 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1977 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1978 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1979 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1981 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1982 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
1983 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1984 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1985 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1986 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1988 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1989 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
1990 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1991 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1992 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1993 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1996 dnl Modified MPLS controller action.
1997 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1998 dnl both of these in the final flow
1999 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2002 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)'
2004 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2005 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2007 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2008 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2009 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
2010 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2011 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2012 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2013 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2014 00000040 00 00 00 00
2016 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2017 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
2018 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2019 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2020 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2021 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2022 00000040 00 00 00 00
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
2033 dnl Modified MPLS controller action.
2034 dnl In this test, the input packet in vlan-tagged, which should be stripped
2035 dnl before we push the MPLS and VLAN tags.
2036 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2039 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))'
2041 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2042 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2044 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2045 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2046 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
2047 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2048 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2049 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2050 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2052 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2053 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
2054 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2055 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2056 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2057 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2059 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2060 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
2061 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2062 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2063 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2064 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2067 dnl Modified MPLS controller action.
2068 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2069 dnl actions are reordered, so we see both of these in the final flow.
2070 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2073 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)'
2075 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2076 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2078 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2079 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2080 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
2081 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2082 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2083 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2084 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2085 00000040 00 00 00 00
2087 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2088 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
2089 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2090 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2091 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2092 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2093 00000040 00 00 00 00
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
2104 dnl Modified MPLS controller action.
2105 dnl In this test, the input packet in vlan-tagged, which should be stripped
2106 dnl before we push the MPLS and VLAN tags.
2107 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2110 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))'
2112 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2113 ovs-appctl -t ovs-ofctl exit
2115 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2116 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2117 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
2118 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2119 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2120 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2121 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2123 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2124 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
2125 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2126 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2127 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2128 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2130 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2131 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
2132 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2133 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2134 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2135 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2138 dnl Modified MPLS controller action.
2139 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2140 dnl actions are reordered, so we see both of these in the final flow.
2141 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2144 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)'
2146 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2147 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2149 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2150 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2151 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
2152 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2153 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2154 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2155 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2156 00000040 00 00 00 00
2158 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2159 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
2160 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2161 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2162 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2163 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2164 00000040 00 00 00 00
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
2175 dnl Modified MPLS controller action.
2176 dnl In this test, the input packet in vlan-tagged, which should be stripped
2177 dnl before we push the MPLS and VLAN tags.
2178 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2181 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))'
2183 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2184 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2186 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2187 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2188 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
2189 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2190 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2191 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2192 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2194 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2195 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
2196 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2197 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2198 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2199 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2201 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2202 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
2203 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2204 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2205 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2206 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2209 dnl Modified MPLS controller action.
2210 dnl In this test, the input packet in vlan-tagged, which should be stripped
2211 dnl before we push the MPLS and VLAN tags.
2212 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2215 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))'
2217 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2218 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2220 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2221 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2222 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
2223 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2224 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2225 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2226 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2228 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2229 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
2230 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2231 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2232 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2233 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2235 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2236 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
2237 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2238 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2239 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2240 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2243 dnl Modified MPLS controller action.
2244 dnl In this test, the input packet in vlan-tagged, which should be modified
2245 dnl before we push MPLS and VLAN tags.
2246 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2249 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))'
2251 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2252 ovs-appctl -t ovs-ofctl exit
2254 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2255 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2256 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
2257 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2258 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2259 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2260 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2262 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2263 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
2264 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2265 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2266 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2267 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2269 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2270 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
2271 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2272 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2273 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2274 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2277 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2278 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2279 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
2280 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
2281 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
2282 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
2283 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
2284 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
2285 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
2286 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
2287 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
2288 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
2289 OFPST_FLOW reply (OF1.2):
2295 AT_SETUP([ofproto-dpif - fragment handling])
2297 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2298 AT_DATA([flows.txt], [dnl
2299 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2300 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2301 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2302 priority=50 tcp ip_frag=no actions=output:4
2303 priority=50 tcp ip_frag=first actions=output:5
2304 priority=50 tcp ip_frag=later actions=output:6
2306 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2308 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"
2309 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2310 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2311 later_flow="$base_flow,frag=later)"
2313 # mode no first later
2316 'drop 1 drop drop' \
2325 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2326 for type in no first later; do
2327 eval flow=\$${type}_flow exp_output=\$$type
2328 printf "\n%s\n" "----$mode $type-----"
2329 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2331 if test $mode = drop && test $type != no; then
2332 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2334 echo "Datapath actions: $exp_output" >> expout
2335 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2341 AT_SETUP([ofproto-dpif - exit])
2343 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2344 AT_DATA([flows.txt], [dnl
2345 in_port=1 actions=output:10,exit,output:11
2346 in_port=2 actions=output:12,resubmit:1,output:12
2347 in_port=3 actions=output:13,resubmit:2,output:14
2349 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2350 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])
2351 AT_CHECK([tail -1 stdout], [0],
2352 [Datapath actions: 10
2354 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])
2355 AT_CHECK([tail -1 stdout], [0],
2356 [Datapath actions: 12,10
2358 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])
2359 AT_CHECK([tail -1 stdout], [0],
2360 [Datapath actions: 13,12,10
2366 AT_SETUP([ofproto-dpif - mirroring, select_all])
2368 ADD_OF_PORTS([br0], 1, 2, 3)
2370 set Bridge br0 mirrors=@m --\
2371 --id=@p3 get Port p3 --\
2372 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2374 AT_DATA([flows.txt], [dnl
2375 in_port=1 actions=output:2
2376 in_port=2 actions=output:1
2378 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2380 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)"
2381 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2382 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2383 [Datapath actions: 2,3
2386 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)"
2387 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2388 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2389 [Datapath actions: 1,3
2396 AT_SETUP([ofproto-dpif - mirroring, select_src])
2398 ADD_OF_PORTS([br0], 1, 2, 3)
2400 set Bridge br0 mirrors=@m --\
2401 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2402 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2404 AT_DATA([flows.txt], [dnl
2405 in_port=1 actions=output:2
2406 in_port=2 actions=output:1
2408 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2410 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)"
2411 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2412 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2413 [Datapath actions: 2,3
2416 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)"
2417 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2418 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2419 [Datapath actions: 1
2424 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2426 ADD_OF_PORTS([br0], 1, 2)
2428 set Bridge br0 mirrors=@m --\
2429 --id=@p2 get Port p2 --\
2430 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2432 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2434 # "in_port" defaults to OFPP_NONE if it's not specified.
2435 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"
2436 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2437 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2438 [Datapath actions: 1,2
2445 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2447 ADD_OF_PORTS([br0], 1, 2, 3)
2449 set Bridge br0 mirrors=@m --\
2450 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2451 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2453 AT_DATA([flows.txt], [dnl
2454 in_port=1 actions=output:2
2455 in_port=2 actions=output:1
2457 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2459 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)"
2460 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2461 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2462 [Datapath actions: 2,3
2465 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)"
2466 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2467 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2468 [Datapath actions: 1
2475 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2477 ADD_OF_PORTS([br0], 1, 2, 3)
2479 set Bridge br0 mirrors=@m --\
2480 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2481 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2483 AT_DATA([flows.txt], [dnl
2484 in_port=1, actions=output:2
2486 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2488 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)"
2489 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2490 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2491 [Datapath actions: 2
2494 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))"
2495 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2496 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2497 [Datapath actions: 2
2500 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))"
2501 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2502 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2503 [Datapath actions: 2,3
2510 AT_SETUP([ofproto-dpif - mirroring, output_port])
2512 ADD_OF_PORTS([br0], 1, 2, 3)
2514 set Bridge br0 mirrors=@m --\
2515 --id=@p3 get Port p3 --\
2516 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2518 AT_DATA([flows.txt], [dnl
2519 in_port=1 actions=mod_vlan_vid:17,output:2
2520 in_port=2 actions=output:1
2522 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2524 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)"
2525 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2526 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2527 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2530 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)"
2531 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2532 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2533 [Datapath actions: 1,3
2539 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2541 ADD_OF_PORTS([br0], 1, 2)
2543 set Bridge br0 mirrors=@m --\
2544 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2546 AT_DATA([flows.txt], [dnl
2547 in_port=1 actions=output:2
2548 in_port=2 actions=mod_vlan_vid:17,output:1
2550 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2552 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)"
2553 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2554 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2556 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2557 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2559 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2561 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)"
2562 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2563 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2565 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2566 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2568 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2573 # Two testcases below are for the ofproto/trace command
2574 # The first one tests all correct syntax:
2575 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2576 # ofproto/trace br_name br_flow [-generate|packet]
2577 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2578 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2579 ADD_OF_PORTS([br0], 1, 2, 3)
2581 AT_DATA([flows.txt], [dnl
2582 in_port=1 actions=output:2
2583 in_port=2 actions=output:1
2585 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2587 odp_flow="in_port(p1)"
2589 # Test command: ofproto/trace odp_flow with in_port as a name.
2590 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2591 AT_CHECK([tail -1 stdout], [0], [dnl
2595 odp_flow="in_port(1)"
2596 # Test command: ofproto/trace odp_flow
2597 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2598 AT_CHECK([tail -1 stdout], [0], [dnl
2602 # Test command: ofproto/trace dp_name odp_flow
2603 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2604 AT_CHECK([tail -1 stdout], [0], [dnl
2607 # Test commmand: ofproto/trace br_name br_flow
2608 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2609 AT_CHECK([tail -1 stdout], [0], [dnl
2613 # Delete the inserted flows
2614 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2615 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2617 # This section beflow tests the [-generate] option
2618 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2619 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"
2621 # Test command: ofproto/trace odp_flow
2622 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2623 # Check for no MAC learning entry
2624 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2628 # Test command: ofproto/trace br_name br_flow
2629 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2630 # Check for no MAC learning entry
2631 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2635 # Test command: ofproto/trace odp_flow -generate
2636 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2637 # Check for the MAC learning entry
2638 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2640 3 0 50:54:00:00:00:05 ?
2643 # Test command: ofproto/trace dp_name odp_flow -generate
2644 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2645 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2646 -generate], [0], [stdout])
2647 # Check for both MAC learning entries
2648 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2650 3 0 50:54:00:00:00:05 ?
2651 1 0 50:54:00:00:00:06 ?
2654 # Test command: ofproto/trace br_name br_flow -generate
2655 AT_CHECK([ovs-appctl ofproto/trace br0 \
2656 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2657 -generate], [0], [stdout])
2658 # Check for both MAC learning entries.
2659 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2661 3 0 50:54:00:00:00:05 ?
2662 1 0 50:54:00:00:00:06 ?
2663 2 0 50:54:00:00:00:07 ?
2666 # This section beflow tests the [packet] option
2667 # The ovs-tcpundump of packets between port1 and port2
2668 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2669 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2671 # Construct the MAC learning table
2672 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2673 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2674 -generate], [0], [stdout])
2676 # Construct the MAC learning table
2677 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2678 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2679 -generate], [0], [stdout])
2681 # Test command: ofproto/trace odp_flow packet
2682 AT_CHECK([ovs-appctl ofproto/trace \
2683 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2684 AT_CHECK([tail -1 stdout], [0], [dnl
2687 AT_CHECK([head -n 2 stdout], [0], [dnl
2689 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
2692 # Test command: ofproto/trace dp_name odp_flow packet
2693 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2694 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2695 AT_CHECK([tail -1 stdout], [0], [dnl
2698 AT_CHECK([head -n 2 stdout], [0], [dnl
2700 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
2703 # Test command: ofproto/trace br_name br_flow packet
2704 AT_CHECK([ovs-appctl ofproto/trace br0 \
2705 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2706 AT_CHECK([tail -1 stdout], [0], [dnl
2709 AT_CHECK([head -n 2 stdout], [0], [dnl
2711 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
2717 # The second test tests the corner cases
2718 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2720 ADD_OF_PORTS([br0], 1, 2)
2723 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2724 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2726 generate="-generate"
2727 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2729 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2735 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2737 AT_CHECK([tail -2 stderr], [0], [dnl
2738 Cannot find the datapath
2739 ovs-appctl: ovs-vswitchd: server returned an error
2742 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2748 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2750 AT_CHECK([tail -2 stderr], [0], [dnl
2751 Cannot find the datapath
2752 ovs-appctl: ovs-vswitchd: server returned an error
2755 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2761 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2763 AT_CHECK([tail -2 stderr], [0], [dnl
2764 Cannot find the datapath
2765 ovs-appctl: ovs-vswitchd: server returned an error
2768 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2774 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2776 AT_CHECK([tail -2 stderr], [0], [dnl
2777 Cannot find the datapath
2778 ovs-appctl: ovs-vswitchd: server returned an error
2781 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2787 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2789 AT_CHECK([tail -2 stderr], [0], [dnl
2791 ovs-appctl: ovs-vswitchd: server returned an error
2794 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2800 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2802 AT_CHECK([tail -2 stderr], [0], [dnl
2803 Must specify bridge name
2804 ovs-appctl: ovs-vswitchd: server returned an error
2807 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2808 AT_CHECK([ovs-appctl ofproto/trace \
2809 ovs-dummy "$odp_flow" garbage_option],
2810 [2], [stdout],[stderr])
2811 AT_CHECK([tail -2 stderr], [0], [dnl
2812 Trailing garbage in packet data
2813 ovs-appctl: ovs-vswitchd: server returned an error
2816 # Test incorrect command: ofproto/trace with 4 arguments
2817 AT_CHECK([ovs-appctl ofproto/trace \
2818 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2819 AT_CHECK([tail -2 stderr], [0], [dnl
2820 "ofproto/trace" command takes at most 3 arguments
2821 ovs-appctl: ovs-vswitchd: server returned an error
2824 # Test incorrect command: ofproto/trace with 0 argument
2825 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2826 AT_CHECK([tail -2 stderr], [0], [dnl
2827 "ofproto/trace" command requires at least 1 arguments
2828 ovs-appctl: ovs-vswitchd: server returned an error
2834 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2836 ADD_OF_PORTS([br0], 1, 2, 3)
2838 AT_DATA([flows.txt], [dnl
2839 in_port=1 actions=output:2
2840 in_port=2 actions=output:1
2842 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2844 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2845 AT_CHECK([tail -1 stdout], [0], [dnl
2846 Datapath actions: push_vlan(vid=123,pcp=0),2
2853 m4_define([OFPROTO_TRACE],
2855 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2856 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2858 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2861 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2864 AT_SETUP([ofproto-dpif - MAC learning])
2865 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2866 ADD_OF_PORTS([br0], 1, 2, 3)
2868 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)'
2870 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2873 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2877 # Check for the MAC learning entry.
2878 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2880 3 0 50:54:00:00:00:05 ?
2883 # Trace a packet arrival destined for the learned MAC.
2884 # (This will also learn a MAC.)
2887 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2891 # Check for both MAC learning entries.
2892 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2894 3 0 50:54:00:00:00:05 ?
2895 1 0 50:54:00:00:00:06 ?
2898 # Trace a packet arrival that updates the first learned MAC entry.
2901 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2905 # Check that the MAC learning entry was updated.
2906 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2908 1 0 50:54:00:00:00:06 ?
2909 2 0 50:54:00:00:00:05 ?
2912 # Add another bridge.
2916 -- set bridge br1 datapath-type=dummy])
2917 ADD_OF_PORTS([br1], 4, 5)
2919 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2922 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2927 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2931 # Check that the MAC learning entries were added.
2932 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2934 4 0 50:54:00:00:00:06 ?
2935 5 0 50:54:00:00:00:07 ?
2938 # Delete port p1 and see that its MAC learning entry disappeared, and
2939 # that the MAC learning entry for the same MAC was also deleted from br1.
2940 AT_CHECK([ovs-vsctl del-port p1])
2941 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2943 2 0 50:54:00:00:00:05 ?
2945 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2947 5 0 50:54:00:00:00:07 ?
2953 AT_SETUP([ofproto-dpif - MAC table overflow])
2955 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2956 ADD_OF_PORTS([br0], 1, 2, 3)
2958 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)'
2960 AT_CHECK([ovs-appctl time/stop])
2962 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2963 for i in 0 1 2 3 4 5 6 7 8 9; do
2966 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2969 ovs-appctl time/warp 1000
2972 # Check for the MAC learning entries.
2973 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2975 3 0 50:54:00:00:00:00
2976 3 0 50:54:00:00:00:01
2977 3 0 50:54:00:00:00:02
2978 3 0 50:54:00:00:00:03
2979 3 0 50:54:00:00:00:04
2980 3 0 50:54:00:00:00:05
2981 3 0 50:54:00:00:00:06
2982 3 0 50:54:00:00:00:07
2983 3 0 50:54:00:00:00:08
2984 3 0 50:54:00:00:00:09
2988 # Trace another ARP packet on another MAC.
2991 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2995 # Check that the new one chased the oldest one out of the table.
2996 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2998 3 0 50:54:00:00:00:01 ?
2999 3 0 50:54:00:00:00:02 ?
3000 3 0 50:54:00:00:00:03 ?
3001 3 0 50:54:00:00:00:04 ?
3002 3 0 50:54:00:00:00:05 ?
3003 3 0 50:54:00:00:00:06 ?
3004 3 0 50:54:00:00:00:07 ?
3005 3 0 50:54:00:00:00:08 ?
3006 3 0 50:54:00:00:00:09 ?
3007 3 0 50:54:00:00:00:10 ?
3013 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3015 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3017 # IP_VERSION_TYPE is used in AT_SETUP
3018 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3019 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3020 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3022 ON_EXIT([kill `cat test-sflow.pid`])
3023 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3024 AT_CAPTURE_FILE([sflow.log])
3025 SFLOW_PORT=`parse_listening_port < test-sflow.log`
3026 ovs-appctl time/stop
3028 ADD_OF_PORTS([br0], 1, 2)
3030 set Interface br0 options:ifindex=1002 -- \
3031 set Interface p1 options:ifindex=1004 -- \
3032 set Interface p2 options:ifindex=1003 -- \
3033 set Bridge br0 sflow=@sf -- \
3034 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3035 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3037 dnl open with ARP packets to seed the bridge-learning. The output
3038 dnl ifIndex numbers should be reported predictably after that.
3039 dnl Since we set sampling=1 we should see all of these packets
3040 dnl reported. Sorting the output by data-source and seqNo makes
3041 dnl it deterministic. Ensuring that we send at least two packets
3042 dnl into each port means we get to check the seq nos are
3043 dnl incrementing correctly.
3044 dnl because packets from different ports can be handled by separate
3045 dnl threads, put some sleeps
3047 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)'
3049 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)'
3051 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)'
3053 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)'
3054 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)'
3056 dnl sleep long enough to get more than one counter sample
3057 dnl from each datasource so we can check sequence numbers
3058 for i in `seq 1 30`; do
3059 ovs-appctl time/warp 100
3062 ovs-appctl -t test-sflow exit
3064 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3085 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
3105 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
3125 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
3145 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
3165 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
3168 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3182 in_broadcasts=4294967295
3185 in_unknownprotos=4294967295
3188 out_multicasts=4294967295
3189 out_broadcasts=4294967295
3205 in_broadcasts=4294967295
3208 in_unknownprotos=4294967295
3211 out_multicasts=4294967295
3212 out_broadcasts=4294967295
3228 in_broadcasts=4294967295
3231 in_unknownprotos=4294967295
3234 out_multicasts=4294967295
3235 out_broadcasts=4294967295
3251 in_broadcasts=4294967295
3254 in_unknownprotos=4294967295
3257 out_multicasts=4294967295
3258 out_broadcasts=4294967295
3274 in_broadcasts=4294967295
3277 in_unknownprotos=4294967295
3280 out_multicasts=4294967295
3281 out_broadcasts=4294967295
3297 in_broadcasts=4294967295
3300 in_unknownprotos=4294967295
3303 out_multicasts=4294967295
3304 out_broadcasts=4294967295
3311 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3312 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3314 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3316 # Test that basic NetFlow reports flow statistics correctly:
3317 # The initial packet of a flow are correctly accounted.
3318 # Later packets within a flow are correctly accounted.
3319 # Flow actions changing (in this case, due to MAC learning)
3320 # cause a record to be sent.
3322 # IP_VERSION_TYPE is used in AT_SETUP
3323 m4_define([CHECK_NETFLOW_EXPIRATION],
3324 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3325 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3326 ADD_OF_PORTS([br0], 1, 2)
3328 ovs-appctl time/stop
3329 ON_EXIT([kill `cat test-netflow.pid`])
3330 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3331 AT_CAPTURE_FILE([netflow.log])
3332 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3335 set Bridge br0 netflow=@nf -- \
3336 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3337 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3339 for delay in 1000 30000; do
3340 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)'
3341 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)'
3343 ovs-appctl time/warp $delay
3346 ovs-appctl time/warp 6000
3349 ovs-appctl -t test-netflow exit
3351 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])
3353 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])
3355 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3356 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3357 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3361 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3362 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3364 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3366 # Test that basic NetFlow reports active expirations correctly.
3368 # IP_VERSION_TYPE is used in AT_SETUP
3369 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3370 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3372 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3373 ADD_OF_PORTS([br0], 1, 2)
3375 ON_EXIT([kill `cat test-netflow.pid`])
3376 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3377 AT_CAPTURE_FILE([netflow.log])
3378 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3381 set Bridge br0 netflow=@nf -- \
3382 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3383 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3385 AT_CHECK([ovs-appctl time/stop])
3387 while test $n -le 60; do
3390 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)'
3391 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)'
3393 ovs-appctl time/warp 1000
3396 ovs-appctl time/warp 10000
3400 ovs-appctl -t test-netflow exit
3402 # Count the number of reported packets:
3403 # - From source to destination before MAC learning kicks in (just one).
3404 # - From source to destination after that.
3405 # - From destination to source.
3413 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3420 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3423 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3426 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3433 eval $counter=\`expr \$$counter + \$pkts\`
3434 n_recs=`expr $n_recs + 1`
3437 # There should be exactly 1 MAC learning packet,
3438 # exactly 59 other packets in that direction,
3439 # and exactly 60 packets in the other direction.
3440 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3445 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3446 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3448 AT_SETUP([ofproto-dpif - flow stats])
3450 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3451 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3453 ovs-appctl time/stop
3455 for i in `seq 1 10`; do
3456 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)'
3459 ovs-appctl time/warp 1000
3461 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3462 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3463 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3464 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3469 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3471 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3472 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3474 ovs-appctl time/stop
3476 for i in `seq 1 10`; do
3477 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)'
3480 ovs-appctl time/warp 100
3481 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3482 ovs-appctl time/warp 1000
3484 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3485 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3486 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3487 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3492 AT_SETUP([idle_age and hard_age increase over time])
3495 # get_ages DURATION HARD IDLE
3497 # Fetch the flow duration, hard age, and idle age into the variables
3498 # whose names are given as arguments. Rounds DURATION down to the
3499 # nearest integer. If hard_age doesn't appear in the output, sets
3500 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3503 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3505 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3506 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3507 AS_VAR_COPY([$1], [duration])
3509 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3510 if test X"$hard" = X; then
3513 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3515 AS_VAR_COPY([$2], [hard])
3517 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3518 if test X"$idle" = X; then
3521 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3523 AS_VAR_COPY([$3], [idle])
3526 # Add a flow and get its initial hard and idle age.
3527 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3528 get_ages duration1 hard1 idle1
3530 ovs-appctl time/stop
3531 # Warp time forward by 10 seconds, then modify the flow's actions.
3532 ovs-appctl time/warp 10000
3533 get_ages duration2 hard2 idle2
3534 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3536 # Warp time forward by 10 seconds.
3537 ovs-appctl time/warp 10000
3538 get_ages duration3 hard3 idle3
3540 # Warp time forward 10 more seconds, then pass some packets through the flow,
3541 # then warp forward a few more times because idle times are only updated
3543 ovs-appctl time/warp 10000
3544 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)'
3545 ovs-appctl time/warp 1000
3546 ovs-appctl time/warp 1000
3547 ovs-appctl time/warp 1000
3548 get_ages duration4 hard4 idle4
3550 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3551 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3552 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3554 # Duration should increase steadily over time.
3555 AT_CHECK([test $duration1 -lt $duration2])
3556 AT_CHECK([test $duration2 -lt $duration3])
3557 AT_CHECK([test $duration3 -lt $duration4])
3559 # Hard age should be "none" initially because it's the same as flow_duration,
3560 # then it should increase.
3561 AT_CHECK([test $hard1 = none])
3562 AT_CHECK([test $hard2 = none])
3563 AT_CHECK([test $hard3 != none])
3564 AT_CHECK([test $hard4 != none])
3565 AT_CHECK([test $hard3 -lt $hard4])
3567 # Idle age should increase from 1 to 2 to 3, then decrease.
3568 AT_CHECK([test $idle1 -lt $idle2])
3569 AT_CHECK([test $idle2 -lt $idle3])
3570 AT_CHECK([test $idle3 -gt $idle4])
3572 # Check some invariant relationships.
3573 AT_CHECK([test $duration1 = $idle1])
3574 AT_CHECK([test $duration2 = $idle2])
3575 AT_CHECK([test $duration3 = $idle3])
3576 AT_CHECK([test $idle3 -gt $hard3])
3577 AT_CHECK([test $idle4 -lt $hard4])
3578 AT_CHECK([test $hard4 -lt $duration4])
3583 AT_SETUP([ofproto-dpif - fin_timeout])
3585 AT_DATA([flows.txt], [dnl
3586 in_port=1 actions=output:2
3587 in_port=2 actions=mod_vlan_vid:17,output:1
3589 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3590 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3592 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3595 ovs-appctl time/stop
3596 # Check that a TCP SYN packet does not change the timeout. (Because
3597 # flow stats updates are mainly what implements the fin_timeout
3598 # feature, we warp forward a couple of times to ensure that flow stats
3599 # run before re-checking the flow table.)
3600 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3601 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3604 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3606 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3608 # Check that a TCP FIN packet does change the timeout.
3609 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3610 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3613 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3615 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3620 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3621 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3622 ADD_OF_PORTS([br0], [1], [2])
3623 ADD_OF_PORTS([br1], [3])
3625 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3632 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3633 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3634 ADD_OF_PORTS([br0], [1], [2])
3635 ADD_OF_PORTS([br1], [3])
3637 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3638 dummy@ovs-dummy: hit:0 missed:0
3640 br0 65534/100: (dummy)
3644 br1 65534/101: (dummy)
3650 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3651 OVS_VSWITCHD_START([add-br br1 -- \
3652 set bridge br1 datapath-type=dummy fail-mode=secure])
3653 ADD_OF_PORTS([br0], [1], [2])
3654 ADD_OF_PORTS([br1], [3])
3656 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)'])
3657 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)'])
3658 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)'])
3660 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3661 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
3662 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
3665 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3666 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
3669 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3670 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
3671 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
3674 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3675 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
3681 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
3682 OVS_VSWITCHD_START([dnl
3683 add-port br0 p1 -- set Interface p1 type=dummy
3685 ON_EXIT([kill `cat ovs-ofctl.pid`])
3687 AT_CAPTURE_FILE([ofctl_monitor.log])
3688 AT_DATA([flows.txt], [dnl
3689 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3690 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3692 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3694 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3695 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3697 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3698 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)
3699 dnl (label 20, exp 0, [S], ttl 32)
3700 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3701 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3703 for dl_src in 00 01; do
3704 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"])
3706 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3707 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))
3715 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3716 OVS_VSWITCHD_START([dnl
3717 add-port br0 p1 -- set Interface p1 type=dummy
3719 ON_EXIT([kill `cat ovs-ofctl.pid`])
3721 AT_CAPTURE_FILE([ofctl_monitor.log])
3722 AT_DATA([flows.txt], [dnl
3723 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3724 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3726 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3728 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3729 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3730 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3732 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3733 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)
3734 dnl (label 20, exp 0, ttl 32)
3735 dnl (label 20, exp 0, ttl 32)
3736 dnl (label 20, exp 0, [S], ttl 32)
3737 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3738 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3740 for dl_src in 00 01; do
3741 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"])
3743 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3744 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))
3751 AT_SETUP([ofproto-dpif - patch ports])
3752 OVS_VSWITCHD_START([add-br br1 \
3753 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3754 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3755 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3757 ADD_OF_PORTS([br0], [2])
3758 ADD_OF_PORTS([br1], [3])
3760 AT_CHECK([ovs-appctl time/stop])
3762 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3763 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3765 for i in $(seq 1 10); do
3766 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)'
3767 if [[ $i -eq 1 ]]; then
3772 for i in $(seq 1 5); do
3773 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)'
3774 if [[ $i -eq 1 ]]; then
3779 AT_CHECK([ovs-appctl time/warp 500], [0],
3783 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3784 dummy@ovs-dummy: hit:13 missed:2
3786 br0 65534/100: (dummy)
3788 pbr0 1/none: (patch: peer=pbr1)
3790 br1 65534/101: (dummy)
3792 pbr1 1/none: (patch: peer=pbr0)
3795 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3796 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
3798 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
3799 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
3802 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3803 OFPST_PORT reply (xid=0x4): 1 ports
3804 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3805 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3808 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3809 OFPST_PORT reply (xid=0x4): 1 ports
3810 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3811 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3817 AT_SETUP([ofproto-dpif - port duration])
3818 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3819 ADD_OF_PORTS([br0], 1, 2)
3821 ovs-appctl time/stop
3822 ovs-appctl time/warp 10000
3824 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3825 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3834 dnl ----------------------------------------------------------------------
3835 AT_BANNER([ofproto-dpif -- megaflows])
3837 AT_SETUP([ofproto-dpif megaflow - port classification])
3839 ADD_OF_PORTS([br0], [1], [2])
3840 AT_DATA([flows.txt], [dnl
3841 table=0 in_port=1 actions=output(2)
3843 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3844 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)'])
3845 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)'])
3847 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3848 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>
3853 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3855 ADD_OF_PORTS([br0], [1], [2])
3856 AT_DATA([flows.txt], [dnl
3857 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3859 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3860 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)'])
3861 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)'])
3863 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3864 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>
3865 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>
3870 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3872 ADD_OF_PORTS([br0], [1], [2])
3873 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], [])
3874 AT_DATA([flows.txt], [dnl
3875 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3877 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3878 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)'])
3879 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)'])
3881 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3882 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>
3883 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>
3888 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3890 ADD_OF_PORTS([br0], [1], [2])
3891 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], [])
3892 AT_DATA([flows.txt], [dnl
3893 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3895 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3896 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)'])
3897 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)'])
3899 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3900 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>
3901 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>
3906 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3908 ADD_OF_PORTS([br0], [1], [2])
3909 AT_DATA([flows.txt], [dnl
3910 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3912 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3913 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3914 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3915 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3916 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>
3921 AT_SETUP([ofproto-dpif megaflow - normal])
3923 ADD_OF_PORTS([br0], [1], [2])
3924 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3925 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)'])
3926 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)'])
3928 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3929 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>
3930 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>
3935 AT_SETUP([ofproto-dpif megaflow - mpls])
3937 ADD_OF_PORTS([br0], [1], [2])
3938 AT_DATA([flows.txt], [dnl
3939 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3940 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3942 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3943 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
3944 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)'])
3946 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3947 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>
3948 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>
3953 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3955 # IP_VERSION_TYPE is used in AT_SETUP
3956 m4_define([CHECK_MEGAFLOW_NETFLOW],
3957 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3959 ADD_OF_PORTS([br0], [1], [2])
3961 dnl NetFlow configuration disables wildcarding relevant fields
3962 ON_EXIT([kill `cat test-netflow.pid`])
3963 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3964 AT_CAPTURE_FILE([netflow.log])
3965 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3967 set Bridge br0 netflow=@nf -- \
3968 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3969 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3971 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3972 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)'])
3973 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)'])
3975 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3976 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>
3977 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>
3982 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3983 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
3985 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3987 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3988 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3989 set interface p2 type=dummy ofport_request=2 -- \
3990 set interface p3 type=dummy ofport_request=3])
3991 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3994 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3995 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)'])
3996 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)'])
3998 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3999 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>
4000 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>
4005 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4007 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4008 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4009 set interface p2 type=dummy ofport_request=2 -- \
4010 set interface p3 type=dummy ofport_request=3])
4011 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4014 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4015 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)'])
4016 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)'])
4018 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4019 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>
4020 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>
4025 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4026 # Create bond0 on br0 with interfaces p0 and p1
4027 # and bond1 on br1 with interfaces p2 and p3
4028 # with p0 patched to p2 and p1 patched to p3.
4030 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4031 other-config:lacp-time=fast \
4032 other-config:bond-rebalance-interval=0 -- \
4033 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4034 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4036 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4037 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4038 fail-mode=secure -- \
4039 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4040 other-config:lacp-time=fast \
4041 other-config:bond-rebalance-interval=0 -- \
4042 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4043 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4045 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4047 ADD_OF_PORTS([br0], [7])
4048 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4049 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4050 ovs-appctl time/stop
4051 ovs-appctl time/warp 5000
4052 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)'])
4053 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)'])
4055 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4056 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/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
4057 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/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
4062 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4064 ADD_OF_PORTS([br0], [1], [2])
4065 AT_DATA([flows.txt], [dnl
4066 table=0 in_port=1,ip actions=resubmit(90)
4067 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4069 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4070 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4071 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4073 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4074 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>
4075 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>
4080 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4082 ADD_OF_PORTS([br0], [1], [2])
4083 AT_DATA([flows.txt], [dnl
4084 table=0 in_port=1,ip actions=resubmit(,1)
4085 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4087 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4088 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)'])
4089 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=
4090 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4092 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4093 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>
4094 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>
4099 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4101 ADD_OF_PORTS([br0], [1], [2])
4102 AT_DATA([flows.txt], [dnl
4103 table=0 in_port=1,ip actions=goto_table(1)
4104 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4106 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4107 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)'])
4108 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)'])
4110 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4111 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>
4112 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>
4117 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4119 ADD_OF_PORTS([br0], [1], [2], [3])
4121 set Bridge br0 mirrors=@m --\
4122 --id=@p3 get Port p3 --\
4123 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4125 AT_DATA([flows.txt], [dnl
4126 in_port=1 actions=output:2
4128 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4129 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)'])
4130 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)'])
4132 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4133 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>
4138 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4140 ADD_OF_PORTS([br0], [1], [2], [3])
4142 set Bridge br0 mirrors=@m --\
4143 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4144 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4146 AT_DATA([flows.txt], [dnl
4147 in_port=1 actions=output:2
4149 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4150 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))'])
4151 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)'])
4153 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4154 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>
4155 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>
4160 AT_SETUP([ofproto-dpif megaflow - move action])
4162 ADD_OF_PORTS([br0], [1], [2])
4163 AT_DATA([flows.txt], [dnl
4164 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4165 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4166 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4168 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4169 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)'])
4170 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)'])
4172 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4173 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>
4174 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>
4179 AT_SETUP([ofproto-dpif megaflow - push action])
4181 ADD_OF_PORTS([br0], [1], [2])
4182 AT_DATA([flows.txt], [dnl
4183 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4185 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4186 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)'])
4187 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)'])
4189 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4190 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>
4191 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>
4196 AT_SETUP([ofproto-dpif megaflow - learning])
4198 ADD_OF_PORTS([br0], [1], [2])
4199 AT_DATA([flows.txt], [dnl
4200 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
4202 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4203 ovs-appctl time/stop
4204 # We send each packet twice because the first packet in each flow causes the
4205 # flow table to change and thus revalidations, which (depending on timing)
4206 # can keep a megaflow from being installed. The revalidations are done by
4207 # the second iteration, allowing the flows to be installed.
4209 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)'])
4210 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)'])
4211 ovs-appctl time/warp 100
4214 dnl The original flow is missing due to a revalidation.
4215 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4216 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>
4217 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>
4222 AT_SETUP([ofproto-dpif megaflow - tunnels])
4224 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4225 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4226 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4227 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4229 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4230 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4231 ofport_request=4 options:key=flow])
4232 AT_DATA([flows.txt], [dnl
4233 in_port=1,actions=output(2)
4234 in_port=3,actions=output(4)
4236 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4237 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4238 dnl will cause the packet to be dropped.
4239 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)'])
4240 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)'])
4241 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)'])
4242 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)'])
4244 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4245 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>
4246 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>
4247 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>
4252 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4254 ADD_OF_PORTS([br0], [1], [2])
4255 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], [])
4256 AT_DATA([flows.txt], [dnl
4257 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4259 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4260 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)'])
4261 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)'])
4263 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4264 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>
4265 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>
4270 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4272 ADD_OF_PORTS([br0], [1], [2])
4273 AT_DATA([flows.txt], [dnl
4274 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4276 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4277 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)'])
4278 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)'])
4280 dnl The megaflows do not match the same fields, since the first packet
4281 dnl is essentially a no-op. (The new destination MAC is the same as the
4282 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4283 dnl so that a packet that doesn't need its MAC address changed doesn't
4284 dnl hide one that does. Since the first entry doesn't need to change,
4285 dnl only the destination MAC address is matched (as decided by
4286 dnl ofproto-dpif). The second entry actually updates the destination
4287 dnl MAC, so both the source and destination MAC addresses are
4288 dnl un-wildcarded, since the ODP commit functions update both the source
4289 dnl and destination MAC addresses.
4290 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4291 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
4292 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
4297 AT_SETUP([ofproto-dpif megaflow - disabled])
4299 ADD_OF_PORTS([br0], [1], [2])
4300 AT_DATA([flows.txt], [dnl
4301 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4302 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4304 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4306 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4307 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4308 for i in 1 2 3 4; do
4309 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)'])
4310 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)'])
4313 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4314 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
4315 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
4320 AT_SETUP([ofproto-dpif - datapath port number change])
4321 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4322 ADD_OF_PORTS([br0], 1)
4324 # Trace a flow that should output to p1.
4325 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4327 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4330 # Change p1's port number to 5.
4331 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4333 # Trace a flow that should output to p1 in its new location.
4334 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4336 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4341 # Tests the bundling with various bfd and cfm configurations.
4342 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4343 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4344 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4345 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4346 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4347 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4348 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4349 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4350 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4351 set Interface p0 cfm_mpid=1 -- \
4352 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4354 ovs-appctl time/stop
4355 # advance the clock to stablize everything.
4356 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4357 # cfm/show should show 'recv' fault.
4358 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4361 # bfd/show should show 'up'.
4362 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4363 Local Session State: up
4364 Remote Session State: up
4365 Local Session State: up
4366 Remote Session State: up
4368 # bond/show should show 'may-enable: true' for all slaves.
4369 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4376 # now disable the bfd on p1.
4377 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4378 # advance the clock to stablize everything.
4379 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4380 # cfm/show should show 'recv' fault.
4381 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4384 # bfd/show should show 'down'.
4385 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4386 Local Session State: down
4387 Remote Session State: down
4389 # bond/show should show 'may-enable: false' for p0.
4390 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4395 # now enable the bfd on p1 and disable bfd on p0.
4396 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4397 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4398 # advance the clock to stablize everything.
4399 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4400 # cfm/show should show 'recv' fault.
4401 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4404 # bfd/show should show 'down'.
4405 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4406 Local Session State: down
4407 Remote Session State: down
4409 # bond/show should show 'may-enable: false' for p0 and p1.
4410 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4420 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4421 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4424 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4426 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4427 monitor thread created
4429 # disable bfd on p0.
4430 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4432 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4433 monitor thread terminated
4435 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4438 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4440 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4441 monitor thread created
4443 # disable cfm on p0.
4444 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4446 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4447 monitor thread terminated
4449 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4451 # enable both bfd and cfm on p0.
4452 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4454 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4455 monitor thread created
4457 # disable bfd on p0.
4458 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4459 # check log, there should not be the log of thread terminated.
4460 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4462 # reenable bfd on p0.
4463 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4464 # check log, should still be on log of thread created.
4465 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4466 monitor thread created
4468 # disable bfd and cfm together.
4469 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4471 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4472 monitor thread terminated
4478 # this test helps avoid the deadlock between the main thread and monitor thread.
4479 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4482 for i in `seq 1 199`
4484 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])
4490 AT_BANNER([ofproto-dpif - flow translation resource limits])
4492 AT_SETUP([ofproto-dpif - infinite resubmit])
4494 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4495 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4497 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4499 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4502 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4505 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4507 ADD_OF_PORTS([br0], 1)
4508 (for i in `seq 1 64`; do
4510 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4512 echo "in_port=65, actions=local") > flows
4513 AT_CHECK([ovs-ofctl add-flows br0 flows])
4514 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4515 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4517 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4520 AT_SETUP([ofproto-dpif - too many output actions])
4522 ADD_OF_PORTS([br0], 1)
4523 (for i in `seq 1 12`; do
4525 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4527 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4528 AT_CHECK([ovs-ofctl add-flows br0 flows])
4529 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4530 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4533 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4535 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4538 AT_SETUP([ofproto-dpif - stack too deep])
4540 ADD_OF_PORTS([br0], 1)
4541 (for i in `seq 1 12`; do
4543 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4545 push="push:NXM_NX_REG0[[]]"
4546 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4547 AT_CHECK([ovs-ofctl add-flows br0 flows])
4548 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4549 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4551 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])