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 sleep 1 # wait for revalidator to update stats
726 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
727 n_packets=3, n_bytes=180, actions=goto_table:1
728 OFPST_FLOW reply (OF1.2):
734 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
735 OVS_VSWITCHD_START([dnl
736 add-port br0 p1 -- set Interface p1 type=dummy
738 ON_EXIT([kill `cat ovs-ofctl.pid`])
740 AT_CAPTURE_FILE([ofctl_monitor.log])
741 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
743 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
746 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)'
749 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
750 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
753 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
754 sleep 1 # wait for revalidator to update stats
755 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
756 n_packets=3, n_bytes=180, actions=resubmit(1,1)
757 OFPST_FLOW reply (OF1.2):
763 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
764 OVS_VSWITCHD_START([dnl
765 add-port br0 p1 -- set Interface p1 type=dummy
767 ON_EXIT([kill `cat ovs-ofctl.pid`])
769 AT_CAPTURE_FILE([ofctl_monitor.log])
770 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
771 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
773 dnl Miss table 0, Hit table 1
774 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
777 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)'
779 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
780 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
782 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
783 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
784 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
786 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
787 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
789 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
790 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
793 dnl Hit table 0, Miss all other tables, sent to controller
794 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
797 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)'
799 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
800 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
802 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
803 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
804 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
806 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
807 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
809 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
810 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
813 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
814 sleep 1 # wait for revalidator to update stats
815 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
816 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
817 OFPST_FLOW reply (OF1.2):
823 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
824 OVS_VSWITCHD_START([dnl
825 add-port br0 p1 -- set Interface p1 type=dummy
827 ON_EXIT([kill `cat ovs-ofctl.pid`])
829 AT_CAPTURE_FILE([ofctl_monitor.log])
830 AT_DATA([flows.txt], [dnl
831 table=0 actions=goto_table(1)
832 table=2 dl_src=10:11:11:11:11:11 actions=controller
834 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
835 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
837 dnl Hit table 0, Miss table 1, Hit table 2
838 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
841 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)'
843 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
844 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
853 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
854 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
857 dnl Hit table 1, Miss all other tables, sent to controller
858 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
861 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)'
863 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
864 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
866 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
873 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
874 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
877 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
878 sleep 1 # wait for revalidator to update stats
879 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
880 n_packets=6, n_bytes=360, actions=goto_table:1
881 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
882 OFPST_FLOW reply (OF1.2):
888 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
889 OVS_VSWITCHD_START([dnl
890 add-port br0 p1 -- set Interface p1 type=dummy
892 ON_EXIT([kill `cat ovs-ofctl.pid`])
894 AT_CAPTURE_FILE([ofctl_monitor.log])
895 AT_DATA([flows.txt], [dnl
896 table=0 actions=resubmit(1,1)
897 table=2 dl_src=10:11:11:11:11:11 actions=controller
899 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
900 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
902 dnl Hit table 0, Miss table 1, Dropped
903 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
906 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)'
908 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
910 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
913 dnl Hit table 1, Dropped
914 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
917 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)'
919 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
921 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
924 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
925 sleep 1 # wait for revalidator to update stats
926 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
927 n_packets=6, n_bytes=360, actions=resubmit(1,1)
928 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
929 OFPST_FLOW reply (OF1.2):
935 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
936 OVS_VSWITCHD_START([dnl
937 add-port br0 p1 -- set Interface p1 type=dummy
939 ON_EXIT([kill `cat ovs-ofctl.pid`])
941 AT_CAPTURE_FILE([ofctl_monitor.log])
942 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
944 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
946 dnl Test that missed packets are droped
948 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)'
950 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
952 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
955 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
956 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
963 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
964 OVS_VSWITCHD_START([dnl
965 add-port br0 p1 -- set Interface p1 type=dummy
967 ON_EXIT([kill `cat ovs-ofctl.pid`])
969 AT_CAPTURE_FILE([ofctl_monitor.log])
970 AT_CHECK([ovs-ofctl del-flows br0])
971 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
972 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
974 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
976 dnl Test that missed packets are droped
978 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)'
980 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
982 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
985 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
986 sleep 1 # wait for revalidator to update stats
987 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
988 n_packets=3, n_bytes=180, actions=goto_table:1
989 OFPST_FLOW reply (OF1.2):
995 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
996 OVS_VSWITCHD_START([dnl
997 add-port br0 p1 -- set Interface p1 type=dummy
999 ON_EXIT([kill `cat ovs-ofctl.pid`])
1001 AT_CAPTURE_FILE([ofctl_monitor.log])
1002 AT_CHECK([ovs-ofctl del-flows br0])
1003 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1004 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1006 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1008 dnl Test that missed packets are droped
1010 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)'
1012 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1014 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1017 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1018 sleep 1 # wait for revalidator to update stats
1019 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1020 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1021 OFPST_FLOW reply (OF1.2):
1027 AT_SETUP([ofproto-dpif - controller])
1028 OVS_VSWITCHD_START([dnl
1029 add-port br0 p1 -- set Interface p1 type=dummy
1031 ON_EXIT([kill `cat ovs-ofctl.pid`])
1033 AT_CAPTURE_FILE([ofctl_monitor.log])
1034 AT_DATA([flows.txt], [dnl
1035 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1036 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1037 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1039 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1040 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)
1041 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)
1042 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1043 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)
1044 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1045 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1046 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1047 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
1048 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
1049 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
1050 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
1051 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
1052 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
1053 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
1054 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
1055 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1056 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1057 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
1058 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
1060 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1063 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1066 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)'
1068 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1069 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1071 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1072 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1073 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
1075 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1076 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
1078 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1079 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
1082 dnl Singleton controller action.
1083 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1086 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)'
1088 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1089 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1091 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1092 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1093 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1095 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1096 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1098 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1099 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
1102 dnl Modified controller action.
1103 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1106 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)'
1108 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1109 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1111 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1112 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1113 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
1115 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1116 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
1118 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1119 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
1122 dnl Modified VLAN controller action.
1123 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1126 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)'
1128 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1129 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1131 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1132 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1133 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1135 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1136 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1138 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1139 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
1142 dnl Modified MPLS controller action.
1143 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1146 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)'
1148 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1149 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1151 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1152 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1153 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1156 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
1158 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1159 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
1162 dnl Modified MPLS controller action.
1163 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1166 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)'
1168 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1169 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1171 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1172 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1173 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 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1176 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
1178 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1179 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
1182 dnl Modified MPLS controller action.
1183 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1185 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)
1188 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)'
1190 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1191 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1193 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1194 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1195 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
1197 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1198 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
1200 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1201 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
1204 dnl Modified MPLS controller action.
1205 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1208 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))'
1210 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1211 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1213 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1214 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1215 mpls,metadata=0,in_port=0,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
1217 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1218 mpls,metadata=0,in_port=0,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
1220 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1221 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
1224 dnl Modified MPLS controller action.
1225 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1228 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)'
1230 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1231 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1233 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1234 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1235 mpls,metadata=0,in_port=0,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
1237 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1238 mpls,metadata=0,in_port=0,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
1240 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1241 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
1244 dnl Modified MPLS controller action.
1245 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1248 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)'
1250 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1251 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1253 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1254 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1255 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1257 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1258 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1260 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1261 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
1264 dnl Modified MPLS controller action.
1265 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1268 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)'
1270 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1271 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1273 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1274 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1275 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1277 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1278 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
1280 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1281 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
1284 dnl Modified MPLS controller action.
1285 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1288 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)'
1290 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1291 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1293 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1294 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1295 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1297 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1298 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1300 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1301 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
1304 dnl Modified MPLS actions.
1305 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1308 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)'
1310 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1311 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1313 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1314 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1315 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
1317 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1318 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
1320 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1321 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
1324 dnl Modified MPLS ipv6 controller action.
1325 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1328 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)'
1330 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1331 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1333 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1334 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1335 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 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1338 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
1340 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1341 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=128,mpls_bos=1
1345 dnl Modified MPLS pop action.
1346 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1347 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)
1348 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1350 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1353 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'
1356 # 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)'
1358 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1359 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1361 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1362 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1363 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 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1366 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
1368 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1369 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0,tcp_flags=0x000 tcp_csum:7744
1373 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1376 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)'
1378 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1379 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1381 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1382 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1383 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
1385 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1386 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
1388 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)
1389 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
1391 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)
1392 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
1394 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)
1395 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
1397 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)
1398 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
1400 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)
1401 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
1403 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)
1404 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
1406 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)
1407 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
1411 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1414 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'
1416 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1417 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1419 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1420 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1421 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
1423 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1424 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
1426 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)
1427 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
1429 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)
1430 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
1432 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)
1433 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
1435 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)
1436 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
1438 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)
1439 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
1441 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)
1442 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
1444 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)
1445 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
1448 dnl Modified ARP controller action.
1449 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1452 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)'
1455 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1456 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1457 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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.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
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=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
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=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
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.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
1466 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1467 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.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
1468 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1469 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=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 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1471 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=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
1472 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1473 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.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
1474 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1475 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1478 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1481 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1484 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'
1487 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1488 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1489 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1490 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1491 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
1493 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1494 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
1496 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)
1497 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
1499 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)
1500 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
1502 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)
1503 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
1505 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)
1506 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
1508 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)
1509 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
1511 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)
1512 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
1514 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)
1515 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
1518 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1519 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1520 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1521 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)
1522 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)
1523 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)
1524 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)
1525 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)
1526 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1527 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1528 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
1529 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
1530 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
1531 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
1532 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
1533 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
1534 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
1535 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
1536 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
1537 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
1538 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
1539 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
1540 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1541 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1549 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1550 OVS_VSWITCHD_START([dnl
1551 add-port br0 p1 -- set Interface p1 type=dummy
1553 ON_EXIT([kill `cat ovs-ofctl.pid`])
1555 AT_CAPTURE_FILE([ofctl_monitor.log])
1556 # A table-miss flow has priority 0 and no match
1557 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1559 dnl Singleton controller action.
1560 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1563 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)'
1565 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1566 ovs-appctl -t ovs-ofctl exit
1568 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1569 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1570 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
1572 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1573 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
1575 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1576 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
1579 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1581 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1582 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1590 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1591 OVS_VSWITCHD_START([dnl
1592 add-port br0 p1 -- set Interface p1 type=dummy
1594 ON_EXIT([kill `cat ovs-ofctl.pid`])
1596 AT_CAPTURE_FILE([ofctl_monitor.log])
1597 # A table-miss flow has priority 0 and no match
1598 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1600 dnl Singleton controller action.
1601 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1604 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)'
1606 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1607 ovs-appctl -t ovs-ofctl exit
1609 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1611 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1612 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1613 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
1615 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1616 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
1618 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1619 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
1622 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1624 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1625 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1626 OFPST_FLOW reply (OF1.3):
1632 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1634 ADD_OF_PORTS([br0], [1], [2])
1636 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1637 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'
1639 # Input some packets that should follow the arp modification slow-path.
1641 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)'
1643 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1645 # Check the packets that were output.
1646 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
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.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
1648 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
1649 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
1650 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
1651 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
1652 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 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
1654 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
1655 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1661 AT_SETUP([ofproto-dpif - VLAN handling])
1663 [set Bridge br0 fail-mode=standalone -- \
1664 add-port br0 p1 trunks=10,12 -- \
1665 add-port br0 p2 tag=10 -- \
1666 add-port br0 p3 tag=12 \
1667 other-config:priority-tags=true -- \
1668 add-port br0 p4 tag=12 -- \
1669 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1670 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1671 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1672 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1673 other-config:priority-tags=true -- \
1674 set Interface p1 type=dummy -- \
1675 set Interface p2 type=dummy -- \
1676 set Interface p3 type=dummy -- \
1677 set Interface p4 type=dummy -- \
1678 set Interface p5 type=dummy -- \
1679 set Interface p6 type=dummy -- \
1680 set Interface p7 type=dummy -- \
1681 set Interface p8 type=dummy --])
1683 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1684 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1690 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1691 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1694 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1695 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1699 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1700 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1703 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1704 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1705 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1706 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1707 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1714 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1715 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1716 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1723 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1724 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1725 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1732 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1733 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1734 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1735 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1736 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1739 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1740 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1741 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1742 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1743 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1744 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1745 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1748 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1749 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1750 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1751 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1752 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1753 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1754 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1757 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1758 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1759 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1760 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1761 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1762 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1763 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1766 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1767 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1775 if test $vlan = none; then
1776 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1778 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))"
1781 echo "----------------------------------------------------------------------"
1782 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1784 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1785 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1787 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1789 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1795 AT_SETUP([ofproto-dpif - MPLS handling])
1796 OVS_VSWITCHD_START([dnl
1797 add-port br0 p1 -- set Interface p1 type=dummy
1799 ON_EXIT([kill `cat ovs-ofctl.pid`])
1801 AT_CAPTURE_FILE([ofctl_monitor.log])
1802 AT_DATA([flows.txt], [dnl
1803 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1804 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1805 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1807 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1809 dnl In this test, we push an MPLS tag to an ethernet packet.
1810 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1813 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)'
1815 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1816 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1818 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1819 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1820 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
1821 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1822 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1823 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1824 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1826 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1827 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
1828 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1829 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1830 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1831 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1833 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1834 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
1835 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1836 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1837 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1838 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1841 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1842 dnl copied exactly, except for the BOS bit.
1843 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1846 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)'
1848 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1849 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1851 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1852 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1853 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
1854 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1855 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1856 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1857 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1859 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1860 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
1861 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1862 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1863 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1864 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1866 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1867 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
1868 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1869 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1870 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1871 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1874 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1875 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1876 dnl to the MPLS ethertype of the MPLS push action which differs to that
1877 dnl of the input packet.
1878 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1881 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)'
1883 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1884 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1886 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1887 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1888 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
1889 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1890 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1891 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1892 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1894 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1895 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
1896 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1897 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1898 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1899 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1901 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1902 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
1903 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1904 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1905 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1906 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1912 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1913 OVS_VSWITCHD_START([dnl
1914 add-port br0 p1 -- set Interface p1 type=dummy
1916 ON_EXIT([kill `cat ovs-ofctl.pid`])
1918 AT_CAPTURE_FILE([ofctl_monitor.log])
1919 AT_DATA([flows.txt], [dnl
1920 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
1921 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
1922 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
1923 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
1924 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
1925 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
1926 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
1927 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
1928 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
1929 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
1931 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1933 dnl Modified MPLS controller action.
1934 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1935 dnl both of these in the final flow
1936 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1939 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)'
1941 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1942 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1944 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
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
1961 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1962 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1963 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1964 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1965 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1966 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1967 00000040 00 00 00 00
1970 dnl Modified MPLS controller action.
1971 dnl In this test, the input packet in vlan-tagged, which should be stripped
1972 dnl before we push the MPLS and VLAN tags.
1973 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1976 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))'
1978 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1979 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1981 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1982 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1983 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
1984 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1985 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1986 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1987 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1989 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1990 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
1991 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1992 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1993 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1994 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1996 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1997 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
1998 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1999 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2000 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2001 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2004 dnl Modified MPLS controller action.
2005 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2006 dnl both of these in the final flow
2007 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2010 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)'
2012 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2013 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2015 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
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
2032 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2033 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2034 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2035 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2036 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2037 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2038 00000040 00 00 00 00
2041 dnl Modified MPLS controller action.
2042 dnl In this test, the input packet in vlan-tagged, which should be stripped
2043 dnl before we push the MPLS and VLAN tags.
2044 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2047 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))'
2049 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2050 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2052 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2053 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2054 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
2055 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2056 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2057 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2058 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2060 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2061 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
2062 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2063 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2064 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2065 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2067 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2068 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
2069 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2070 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2071 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2072 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2075 dnl Modified MPLS controller action.
2076 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2077 dnl actions are reordered, so we see both of these in the final flow.
2078 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2081 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)'
2083 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2084 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2086 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
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
2103 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2104 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2105 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2106 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2107 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2108 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2109 00000040 00 00 00 00
2112 dnl Modified MPLS controller action.
2113 dnl In this test, the input packet in vlan-tagged, which should be stripped
2114 dnl before we push the MPLS and VLAN tags.
2115 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2118 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))'
2120 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2121 ovs-appctl -t ovs-ofctl exit
2123 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2124 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2125 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
2126 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2127 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2128 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2129 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2131 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2132 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
2133 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2134 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2135 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2136 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2138 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2139 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
2140 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2141 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2142 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2143 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2146 dnl Modified MPLS controller action.
2147 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2148 dnl actions are reordered, so we see both of these in the final flow.
2149 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2152 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)'
2154 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2155 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2157 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
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
2174 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2175 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2176 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2177 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2178 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2179 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2180 00000040 00 00 00 00
2183 dnl Modified MPLS controller action.
2184 dnl In this test, the input packet in vlan-tagged, which should be stripped
2185 dnl before we push the MPLS and VLAN tags.
2186 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2189 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))'
2191 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2192 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2194 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2195 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2196 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
2197 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2198 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2199 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2200 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2202 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2203 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
2204 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2205 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2206 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2207 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2209 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2210 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
2211 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2212 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2213 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2214 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2217 dnl Modified MPLS controller action.
2218 dnl In this test, the input packet in vlan-tagged, which should be stripped
2219 dnl before we push the MPLS and VLAN tags.
2220 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2223 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))'
2225 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2226 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2228 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2229 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2230 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2231 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2232 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2233 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2234 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2236 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2237 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2238 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2239 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2240 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2241 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2243 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2244 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
2245 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2246 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2247 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2248 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2251 dnl Modified MPLS controller action.
2252 dnl In this test, the input packet in vlan-tagged, which should be modified
2253 dnl before we push MPLS and VLAN tags.
2254 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2257 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))'
2259 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2260 ovs-appctl -t ovs-ofctl exit
2262 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2263 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2264 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2265 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2266 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2267 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2268 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2270 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2271 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2272 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2273 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2274 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2275 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2277 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2278 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
2279 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2280 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2281 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2282 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2285 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2286 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2287 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
2288 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
2289 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
2290 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
2291 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
2292 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
2293 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
2294 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
2295 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
2296 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
2297 OFPST_FLOW reply (OF1.2):
2303 AT_SETUP([ofproto-dpif - fragment handling])
2305 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2306 AT_DATA([flows.txt], [dnl
2307 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2308 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2309 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2310 priority=50 tcp ip_frag=no actions=output:4
2311 priority=50 tcp ip_frag=first actions=output:5
2312 priority=50 tcp ip_frag=later actions=output:6
2314 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2316 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"
2317 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2318 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2319 later_flow="$base_flow,frag=later)"
2321 # mode no first later
2324 'drop 1 drop drop' \
2333 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2334 for type in no first later; do
2335 eval flow=\$${type}_flow exp_output=\$$type
2336 printf "\n%s\n" "----$mode $type-----"
2337 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2339 if test $mode = drop && test $type != no; then
2340 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2342 echo "Datapath actions: $exp_output" >> expout
2343 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2349 AT_SETUP([ofproto-dpif - exit])
2351 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2352 AT_DATA([flows.txt], [dnl
2353 in_port=1 actions=output:10,exit,output:11
2354 in_port=2 actions=output:12,resubmit:1,output:12
2355 in_port=3 actions=output:13,resubmit:2,output:14
2357 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2358 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])
2359 AT_CHECK([tail -1 stdout], [0],
2360 [Datapath actions: 10
2362 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])
2363 AT_CHECK([tail -1 stdout], [0],
2364 [Datapath actions: 12,10
2366 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])
2367 AT_CHECK([tail -1 stdout], [0],
2368 [Datapath actions: 13,12,10
2374 AT_SETUP([ofproto-dpif - mirroring, select_all])
2376 ADD_OF_PORTS([br0], 1, 2, 3)
2378 set Bridge br0 mirrors=@m --\
2379 --id=@p3 get Port p3 --\
2380 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2382 AT_DATA([flows.txt], [dnl
2383 in_port=1 actions=output:2
2384 in_port=2 actions=output:1
2386 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2388 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)"
2389 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2390 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2391 [Datapath actions: 2,3
2394 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)"
2395 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2396 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2397 [Datapath actions: 1,3
2404 AT_SETUP([ofproto-dpif - mirroring, select_src])
2406 ADD_OF_PORTS([br0], 1, 2, 3)
2408 set Bridge br0 mirrors=@m --\
2409 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2410 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2412 AT_DATA([flows.txt], [dnl
2413 in_port=1 actions=output:2
2414 in_port=2 actions=output:1
2416 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2418 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)"
2419 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2420 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2421 [Datapath actions: 2,3
2424 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)"
2425 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2426 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2427 [Datapath actions: 1
2432 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2434 ADD_OF_PORTS([br0], 1, 2)
2436 set Bridge br0 mirrors=@m --\
2437 --id=@p2 get Port p2 --\
2438 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2440 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2442 # "in_port" defaults to OFPP_NONE if it's not specified.
2443 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"
2444 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2445 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2446 [Datapath actions: 1,2
2453 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2455 ADD_OF_PORTS([br0], 1, 2, 3)
2457 set Bridge br0 mirrors=@m --\
2458 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2459 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2461 AT_DATA([flows.txt], [dnl
2462 in_port=1 actions=output:2
2463 in_port=2 actions=output:1
2465 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2467 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)"
2468 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2469 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2470 [Datapath actions: 2,3
2473 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)"
2474 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2475 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2476 [Datapath actions: 1
2483 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2485 ADD_OF_PORTS([br0], 1, 2, 3)
2487 set Bridge br0 mirrors=@m --\
2488 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2489 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2491 AT_DATA([flows.txt], [dnl
2492 in_port=1, actions=output:2
2494 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2496 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)"
2497 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2498 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2499 [Datapath actions: 2
2502 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))"
2503 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2504 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2505 [Datapath actions: 2
2508 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))"
2509 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2510 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2511 [Datapath actions: 2,3
2518 AT_SETUP([ofproto-dpif - mirroring, output_port])
2520 ADD_OF_PORTS([br0], 1, 2, 3)
2522 set Bridge br0 mirrors=@m --\
2523 --id=@p3 get Port p3 --\
2524 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2526 AT_DATA([flows.txt], [dnl
2527 in_port=1 actions=mod_vlan_vid:17,output:2
2528 in_port=2 actions=output:1
2530 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2532 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)"
2533 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2534 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2535 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2538 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)"
2539 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2540 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2541 [Datapath actions: 1,3
2547 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2549 ADD_OF_PORTS([br0], 1, 2)
2551 set Bridge br0 mirrors=@m --\
2552 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2554 AT_DATA([flows.txt], [dnl
2555 in_port=1 actions=output:2
2556 in_port=2 actions=mod_vlan_vid:17,output:1
2558 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2560 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)"
2561 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2562 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2564 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2565 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2567 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2569 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)"
2570 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2571 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2573 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2574 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2576 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2581 # Two testcases below are for the ofproto/trace command
2582 # The first one tests all correct syntax:
2583 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2584 # ofproto/trace br_name br_flow [-generate|packet]
2585 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2586 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2587 ADD_OF_PORTS([br0], 1, 2, 3)
2589 AT_DATA([flows.txt], [dnl
2590 in_port=1 actions=output:2
2591 in_port=2 actions=output:1
2593 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2595 odp_flow="in_port(p1)"
2597 # Test command: ofproto/trace odp_flow with in_port as a name.
2598 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2599 AT_CHECK([tail -1 stdout], [0], [dnl
2603 odp_flow="in_port(1)"
2604 # Test command: ofproto/trace odp_flow
2605 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2606 AT_CHECK([tail -1 stdout], [0], [dnl
2610 # Test command: ofproto/trace dp_name odp_flow
2611 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2612 AT_CHECK([tail -1 stdout], [0], [dnl
2615 # Test commmand: ofproto/trace br_name br_flow
2616 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2617 AT_CHECK([tail -1 stdout], [0], [dnl
2621 # Delete the inserted flows
2622 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2623 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2625 # This section beflow tests the [-generate] option
2626 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2627 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"
2629 # Test command: ofproto/trace odp_flow
2630 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2631 # Check for no MAC learning entry
2632 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2636 # Test command: ofproto/trace br_name br_flow
2637 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2638 # Check for no MAC learning entry
2639 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2643 # Test command: ofproto/trace odp_flow -generate
2644 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2645 # Check for the MAC learning entry
2646 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2648 3 0 50:54:00:00:00:05 ?
2651 # Test command: ofproto/trace dp_name odp_flow -generate
2652 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2653 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2654 -generate], [0], [stdout])
2655 # Check for both MAC learning entries
2656 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2658 3 0 50:54:00:00:00:05 ?
2659 1 0 50:54:00:00:00:06 ?
2662 # Test command: ofproto/trace br_name br_flow -generate
2663 AT_CHECK([ovs-appctl ofproto/trace br0 \
2664 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2665 -generate], [0], [stdout])
2666 # Check for both MAC learning entries.
2667 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2669 3 0 50:54:00:00:00:05 ?
2670 1 0 50:54:00:00:00:06 ?
2671 2 0 50:54:00:00:00:07 ?
2674 # This section beflow tests the [packet] option
2675 # The ovs-tcpundump of packets between port1 and port2
2676 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2677 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2679 # Construct the MAC learning table
2680 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2681 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2682 -generate], [0], [stdout])
2684 # Construct the MAC learning table
2685 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2686 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2687 -generate], [0], [stdout])
2689 # Test command: ofproto/trace odp_flow packet
2690 AT_CHECK([ovs-appctl ofproto/trace \
2691 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2692 AT_CHECK([tail -1 stdout], [0], [dnl
2695 AT_CHECK([head -n 2 stdout], [0], [dnl
2697 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
2700 # Test command: ofproto/trace dp_name odp_flow packet
2701 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2702 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2703 AT_CHECK([tail -1 stdout], [0], [dnl
2706 AT_CHECK([head -n 2 stdout], [0], [dnl
2708 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
2711 # Test command: ofproto/trace br_name br_flow packet
2712 AT_CHECK([ovs-appctl ofproto/trace br0 \
2713 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2714 AT_CHECK([tail -1 stdout], [0], [dnl
2717 AT_CHECK([head -n 2 stdout], [0], [dnl
2719 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
2725 # The second test tests the corner cases
2726 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2728 ADD_OF_PORTS([br0], 1, 2)
2731 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2732 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2734 generate="-generate"
2735 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2737 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2743 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2745 AT_CHECK([tail -2 stderr], [0], [dnl
2746 Cannot find the datapath
2747 ovs-appctl: ovs-vswitchd: server returned an error
2750 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2756 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2758 AT_CHECK([tail -2 stderr], [0], [dnl
2759 Cannot find the datapath
2760 ovs-appctl: ovs-vswitchd: server returned an error
2763 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2769 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2771 AT_CHECK([tail -2 stderr], [0], [dnl
2772 Cannot find the datapath
2773 ovs-appctl: ovs-vswitchd: server returned an error
2776 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2782 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2784 AT_CHECK([tail -2 stderr], [0], [dnl
2785 Cannot find the datapath
2786 ovs-appctl: ovs-vswitchd: server returned an error
2789 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2795 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2797 AT_CHECK([tail -2 stderr], [0], [dnl
2799 ovs-appctl: ovs-vswitchd: server returned an error
2802 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2808 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2810 AT_CHECK([tail -2 stderr], [0], [dnl
2811 Must specify bridge name
2812 ovs-appctl: ovs-vswitchd: server returned an error
2815 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2816 AT_CHECK([ovs-appctl ofproto/trace \
2817 ovs-dummy "$odp_flow" garbage_option],
2818 [2], [stdout],[stderr])
2819 AT_CHECK([tail -2 stderr], [0], [dnl
2820 Trailing garbage in packet data
2821 ovs-appctl: ovs-vswitchd: server returned an error
2824 # Test incorrect command: ofproto/trace with 4 arguments
2825 AT_CHECK([ovs-appctl ofproto/trace \
2826 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2827 AT_CHECK([tail -2 stderr], [0], [dnl
2828 "ofproto/trace" command takes at most 3 arguments
2829 ovs-appctl: ovs-vswitchd: server returned an error
2832 # Test incorrect command: ofproto/trace with 0 argument
2833 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2834 AT_CHECK([tail -2 stderr], [0], [dnl
2835 "ofproto/trace" command requires at least 1 arguments
2836 ovs-appctl: ovs-vswitchd: server returned an error
2842 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2844 ADD_OF_PORTS([br0], 1, 2, 3)
2846 AT_DATA([flows.txt], [dnl
2847 in_port=1 actions=output:2
2848 in_port=2 actions=output:1
2850 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2852 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2853 AT_CHECK([tail -1 stdout], [0], [dnl
2854 Datapath actions: push_vlan(vid=123,pcp=0),2
2861 m4_define([OFPROTO_TRACE],
2863 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2864 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2866 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2869 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2872 AT_SETUP([ofproto-dpif - MAC learning])
2873 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2874 ADD_OF_PORTS([br0], 1, 2, 3)
2876 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)'
2878 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2881 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2885 # Check for the MAC learning entry.
2886 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2888 3 0 50:54:00:00:00:05 ?
2891 # Trace a packet arrival destined for the learned MAC.
2892 # (This will also learn a MAC.)
2895 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2899 # Check for both MAC learning entries.
2900 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2902 3 0 50:54:00:00:00:05 ?
2903 1 0 50:54:00:00:00:06 ?
2906 # Trace a packet arrival that updates the first learned MAC entry.
2909 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2913 # Check that the MAC learning entry was updated.
2914 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2916 1 0 50:54:00:00:00:06 ?
2917 2 0 50:54:00:00:00:05 ?
2920 # Add another bridge.
2924 -- set bridge br1 datapath-type=dummy])
2925 ADD_OF_PORTS([br1], 4, 5)
2927 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2930 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2935 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2939 # Check that the MAC learning entries were added.
2940 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2942 4 0 50:54:00:00:00:06 ?
2943 5 0 50:54:00:00:00:07 ?
2946 # Delete port p1 and see that its MAC learning entry disappeared, and
2947 # that the MAC learning entry for the same MAC was also deleted from br1.
2948 AT_CHECK([ovs-vsctl del-port p1])
2949 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2951 2 0 50:54:00:00:00:05 ?
2953 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2955 5 0 50:54:00:00:00:07 ?
2961 AT_SETUP([ofproto-dpif - MAC table overflow])
2963 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2964 ADD_OF_PORTS([br0], 1, 2, 3)
2966 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)'
2968 AT_CHECK([ovs-appctl time/stop])
2970 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2971 for i in 0 1 2 3 4 5 6 7 8 9; do
2974 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2977 ovs-appctl time/warp 1000
2980 # Check for the MAC learning entries.
2981 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2983 3 0 50:54:00:00:00:00
2984 3 0 50:54:00:00:00:01
2985 3 0 50:54:00:00:00:02
2986 3 0 50:54:00:00:00:03
2987 3 0 50:54:00:00:00:04
2988 3 0 50:54:00:00:00:05
2989 3 0 50:54:00:00:00:06
2990 3 0 50:54:00:00:00:07
2991 3 0 50:54:00:00:00:08
2992 3 0 50:54:00:00:00:09
2996 # Trace another ARP packet on another MAC.
2999 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3003 # Check that the new one chased the oldest one out of the table.
3004 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3006 3 0 50:54:00:00:00:01 ?
3007 3 0 50:54:00:00:00:02 ?
3008 3 0 50:54:00:00:00:03 ?
3009 3 0 50:54:00:00:00:04 ?
3010 3 0 50:54:00:00:00:05 ?
3011 3 0 50:54:00:00:00:06 ?
3012 3 0 50:54:00:00:00:07 ?
3013 3 0 50:54:00:00:00:08 ?
3014 3 0 50:54:00:00:00:09 ?
3015 3 0 50:54:00:00:00:10 ?
3021 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3023 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3025 # IP_VERSION_TYPE is used in AT_SETUP
3026 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3027 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3028 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3030 ON_EXIT([kill `cat test-sflow.pid`])
3031 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3032 AT_CAPTURE_FILE([sflow.log])
3033 SFLOW_PORT=`parse_listening_port < test-sflow.log`
3034 ovs-appctl time/stop
3036 ADD_OF_PORTS([br0], 1, 2)
3038 set Interface br0 options:ifindex=1002 -- \
3039 set Interface p1 options:ifindex=1004 -- \
3040 set Interface p2 options:ifindex=1003 -- \
3041 set Bridge br0 sflow=@sf -- \
3042 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3043 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3045 dnl open with ARP packets to seed the bridge-learning. The output
3046 dnl ifIndex numbers should be reported predictably after that.
3047 dnl Since we set sampling=1 we should see all of these packets
3048 dnl reported. Sorting the output by data-source and seqNo makes
3049 dnl it deterministic. Ensuring that we send at least two packets
3050 dnl into each port means we get to check the seq nos are
3051 dnl incrementing correctly.
3052 dnl because packets from different ports can be handled by separate
3053 dnl threads, put some sleeps
3055 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)'
3057 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)'
3059 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)'
3061 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)'
3062 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)'
3064 dnl sleep long enough to get more than one counter sample
3065 dnl from each datasource so we can check sequence numbers
3066 for i in `seq 1 30`; do
3067 ovs-appctl time/warp 100
3070 ovs-appctl -t test-sflow exit
3072 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3093 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
3113 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
3133 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
3153 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
3173 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
3176 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3190 in_broadcasts=4294967295
3193 in_unknownprotos=4294967295
3196 out_multicasts=4294967295
3197 out_broadcasts=4294967295
3213 in_broadcasts=4294967295
3216 in_unknownprotos=4294967295
3219 out_multicasts=4294967295
3220 out_broadcasts=4294967295
3236 in_broadcasts=4294967295
3239 in_unknownprotos=4294967295
3242 out_multicasts=4294967295
3243 out_broadcasts=4294967295
3259 in_broadcasts=4294967295
3262 in_unknownprotos=4294967295
3265 out_multicasts=4294967295
3266 out_broadcasts=4294967295
3282 in_broadcasts=4294967295
3285 in_unknownprotos=4294967295
3288 out_multicasts=4294967295
3289 out_broadcasts=4294967295
3305 in_broadcasts=4294967295
3308 in_unknownprotos=4294967295
3311 out_multicasts=4294967295
3312 out_broadcasts=4294967295
3319 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3320 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3322 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3324 # Test that basic NetFlow reports flow statistics correctly:
3325 # The initial packet of a flow are correctly accounted.
3326 # Later packets within a flow are correctly accounted.
3327 # Flow actions changing (in this case, due to MAC learning)
3328 # cause a record to be sent.
3330 # IP_VERSION_TYPE is used in AT_SETUP
3331 m4_define([CHECK_NETFLOW_EXPIRATION],
3332 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3333 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3334 ADD_OF_PORTS([br0], 1, 2)
3336 ovs-appctl time/stop
3337 ON_EXIT([kill `cat test-netflow.pid`])
3338 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3339 AT_CAPTURE_FILE([netflow.log])
3340 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3343 set Bridge br0 netflow=@nf -- \
3344 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3345 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3347 for delay in 1000 30000; do
3348 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)'
3349 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)'
3351 ovs-appctl time/warp $delay
3354 ovs-appctl time/warp 6000
3357 ovs-appctl -t test-netflow exit
3359 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])
3361 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])
3363 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3364 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3365 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3369 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3370 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3372 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3374 # Test that basic NetFlow reports active expirations correctly.
3376 # IP_VERSION_TYPE is used in AT_SETUP
3377 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3378 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3380 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3381 ADD_OF_PORTS([br0], 1, 2)
3383 ON_EXIT([kill `cat test-netflow.pid`])
3384 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3385 AT_CAPTURE_FILE([netflow.log])
3386 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3389 set Bridge br0 netflow=@nf -- \
3390 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3391 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3393 AT_CHECK([ovs-appctl time/stop])
3395 while test $n -le 60; do
3398 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)'
3399 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)'
3401 ovs-appctl time/warp 1000
3404 ovs-appctl time/warp 10000
3408 ovs-appctl -t test-netflow exit
3410 # Count the number of reported packets:
3411 # - From source to destination before MAC learning kicks in (just one).
3412 # - From source to destination after that.
3413 # - From destination to source.
3421 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3428 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3431 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3434 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3441 eval $counter=\`expr \$$counter + \$pkts\`
3442 n_recs=`expr $n_recs + 1`
3445 # There should be exactly 1 MAC learning packet,
3446 # exactly 59 other packets in that direction,
3447 # and exactly 60 packets in the other direction.
3448 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3453 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3454 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3456 AT_SETUP([ofproto-dpif - flow stats])
3458 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3459 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3461 ovs-appctl time/stop
3463 for i in `seq 1 10`; do
3464 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)'
3467 ovs-appctl time/warp 1000
3469 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3470 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3471 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3472 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3477 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3479 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3480 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3482 ovs-appctl time/stop
3484 for i in `seq 1 10`; do
3485 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)'
3488 ovs-appctl time/warp 100
3489 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3490 ovs-appctl time/warp 1000
3492 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3493 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3494 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3495 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3500 AT_SETUP([idle_age and hard_age increase over time])
3503 # get_ages DURATION HARD IDLE
3505 # Fetch the flow duration, hard age, and idle age into the variables
3506 # whose names are given as arguments. Rounds DURATION down to the
3507 # nearest integer. If hard_age doesn't appear in the output, sets
3508 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3511 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3513 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3514 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3515 AS_VAR_COPY([$1], [duration])
3517 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3518 if test X"$hard" = X; then
3521 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3523 AS_VAR_COPY([$2], [hard])
3525 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3526 if test X"$idle" = X; then
3529 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3531 AS_VAR_COPY([$3], [idle])
3534 # Add a flow and get its initial hard and idle age.
3535 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3536 get_ages duration1 hard1 idle1
3538 ovs-appctl time/stop
3539 # Warp time forward by 10 seconds, then modify the flow's actions.
3540 ovs-appctl time/warp 10000
3541 get_ages duration2 hard2 idle2
3542 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3544 # Warp time forward by 10 seconds.
3545 ovs-appctl time/warp 10000
3546 get_ages duration3 hard3 idle3
3548 # Warp time forward 10 more seconds, then pass some packets through the flow,
3549 # then warp forward a few more times because idle times are only updated
3551 ovs-appctl time/warp 10000
3552 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)'
3553 ovs-appctl time/warp 1000
3554 ovs-appctl time/warp 1000
3555 ovs-appctl time/warp 1000
3556 get_ages duration4 hard4 idle4
3558 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3559 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3560 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3562 # Duration should increase steadily over time.
3563 AT_CHECK([test $duration1 -lt $duration2])
3564 AT_CHECK([test $duration2 -lt $duration3])
3565 AT_CHECK([test $duration3 -lt $duration4])
3567 # Hard age should be "none" initially because it's the same as flow_duration,
3568 # then it should increase.
3569 AT_CHECK([test $hard1 = none])
3570 AT_CHECK([test $hard2 = none])
3571 AT_CHECK([test $hard3 != none])
3572 AT_CHECK([test $hard4 != none])
3573 AT_CHECK([test $hard3 -lt $hard4])
3575 # Idle age should increase from 1 to 2 to 3, then decrease.
3576 AT_CHECK([test $idle1 -lt $idle2])
3577 AT_CHECK([test $idle2 -lt $idle3])
3578 AT_CHECK([test $idle3 -gt $idle4])
3580 # Check some invariant relationships.
3581 AT_CHECK([test $duration1 = $idle1])
3582 AT_CHECK([test $duration2 = $idle2])
3583 AT_CHECK([test $duration3 = $idle3])
3584 AT_CHECK([test $idle3 -gt $hard3])
3585 AT_CHECK([test $idle4 -lt $hard4])
3586 AT_CHECK([test $hard4 -lt $duration4])
3591 AT_SETUP([ofproto-dpif - fin_timeout])
3593 AT_DATA([flows.txt], [dnl
3594 in_port=1 actions=output:2
3595 in_port=2 actions=mod_vlan_vid:17,output:1
3597 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3598 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3600 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3603 ovs-appctl time/stop
3604 # Check that a TCP SYN packet does not change the timeout. (Because
3605 # flow stats updates are mainly what implements the fin_timeout
3606 # feature, we warp forward a couple of times to ensure that flow stats
3607 # run before re-checking the flow table.)
3608 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3609 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3612 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3614 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3616 # Check that a TCP FIN packet does change the timeout.
3617 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3618 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3621 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3623 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3628 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3629 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3630 ADD_OF_PORTS([br0], [1], [2])
3631 ADD_OF_PORTS([br1], [3])
3633 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3640 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3641 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3642 ADD_OF_PORTS([br0], [1], [2])
3643 ADD_OF_PORTS([br1], [3])
3645 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3646 dummy@ovs-dummy: hit:0 missed:0
3648 br0 65534/100: (dummy)
3652 br1 65534/101: (dummy)
3658 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3659 OVS_VSWITCHD_START([add-br br1 -- \
3660 set bridge br1 datapath-type=dummy fail-mode=secure])
3661 ADD_OF_PORTS([br0], [1], [2])
3662 ADD_OF_PORTS([br1], [3])
3664 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)'])
3665 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)'])
3666 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)'])
3668 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3669 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
3670 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
3673 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3674 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
3677 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3678 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
3679 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
3682 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3683 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
3689 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
3690 OVS_VSWITCHD_START([dnl
3691 add-port br0 p1 -- set Interface p1 type=dummy
3693 ON_EXIT([kill `cat ovs-ofctl.pid`])
3695 AT_CAPTURE_FILE([ofctl_monitor.log])
3696 AT_DATA([flows.txt], [dnl
3697 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3698 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3700 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3702 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3703 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3705 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3706 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)
3707 dnl (label 20, exp 0, [S], ttl 32)
3708 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3709 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3711 for dl_src in 00 01; do
3712 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"])
3714 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3715 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))
3723 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3724 OVS_VSWITCHD_START([dnl
3725 add-port br0 p1 -- set Interface p1 type=dummy
3727 ON_EXIT([kill `cat ovs-ofctl.pid`])
3729 AT_CAPTURE_FILE([ofctl_monitor.log])
3730 AT_DATA([flows.txt], [dnl
3731 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3732 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3734 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3736 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3737 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3738 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3740 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3741 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)
3742 dnl (label 20, exp 0, ttl 32)
3743 dnl (label 20, exp 0, ttl 32)
3744 dnl (label 20, exp 0, [S], ttl 32)
3745 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3746 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3748 for dl_src in 00 01; do
3749 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"])
3751 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3752 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))
3759 AT_SETUP([ofproto-dpif - patch ports])
3760 OVS_VSWITCHD_START([add-br br1 \
3761 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3762 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3763 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3765 ADD_OF_PORTS([br0], [2])
3766 ADD_OF_PORTS([br1], [3])
3768 AT_CHECK([ovs-appctl time/stop])
3770 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3771 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3773 for i in $(seq 1 10); do
3774 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)'
3775 if [[ $i -eq 1 ]]; then
3780 for i in $(seq 1 5); do
3781 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)'
3782 if [[ $i -eq 1 ]]; then
3787 AT_CHECK([ovs-appctl time/warp 500], [0],
3791 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3792 dummy@ovs-dummy: hit:13 missed:2
3794 br0 65534/100: (dummy)
3796 pbr0 1/none: (patch: peer=pbr1)
3798 br1 65534/101: (dummy)
3800 pbr1 1/none: (patch: peer=pbr0)
3803 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3804 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
3806 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
3807 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
3810 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3811 OFPST_PORT reply (xid=0x4): 1 ports
3812 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3813 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3816 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3817 OFPST_PORT reply (xid=0x4): 1 ports
3818 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3819 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3825 AT_SETUP([ofproto-dpif - port duration])
3826 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3827 ADD_OF_PORTS([br0], 1, 2)
3829 ovs-appctl time/stop
3830 ovs-appctl time/warp 10000
3832 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3833 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3842 dnl ----------------------------------------------------------------------
3843 AT_BANNER([ofproto-dpif -- megaflows])
3845 AT_SETUP([ofproto-dpif megaflow - port classification])
3847 ADD_OF_PORTS([br0], [1], [2])
3848 AT_DATA([flows.txt], [dnl
3849 table=0 in_port=1 actions=output(2)
3851 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3852 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)'])
3853 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)'])
3855 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3856 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>
3861 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3863 ADD_OF_PORTS([br0], [1], [2])
3864 AT_DATA([flows.txt], [dnl
3865 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3867 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3868 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3869 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3871 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3872 skb_priority(0),in_port(1),eth(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>
3873 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>
3878 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3880 ADD_OF_PORTS([br0], [1], [2])
3881 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], [])
3882 AT_DATA([flows.txt], [dnl
3883 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3885 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3886 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3887 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)'])
3889 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3890 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>
3891 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>
3896 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3898 ADD_OF_PORTS([br0], [1], [2])
3899 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], [])
3900 AT_DATA([flows.txt], [dnl
3901 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3903 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3904 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00: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)'])
3905 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)'])
3907 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3908 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>
3909 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>
3914 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3916 ADD_OF_PORTS([br0], [1], [2])
3917 AT_DATA([flows.txt], [dnl
3918 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3920 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3921 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3922 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3923 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3924 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>
3929 AT_SETUP([ofproto-dpif megaflow - normal])
3931 ADD_OF_PORTS([br0], [1], [2])
3932 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3933 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)'])
3934 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)'])
3936 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3937 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>
3938 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>
3943 AT_SETUP([ofproto-dpif megaflow - mpls])
3945 ADD_OF_PORTS([br0], [1], [2])
3946 AT_DATA([flows.txt], [dnl
3947 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3948 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3950 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3951 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
3952 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)'])
3954 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3955 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>
3956 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>
3961 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3963 # IP_VERSION_TYPE is used in AT_SETUP
3964 m4_define([CHECK_MEGAFLOW_NETFLOW],
3965 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3967 ADD_OF_PORTS([br0], [1], [2])
3969 dnl NetFlow configuration disables wildcarding relevant fields
3970 ON_EXIT([kill `cat test-netflow.pid`])
3971 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3972 AT_CAPTURE_FILE([netflow.log])
3973 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3975 set Bridge br0 netflow=@nf -- \
3976 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3977 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3979 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3980 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)'])
3981 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)'])
3983 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3984 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>
3985 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>
3990 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3991 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
3993 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3995 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3996 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3997 set interface p2 type=dummy ofport_request=2 -- \
3998 set interface p3 type=dummy ofport_request=3])
3999 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4002 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4003 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(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)'])
4004 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00: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)'])
4006 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4007 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>
4008 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>
4013 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4015 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4016 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4017 set interface p2 type=dummy ofport_request=2 -- \
4018 set interface p3 type=dummy ofport_request=3])
4019 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4022 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4023 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)'])
4024 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)'])
4026 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4027 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>
4028 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>
4033 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4034 # Create bond0 on br0 with interfaces p0 and p1
4035 # and bond1 on br1 with interfaces p2 and p3
4036 # with p0 patched to p2 and p1 patched to p3.
4038 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4039 other-config:lacp-time=fast \
4040 other-config:bond-rebalance-interval=0 -- \
4041 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4042 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4044 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4045 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4046 fail-mode=secure -- \
4047 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4048 other-config:lacp-time=fast \
4049 other-config:bond-rebalance-interval=0 -- \
4050 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4051 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4053 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4055 ADD_OF_PORTS([br0], [7])
4056 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4057 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4058 ovs-appctl time/stop
4059 ovs-appctl time/warp 5000
4060 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)'])
4061 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)'])
4063 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4064 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>
4065 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>
4070 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4072 ADD_OF_PORTS([br0], [1], [2])
4073 AT_DATA([flows.txt], [dnl
4074 table=0 in_port=1,ip actions=resubmit(90)
4075 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4077 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4078 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4079 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4081 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4082 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>
4083 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>
4088 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4090 ADD_OF_PORTS([br0], [1], [2])
4091 AT_DATA([flows.txt], [dnl
4092 table=0 in_port=1,ip actions=resubmit(,1)
4093 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4095 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4096 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)'])
4097 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=
4098 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4100 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4101 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>
4102 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>
4107 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4109 ADD_OF_PORTS([br0], [1], [2])
4110 AT_DATA([flows.txt], [dnl
4111 table=0 in_port=1,ip actions=goto_table(1)
4112 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4114 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4115 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)'])
4116 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)'])
4118 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4119 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>
4120 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>
4125 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4127 ADD_OF_PORTS([br0], [1], [2], [3])
4129 set Bridge br0 mirrors=@m --\
4130 --id=@p3 get Port p3 --\
4131 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4133 AT_DATA([flows.txt], [dnl
4134 in_port=1 actions=output:2
4136 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4137 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)'])
4138 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)'])
4140 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4141 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>
4146 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4148 ADD_OF_PORTS([br0], [1], [2], [3])
4150 set Bridge br0 mirrors=@m --\
4151 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4152 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4154 AT_DATA([flows.txt], [dnl
4155 in_port=1 actions=output:2
4157 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4158 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))'])
4159 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)'])
4161 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4162 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>
4163 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>
4168 AT_SETUP([ofproto-dpif megaflow - move action])
4170 ADD_OF_PORTS([br0], [1], [2])
4171 AT_DATA([flows.txt], [dnl
4172 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4173 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4174 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4176 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4177 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)'])
4178 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)'])
4180 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4181 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>
4182 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>
4187 AT_SETUP([ofproto-dpif megaflow - push action])
4189 ADD_OF_PORTS([br0], [1], [2])
4190 AT_DATA([flows.txt], [dnl
4191 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4193 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4194 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)'])
4195 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)'])
4197 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4198 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>
4199 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>
4204 AT_SETUP([ofproto-dpif megaflow - learning])
4206 ADD_OF_PORTS([br0], [1], [2])
4207 AT_DATA([flows.txt], [dnl
4208 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
4210 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4211 ovs-appctl time/stop
4212 # We send each packet twice because the first packet in each flow causes the
4213 # flow table to change and thus revalidations, which (depending on timing)
4214 # can keep a megaflow from being installed. The revalidations are done by
4215 # the second iteration, allowing the flows to be installed.
4217 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)'])
4218 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)'])
4219 ovs-appctl time/warp 100
4222 dnl The original flow is missing due to a revalidation.
4223 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4224 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>
4225 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>
4230 AT_SETUP([ofproto-dpif megaflow - tunnels])
4232 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4233 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4234 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4235 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4237 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4238 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4239 ofport_request=4 options:key=flow])
4240 AT_DATA([flows.txt], [dnl
4241 in_port=1,actions=output(2)
4242 in_port=3,actions=output(4)
4244 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4245 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4246 dnl will cause the packet to be dropped.
4247 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)'])
4248 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)'])
4249 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)'])
4250 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)'])
4252 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4253 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>
4254 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>
4255 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>
4260 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4262 ADD_OF_PORTS([br0], [1], [2])
4263 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], [])
4264 AT_DATA([flows.txt], [dnl
4265 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4267 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4268 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4269 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4271 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4272 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>
4273 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>
4278 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4280 ADD_OF_PORTS([br0], [1], [2])
4281 AT_DATA([flows.txt], [dnl
4282 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4284 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4285 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)'])
4286 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)'])
4288 dnl The megaflows do not match the same fields, since the first packet
4289 dnl is essentially a no-op. (The new destination MAC is the same as the
4290 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4291 dnl so that a packet that doesn't need its MAC address changed doesn't
4292 dnl hide one that does. Since the first entry doesn't need to change,
4293 dnl only the destination MAC address is matched (as decided by
4294 dnl ofproto-dpif). The second entry actually updates the destination
4295 dnl MAC, so both the source and destination MAC addresses are
4296 dnl un-wildcarded, since the ODP commit functions update both the source
4297 dnl and destination MAC addresses.
4298 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4299 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
4300 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
4305 AT_SETUP([ofproto-dpif megaflow - disabled])
4307 ADD_OF_PORTS([br0], [1], [2])
4308 AT_DATA([flows.txt], [dnl
4309 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4310 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4312 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4314 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4315 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4316 for i in 1 2 3 4; do
4317 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)'])
4318 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)'])
4321 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4322 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
4323 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
4328 AT_SETUP([ofproto-dpif - datapath port number change])
4329 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4330 ADD_OF_PORTS([br0], 1)
4332 # Trace a flow that should output to p1.
4333 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4335 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4338 # Change p1's port number to 5.
4339 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4341 # Trace a flow that should output to p1 in its new location.
4342 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4344 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4349 # Tests the bundling with various bfd and cfm configurations.
4350 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4351 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4352 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4353 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4354 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4355 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4356 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4357 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4358 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4359 set Interface p0 cfm_mpid=1 -- \
4360 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4362 ovs-appctl time/stop
4363 # advance the clock to stablize everything.
4364 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4365 # cfm/show should show 'recv' fault.
4366 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4369 # bfd/show should show 'up'.
4370 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4371 Local Session State: up
4372 Remote Session State: up
4373 Local Session State: up
4374 Remote Session State: up
4376 # bond/show should show 'may-enable: true' for all slaves.
4377 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4384 # now disable the bfd on p1.
4385 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4386 # advance the clock to stablize everything.
4387 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4388 # cfm/show should show 'recv' fault.
4389 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4392 # bfd/show should show 'down'.
4393 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4394 Local Session State: down
4395 Remote Session State: down
4397 # bond/show should show 'may-enable: false' for p0.
4398 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4403 # now enable the bfd on p1 and disable bfd on p0.
4404 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4405 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4406 # advance the clock to stablize everything.
4407 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4408 # cfm/show should show 'recv' fault.
4409 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4412 # bfd/show should show 'down'.
4413 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4414 Local Session State: down
4415 Remote Session State: down
4417 # bond/show should show 'may-enable: false' for p0 and p1.
4418 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4428 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4429 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4432 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4434 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4435 monitor thread created
4437 # disable bfd on p0.
4438 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4440 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4441 monitor thread terminated
4443 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4446 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4448 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4449 monitor thread created
4451 # disable cfm on p0.
4452 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4454 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4455 monitor thread terminated
4457 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4459 # enable both bfd and cfm on p0.
4460 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4462 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4463 monitor thread created
4465 # disable bfd on p0.
4466 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4467 # check log, there should not be the log of thread terminated.
4468 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4470 # reenable bfd on p0.
4471 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4472 # check log, should still be on log of thread created.
4473 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4474 monitor thread created
4476 # disable bfd and cfm together.
4477 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4479 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4480 monitor thread terminated
4486 # this test helps avoid the deadlock between the main thread and monitor thread.
4487 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4490 for i in `seq 1 199`
4492 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])
4498 AT_BANNER([ofproto-dpif - flow translation resource limits])
4500 AT_SETUP([ofproto-dpif - infinite resubmit])
4502 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4503 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4505 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4507 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4510 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4513 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4515 ADD_OF_PORTS([br0], 1)
4516 (for i in `seq 1 64`; do
4518 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4520 echo "in_port=65, actions=local") > flows
4521 AT_CHECK([ovs-ofctl add-flows br0 flows])
4522 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4523 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4525 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4528 AT_SETUP([ofproto-dpif - too many output actions])
4530 ADD_OF_PORTS([br0], 1)
4531 (for i in `seq 1 12`; do
4533 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4535 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4536 AT_CHECK([ovs-ofctl add-flows br0 flows])
4537 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4538 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4541 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4543 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4546 AT_SETUP([ofproto-dpif - stack too deep])
4548 ADD_OF_PORTS([br0], 1)
4549 (for i in `seq 1 12`; do
4551 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4553 push="push:NXM_NX_REG0[[]]"
4554 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4555 AT_CHECK([ovs-ofctl add-flows br0 flows])
4556 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4557 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4559 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])