1 AT_BANNER([ofproto-dpif])
3 # Strips out uninteresting parts of flow output, as well as parts
4 # that vary from one run to another (e.g., timing and bond actions).
5 m4_define([STRIP_USED], [[sed '
6 s/used:[0-9]*\.[0-9]*/used:0.0/
8 m4_define([STRIP_XOUT], [[sed '
9 s/used:[0-9]*\.[0-9]*/used:0.0/
10 s/actions:.*/actions: <del>/
11 s/packets:[0-9]*/packets:0/
12 s/bytes:[0-9]*/bytes:0/
15 AT_SETUP([ofproto-dpif - dummy interface])
16 # Create br0 with interfaces p1 and p7
17 # and br1 with interfaces p2 and p8
18 # with p1 and p2 connected via unix domain socket
20 [add-port br0 p1 -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
21 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
23 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
24 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
26 add-port br1 p2 -- set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
27 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
29 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
30 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
32 ovs-appctl time/warp 5000
33 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
34 AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
35 ovs-appctl time/warp 100
36 sleep 1 # wait for forwarders process packets
38 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
39 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
40 skb_priority(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
43 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_XOUT], [0], [dnl
44 skb_priority(0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
45 skb_priority(0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
50 AT_SETUP([ofproto-dpif, active-backup bonding])
51 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
52 # and br1 with interfaces p3, p4 and p8.
53 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
55 [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
56 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
57 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
58 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
60 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
61 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
63 add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
64 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
65 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
67 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
68 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
69 ovs-appctl netdev-dummy/set-admin-state up
70 ovs-appctl time/warp 100
71 ovs-appctl netdev-dummy/set-admin-state p2 down
73 ovs-appctl time/warp 100
74 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
75 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
76 ovs-appctl time/warp 100
77 ovs-appctl netdev-dummy/set-admin-state p2 up
78 ovs-appctl netdev-dummy/set-admin-state p1 down
79 ovs-appctl time/warp 100
80 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
81 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
82 ovs-appctl time/warp 100
83 ovs-appctl time/warp 100
84 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_XOUT], [0], [dnl
85 skb_priority(0),in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
86 skb_priority(0),in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
87 skb_priority(0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
88 skb_priority(0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions: <del>
89 skb_priority(0),in_port(4),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035), packets:0, bytes:0, used:never, actions: <del>
90 skb_priority(0),in_port(4),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035), packets:0, bytes:0, used:never, actions: <del>
95 AT_SETUP([ofproto-dpif, balance-slb bonding])
96 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
97 # and br1 with interfaces p4, p5, p6 and p8.
98 # p1 <-> p4, p2 <-> p5, p3 <-> p6
99 # Send some traffic, make sure the traffic are spread based on source mac.
101 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
102 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
103 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
104 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
105 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
107 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
108 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
109 fail-mode=secure -- \
110 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
111 add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
112 add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
113 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
115 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
116 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
117 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
119 ovs-appctl netdev-dummy/set-admin-state up
121 ovs-appctl time/warp 100
123 for i in `seq 0 100 |xargs printf '%02x\n'`;
125 pkt="in_port(7),eth(src=50:54:00:00:00:$i,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)"
126 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
129 ovs-appctl time/warp 100
130 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
131 # Make sure there is resonable distribution to all three ports.
132 # We don't want to make this check precise, in case hash function changes.
133 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
134 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
135 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
139 AT_SETUP([ofproto-dpif, balance-tcp bonding])
140 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
141 # and br1 with interfaces bond1(p4, p5, p6) and p8.
143 # Send some traffic, make sure the traffic are spread based on L4 headers.
145 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
146 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
147 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
148 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
149 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
150 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
152 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
153 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
154 fail-mode=secure -- \
155 add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
156 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
157 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
158 set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
159 set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
160 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
161 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
163 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
164 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
165 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
169 ovs-appctl time/warp 100
170 ovs-appctl lacp/show > lacp.txt
171 ovs-appctl bond/show > bond.txt
173 for i in `seq 10 100` ;
175 pkt="in_port(7),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=$i),tcp_flags(0x010)"
176 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
179 ovs-appctl time/warp 100
180 ovs-appctl time/warp 100
181 ovs-appctl time/warp 100
182 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
183 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
184 # Make sure there is resonable distribution to all three ports.
185 # We don't want to make this check precise, in case hash function changes.
186 AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 7])
187 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 7])
188 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 7])
192 AT_SETUP([ofproto-dpif - resubmit])
194 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
195 [16], [17], [18], [19], [20], [21])
196 AT_DATA([flows.txt], [dnl
197 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
198 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
199 table=0 in_port=3 priority=2000 icmp actions=output(20)
200 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
201 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
202 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
204 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
205 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
206 AT_CHECK([tail -1 stdout], [0],
207 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
212 AT_SETUP([ofproto-dpif - goto table])
214 ADD_OF_PORTS([br0], [1], [10], [11])
215 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
216 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
217 echo "table=64 actions=output(11)" >> flows.txt
218 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
219 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
220 AT_CHECK([tail -1 stdout], [0],
221 [Datapath actions: 10,11
226 AT_SETUP([ofproto-dpif - write actions])
228 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
229 AT_DATA([flows.txt], [dnl
230 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
231 table=1 ip actions=write_actions(output(13)),goto_table(2)
232 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
234 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
235 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
236 AT_CHECK([tail -1 stdout], [0],
237 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11,set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),13
242 AT_SETUP([ofproto-dpif - clear actions])
244 ADD_OF_PORTS([br0], [1], [10], [11], [12])
245 AT_DATA([flows.txt], [dnl
246 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
247 table=1 ip actions=set_field:192.168.3.91->ip_src,output(11),clear_actions
249 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
250 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
251 AT_CHECK([tail -1 stdout], [0],
252 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
257 AT_SETUP([ofproto-dpif - group chaining not supported])
259 ADD_OF_PORTS([br0], [1], [10], [11])
260 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,group:123,bucket=output:11'],
262 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
263 [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
268 AT_SETUP([ofproto-dpif - all group in action list])
270 ADD_OF_PORTS([br0], [1], [10], [11])
271 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
272 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
273 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
274 AT_CHECK([tail -1 stdout], [0],
275 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
280 AT_SETUP([ofproto-dpif - indirect group in action list])
282 ADD_OF_PORTS([br0], [1], [10])
283 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
284 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
285 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
286 AT_CHECK([tail -1 stdout], [0],
287 [Datapath actions: 10
292 AT_SETUP([ofproto-dpif - all group in action set])
294 ADD_OF_PORTS([br0], [1], [10], [11])
295 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
296 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
297 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
298 AT_CHECK([tail -1 stdout], [0],
299 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
304 AT_SETUP([ofproto-dpif - indirect group in action set])
306 ADD_OF_PORTS([br0], [1], [10])
307 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
308 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
309 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
310 AT_CHECK([tail -1 stdout], [0],
311 [Datapath actions: 10
316 AT_SETUP([ofproto-dpif - select group])
318 ADD_OF_PORTS([br0], [1], [10], [11])
319 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
320 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
322 # Try a bunch of different flows and make sure that they get distributed
324 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
325 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:0$d,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0"], [0], [stdout])
326 tail -1 stdout >> results
328 sort results | uniq -c
329 AT_CHECK([sort results | uniq], [0],
330 [Datapath actions: 10
336 AT_SETUP([ofproto-dpif - select group with watch port])
338 ADD_OF_PORTS([br0], [1], [10], [11])
339 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
340 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
341 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
342 AT_CHECK([tail -1 stdout], [0],
343 [Datapath actions: 11
348 AT_SETUP([ofproto-dpif - select group with weight])
350 ADD_OF_PORTS([br0], [1], [10], [11], [12])
351 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2000,bucket=output:12,weight=0'])
352 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
353 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
354 AT_CHECK([tail -1 stdout], [0],
355 [Datapath actions: 11
360 AT_SETUP([ofproto-dpif - fast failover group])
362 ADD_OF_PORTS([br0], [1], [10], [11])
363 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=ff,bucket=watch_port:10,output:10,bucket=watch_port:11,output:11'])
364 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
365 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
366 AT_CHECK([tail -1 stdout], [0],
367 [Datapath actions: drop
372 AT_SETUP([ofproto-dpif - registers])
374 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
375 AT_DATA([flows.txt], [dnl
376 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
377 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
378 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
379 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
381 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
382 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
383 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
384 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
385 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
386 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
387 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
388 in_port=9,reg0=0xdeadbeef actions=output:20
389 in_port=10,reg1=0xdeadbeef actions=output:21
390 in_port=11,reg2=0xeef22dea actions=output:22
392 dnl Sanilty check all registers
393 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
394 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
395 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
396 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
399 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
400 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
401 AT_CHECK([tail -1 stdout], [0],
402 [Datapath actions: 20,21,22,33
407 AT_SETUP([ofproto-dpif - push-pop])
409 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
410 AT_DATA([flows.txt], [dnl
411 in_port=90 actions=load:20->NXM_NX_REG0[[0..7]],load:21->NXM_NX_REG1[[0..7]],load:22->NXM_NX_REG2[[0..7]], load:33->NXM_NX_REG3[[0..7]], push:NXM_NX_REG0[[]], push:NXM_NX_REG1[[0..7]],push:NXM_NX_REG2[[0..15]], push:NXM_NX_REG3[[]], resubmit:2, resubmit:3, resubmit:4, resubmit:5
412 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
413 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
414 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
415 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
418 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
419 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
420 AT_CHECK([tail -1 stdout], [0],
421 [Datapath actions: 33,22,21,20
426 AT_SETUP([ofproto-dpif - output])
428 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
429 AT_DATA([flows.txt], [dnl
430 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
431 in_port=2 actions=output:9
432 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
433 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
434 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
435 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
436 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
437 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
439 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
440 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
441 AT_CHECK([tail -1 stdout], [0],
442 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
447 AT_SETUP([ofproto-dpif - dec_ttl])
449 ADD_OF_PORTS([br0], [1], [2], [3], [4])
450 AT_DATA([flows.txt], [dnl
451 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
452 table=1 in_port=1 action=dec_ttl,output:3
454 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
455 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
456 AT_CHECK([tail -3 stdout], [0],
457 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
458 This flow is handled by the userspace slow path because it:
459 - Sends "packet-in" messages to the OpenFlow controller.
461 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=3,frag=no)'], [0], [stdout])
462 AT_CHECK([tail -1 stdout], [0],
463 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),3,4
465 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
466 AT_CHECK([tail -1 stdout], [0],
467 [Datapath actions: set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=127,frag=no)),2,set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=126,frag=no)),3,4
470 AT_CAPTURE_FILE([ofctl_monitor.log])
471 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
472 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
473 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
474 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
475 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
476 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
481 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
482 dnl buffer to be resized just before pushing the id of the dec_ttl action.
483 dnl Thus the implementation must account for this by using the
484 dnl reallocated buffer rather than the original buffer.
486 dnl A number of similar rules are added to try and exercise
487 dnl xrealloc sufficiently that it returns a different base pointer
488 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
490 ADD_OF_PORTS([br0], [1])
491 (for i in `seq 0 255`; do
492 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
494 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
498 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
499 dnl buffer to be resized just before pushing the id of the dec_ttl action.
500 dnl Thus the implementation must account for this by using the
501 dnl reallocated buffer rather than the original buffer.
503 dnl A number of similar rules are added to try and exercise
504 dnl xrealloc sufficiently that it returns a different base pointer
505 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
507 ADD_OF_PORTS([br0], [1])
508 (for i in `seq 0 255`; do
509 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
511 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
515 dnl A note action at offset 24 in ofpacts will cause the ofpacts
516 dnl buffer to be resized just before pushing the id of the dec_ttl action.
517 dnl Thus the implementation must account for this by using the
518 dnl reallocated buffer rather than the original buffer.
520 dnl A number of similar rules are added to try and exercise
521 dnl xrealloc sufficiently that it returns a different base pointer
522 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
524 ADD_OF_PORTS([br0], [1])
525 (for i in `seq 0 255`; do
526 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
528 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
532 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
534 ADD_OF_PORTS([br0], [1], [2])
536 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
538 # "in_port" defaults to OFPP_NONE if it's not specified.
539 flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,icmp_type=8,icmp_code=0"
540 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
541 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
550 AT_SETUP([ofproto-dpif - DSCP])
551 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
552 ADD_OF_PORTS([br0], [9])
553 AT_DATA([flows.txt], [dnl
554 actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
556 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
557 AT_CHECK([ovs-vsctl -- \
558 set Port p1 qos=@newqos --\
559 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
560 --id=@q1 create Queue dscp=1 --\
561 --id=@q2 create Queue dscp=2], [0], [ignore])
562 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
563 AT_CHECK([tail -1 stdout], [0],
564 [Datapath actions: dnl
566 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
567 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(skb_priority(0x2)),1,dnl
569 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
570 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(skb_priority(0)),1,dnl
571 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
577 AT_SETUP([ofproto-dpif - output/flood flags])
579 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
581 AT_DATA([flows.txt], [dnl
582 in_port=local actions=local,flood
583 in_port=1 actions=flood
584 in_port=2 actions=all
585 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
586 in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
588 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
589 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
590 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
592 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
593 AT_CHECK([tail -1 stdout \
594 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
602 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
603 AT_CHECK([tail -1 stdout \
604 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
612 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
613 AT_CHECK([tail -1 stdout \
614 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
623 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
624 AT_CHECK([tail -1 stdout], [0],
625 [Datapath actions: 100,1,2,4,6,7
628 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
629 AT_CHECK([tail -1 stdout], [0],
630 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
635 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
636 OVS_VSWITCHD_START([dnl
637 add-port br0 p1 -- set Interface p1 type=dummy
639 ON_EXIT([kill `cat ovs-ofctl.pid`])
641 AT_CAPTURE_FILE([ofctl_monitor.log])
643 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
646 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
648 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
649 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
650 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
651 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
652 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
654 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
655 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
657 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
658 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
661 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
662 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
669 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
670 OVS_VSWITCHD_START([dnl
671 add-port br0 p1 -- set Interface p1 type=dummy
673 ON_EXIT([kill `cat ovs-ofctl.pid`])
675 AT_CAPTURE_FILE([ofctl_monitor.log])
676 AT_CHECK([ovs-ofctl del-flows br0])
678 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
680 dnl Test that missed packets are droped
682 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
684 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
686 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
689 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
690 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
691 OFPST_FLOW reply (OF1.3):
697 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
698 OVS_VSWITCHD_START([dnl
699 add-port br0 p1 -- set Interface p1 type=dummy
701 ON_EXIT([kill `cat ovs-ofctl.pid`])
703 AT_CAPTURE_FILE([ofctl_monitor.log])
704 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
706 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
709 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
711 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
712 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
713 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
714 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
715 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
717 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
718 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
720 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
721 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
724 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
725 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
726 n_packets=3, n_bytes=180, actions=goto_table:1
727 OFPST_FLOW reply (OF1.2):
733 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
734 OVS_VSWITCHD_START([dnl
735 add-port br0 p1 -- set Interface p1 type=dummy
737 ON_EXIT([kill `cat ovs-ofctl.pid`])
739 AT_CAPTURE_FILE([ofctl_monitor.log])
740 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
742 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
745 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
748 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
749 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
752 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
753 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
754 n_packets=3, n_bytes=180, actions=resubmit(1,1)
755 OFPST_FLOW reply (OF1.2):
761 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
762 OVS_VSWITCHD_START([dnl
763 add-port br0 p1 -- set Interface p1 type=dummy
765 ON_EXIT([kill `cat ovs-ofctl.pid`])
767 AT_CAPTURE_FILE([ofctl_monitor.log])
768 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
769 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
771 dnl Miss table 0, Hit table 1
772 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
775 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
777 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
778 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
780 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
781 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
782 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
784 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
785 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
787 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
788 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
791 dnl Hit table 0, Miss all other tables, sent to controller
792 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
795 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
797 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
798 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
800 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
801 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
802 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
804 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
805 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
807 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
808 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
811 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
812 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
813 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
814 OFPST_FLOW reply (OF1.2):
820 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
821 OVS_VSWITCHD_START([dnl
822 add-port br0 p1 -- set Interface p1 type=dummy
824 ON_EXIT([kill `cat ovs-ofctl.pid`])
826 AT_CAPTURE_FILE([ofctl_monitor.log])
827 AT_DATA([flows.txt], [dnl
828 table=0 actions=goto_table(1)
829 table=2 dl_src=10:11:11:11:11:11 actions=controller
831 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
832 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
834 dnl Hit table 0, Miss table 1, Hit table 2
835 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
838 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
840 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
841 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
843 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
844 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
845 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
847 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
848 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
850 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
851 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
854 dnl Hit table 1, Miss all other tables, sent to controller
855 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
858 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
860 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
861 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
863 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
864 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
865 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
867 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
868 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
870 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
871 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
874 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
875 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
876 n_packets=6, n_bytes=360, actions=goto_table:1
877 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
878 OFPST_FLOW reply (OF1.2):
884 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
885 OVS_VSWITCHD_START([dnl
886 add-port br0 p1 -- set Interface p1 type=dummy
888 ON_EXIT([kill `cat ovs-ofctl.pid`])
890 AT_CAPTURE_FILE([ofctl_monitor.log])
891 AT_DATA([flows.txt], [dnl
892 table=0 actions=resubmit(1,1)
893 table=2 dl_src=10:11:11:11:11:11 actions=controller
895 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
896 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
898 dnl Hit table 0, Miss table 1, Dropped
899 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
902 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
904 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
906 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
909 dnl Hit table 1, Dropped
910 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
913 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
915 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
917 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
920 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
921 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
922 n_packets=6, n_bytes=360, actions=resubmit(1,1)
923 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
924 OFPST_FLOW reply (OF1.2):
930 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
931 OVS_VSWITCHD_START([dnl
932 add-port br0 p1 -- set Interface p1 type=dummy
934 ON_EXIT([kill `cat ovs-ofctl.pid`])
936 AT_CAPTURE_FILE([ofctl_monitor.log])
937 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
939 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
941 dnl Test that missed packets are droped
943 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
945 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
947 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
950 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
951 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
958 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
959 OVS_VSWITCHD_START([dnl
960 add-port br0 p1 -- set Interface p1 type=dummy
962 ON_EXIT([kill `cat ovs-ofctl.pid`])
964 AT_CAPTURE_FILE([ofctl_monitor.log])
965 AT_CHECK([ovs-ofctl del-flows br0])
966 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
967 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
969 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
971 dnl Test that missed packets are droped
973 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
975 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
977 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
980 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
981 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
982 n_packets=3, n_bytes=180, actions=goto_table:1
983 OFPST_FLOW reply (OF1.2):
989 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
990 OVS_VSWITCHD_START([dnl
991 add-port br0 p1 -- set Interface p1 type=dummy
993 ON_EXIT([kill `cat ovs-ofctl.pid`])
995 AT_CAPTURE_FILE([ofctl_monitor.log])
996 AT_CHECK([ovs-ofctl del-flows br0])
997 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
998 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1000 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1002 dnl Test that missed packets are droped
1004 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1006 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1008 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1011 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1012 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1013 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1014 OFPST_FLOW reply (OF1.2):
1020 AT_SETUP([ofproto-dpif - controller])
1021 OVS_VSWITCHD_START([dnl
1022 add-port br0 p1 -- set Interface p1 type=dummy
1024 ON_EXIT([kill `cat ovs-ofctl.pid`])
1026 AT_CAPTURE_FILE([ofctl_monitor.log])
1027 AT_DATA([flows.txt], [dnl
1028 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1029 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1030 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1032 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1033 cookie=0x4 table=2 in_port=81 actions=load:2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,controller,resubmit(82,3)
1034 cookie=0x5 table=3 in_port=82 actions=load:3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,controller,resubmit(83,4)
1035 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1036 cookie=0x7 table=5 in_port=84 actions=load:5->NXM_NX_REG4[[]],load:6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,controller,resubmit(85,6)
1037 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1038 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1039 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1040 cookie=0xa dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
1041 cookie=0xa dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,controller
1042 cookie=0xa dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
1043 cookie=0xa dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
1044 cookie=0xa dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,controller
1045 cookie=0xa dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),controller
1046 cookie=0xa dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),controller
1047 cookie=0xa dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,controller
1048 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1049 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1050 cookie=0xc dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:1000->OXM_OF_MPLS_LABEL[[]],load:7->OXM_OF_MPLS_TC[[]],controller
1051 cookie=0xd dl_src=80:88:88:88:88:88 arp actions=load:2->OXM_OF_ARP_OP[[]],controller,load:0xc0a88001->OXM_OF_ARP_SPA[[]],controller,load:0x404444444441->OXM_OF_ARP_THA[[]],load:0x01010101->OXM_OF_ARP_SPA[[]],load:0x02020202->OXM_OF_ARP_TPA[[]],controller
1053 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1056 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1059 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9),tcp_flags(0x010)'
1061 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1062 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1064 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1065 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1066 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
1068 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1069 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
1071 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1072 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
1075 dnl Singleton controller action.
1076 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1079 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x002)'
1081 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1082 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1084 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1085 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1086 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1088 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1089 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1091 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1092 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x002 tcp_csum:0
1095 dnl Modified controller action.
1096 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1099 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=30:33:33:33:33:33,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10),tcp_flags(0x001)'
1101 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1102 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1104 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1105 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1106 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
1108 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1109 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
1111 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1112 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10,tcp_flags=0x001 tcp_csum:0
1115 dnl Modified VLAN controller action.
1116 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1119 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:41,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1121 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1122 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1124 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1125 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1126 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1128 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1129 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1131 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1132 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1135 dnl Modified MPLS controller action.
1136 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1139 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1141 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1142 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1144 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1145 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1146 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1148 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1149 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1151 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1152 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1155 dnl Modified MPLS controller action.
1156 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1159 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=41:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1161 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1162 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1164 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1165 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1166 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1168 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1169 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1171 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1172 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1175 dnl Modified MPLS controller action.
1176 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1178 dnl in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=3,ttl=64,bos=1)
1181 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:43,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'
1183 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1184 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1186 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1187 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1188 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
1190 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1191 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
1193 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1194 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 dnl Modified MPLS controller action.
1198 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1201 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))'
1203 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1204 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1206 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1207 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1208 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
1210 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1211 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
1213 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1214 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 dnl Modified MPLS controller action.
1218 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1221 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)'
1223 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1224 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1226 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1227 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1228 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
1230 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1231 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
1233 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1234 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 dnl Modified MPLS controller action.
1238 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1241 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)'
1243 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1244 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1246 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1247 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1248 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
1250 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1251 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
1253 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1254 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 dnl Modified MPLS controller action.
1258 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1261 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)'
1263 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1264 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1266 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1267 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1268 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
1270 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1271 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
1273 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1274 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 dnl Modified MPLS controller action.
1278 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1281 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)'
1283 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1284 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1286 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1287 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1288 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
1290 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1291 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
1293 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1294 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 dnl Modified MPLS actions.
1298 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1301 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)'
1303 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1304 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1306 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1307 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1308 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
1310 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1311 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
1313 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1314 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 dnl Modified MPLS ipv6 controller action.
1318 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1321 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)'
1323 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1324 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1326 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1327 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1328 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
1330 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1331 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
1333 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1334 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
1338 dnl Modified MPLS pop action.
1339 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1340 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)
1341 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1343 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1346 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'
1349 # 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)'
1351 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1352 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1354 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1355 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1356 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
1358 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1359 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
1361 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1362 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
1366 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1369 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)'
1371 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1372 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1374 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1375 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1376 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
1378 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1379 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
1381 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)
1382 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
1384 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)
1385 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
1387 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)
1388 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
1390 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)
1391 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
1393 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)
1394 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
1396 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)
1397 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
1399 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)
1400 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
1404 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1407 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'
1409 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1410 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1412 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1413 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1414 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
1416 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1417 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
1419 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)
1420 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
1422 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)
1423 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
1425 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)
1426 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
1428 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)
1429 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
1431 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)
1432 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
1434 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)
1435 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
1437 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)
1438 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
1441 dnl Modified ARP controller action.
1442 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1445 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)'
1448 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1449 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1450 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1451 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1452 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
1453 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1454 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
1455 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1456 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
1457 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1458 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
1459 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1460 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
1461 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1462 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
1463 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1464 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
1465 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1466 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
1467 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1468 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
1471 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1474 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1477 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'
1480 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1481 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1482 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1483 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1484 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
1486 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1487 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
1489 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)
1490 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
1492 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)
1493 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
1495 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)
1496 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
1498 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)
1499 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
1501 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)
1502 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
1504 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)
1505 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
1507 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)
1508 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=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
1511 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1512 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1513 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1514 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)
1515 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)
1516 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)
1517 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)
1518 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)
1519 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1520 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1521 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
1522 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
1523 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
1524 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
1525 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
1526 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
1527 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
1528 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
1529 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
1530 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
1531 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
1532 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
1533 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1534 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1542 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1543 OVS_VSWITCHD_START([dnl
1544 add-port br0 p1 -- set Interface p1 type=dummy
1546 ON_EXIT([kill `cat ovs-ofctl.pid`])
1548 AT_CAPTURE_FILE([ofctl_monitor.log])
1549 # A table-miss flow has priority 0 and no match
1550 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1552 dnl Singleton controller action.
1553 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1556 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)'
1558 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1559 ovs-appctl -t ovs-ofctl exit
1561 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1562 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1563 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
1565 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1566 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
1568 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1569 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 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1574 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1575 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1583 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1584 OVS_VSWITCHD_START([dnl
1585 add-port br0 p1 -- set Interface p1 type=dummy
1587 ON_EXIT([kill `cat ovs-ofctl.pid`])
1589 AT_CAPTURE_FILE([ofctl_monitor.log])
1590 # A table-miss flow has priority 0 and no match
1591 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1593 dnl Singleton controller action.
1594 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1597 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)'
1599 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1600 ovs-appctl -t ovs-ofctl exit
1602 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1604 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1605 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1606 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
1608 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1609 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
1611 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1612 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 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1617 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1618 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1619 OFPST_FLOW reply (OF1.3):
1625 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1627 ADD_OF_PORTS([br0], [1], [2])
1629 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1630 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'
1632 # Input some packets that should follow the arp modification slow-path.
1634 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)'
1636 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1638 # Check the packets that were output.
1639 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1640 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.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
1641 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1642 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.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
1643 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.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
1644 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1645 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.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
1646 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.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
1647 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=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=40:44:44:44:44:41
1654 AT_SETUP([ofproto-dpif - VLAN handling])
1656 [set Bridge br0 fail-mode=standalone -- \
1657 add-port br0 p1 trunks=10,12 -- \
1658 add-port br0 p2 tag=10 -- \
1659 add-port br0 p3 tag=12 \
1660 other-config:priority-tags=true -- \
1661 add-port br0 p4 tag=12 -- \
1662 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
1663 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
1664 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
1665 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1666 other-config:priority-tags=true -- \
1667 set Interface p1 type=dummy -- \
1668 set Interface p2 type=dummy -- \
1669 set Interface p3 type=dummy -- \
1670 set Interface p4 type=dummy -- \
1671 set Interface p5 type=dummy -- \
1672 set Interface p6 type=dummy -- \
1673 set Interface p7 type=dummy -- \
1674 set Interface p8 type=dummy --])
1676 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1677 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1683 "100 10 0 1,5,6,7,8,pop_vlan,2" \
1684 "100 10 1 1,5,6,7,8,pop_vlan,2" \
1687 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
1688 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1692 "1 10 0 5,6,7,8,100,pop_vlan,2" \
1693 "1 10 1 5,6,7,8,100,pop_vlan,2" \
1696 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
1697 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1698 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1699 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1700 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1707 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1708 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1709 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1716 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1717 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1718 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1725 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1726 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1727 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1728 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1729 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1732 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1733 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1734 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1735 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1736 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1737 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1738 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1741 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1742 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1743 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1744 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1745 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1746 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1747 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1750 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1751 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1752 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1753 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1754 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1755 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1756 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1759 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1760 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1768 if test $vlan = none; then
1769 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1771 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))"
1774 echo "----------------------------------------------------------------------"
1775 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1777 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1778 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1780 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1782 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1788 AT_SETUP([ofproto-dpif - MPLS handling])
1789 OVS_VSWITCHD_START([dnl
1790 add-port br0 p1 -- set Interface p1 type=dummy
1792 ON_EXIT([kill `cat ovs-ofctl.pid`])
1794 AT_CAPTURE_FILE([ofctl_monitor.log])
1795 AT_DATA([flows.txt], [dnl
1796 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1797 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1798 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1800 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1802 dnl In this test, we push an MPLS tag to an ethernet packet.
1803 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1806 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)'
1808 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1809 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1811 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1812 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1813 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
1814 00000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1815 00000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1816 00000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1817 00000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
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
1834 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1835 dnl copied exactly, except for the BOS bit.
1836 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1839 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)'
1841 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1842 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1844 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1845 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1846 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
1847 00000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1848 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1849 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1850 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
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
1867 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1868 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1869 dnl to the MPLS ethertype of the MPLS push action which differs to that
1870 dnl of the input packet.
1871 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1874 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)'
1876 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1877 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1879 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1880 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1881 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
1882 00000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1883 00000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1884 00000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1885 00000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
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
1905 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1906 OVS_VSWITCHD_START([dnl
1907 add-port br0 p1 -- set Interface p1 type=dummy
1909 ON_EXIT([kill `cat ovs-ofctl.pid`])
1911 AT_CAPTURE_FILE([ofctl_monitor.log])
1912 AT_DATA([flows.txt], [dnl
1913 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
1914 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
1915 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
1916 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
1917 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
1918 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
1919 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
1920 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
1921 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
1922 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
1924 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1926 dnl Modified MPLS controller action.
1927 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1928 dnl both of these in the final flow
1929 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1932 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)'
1934 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1935 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1937 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1938 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1939 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
1940 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1941 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1942 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1943 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1944 00000040 00 00 00 00
1946 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1947 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
1948 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1949 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1950 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1951 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1952 00000040 00 00 00 00
1954 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1955 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
1956 00000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1957 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1958 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1959 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1960 00000040 00 00 00 00
1963 dnl Modified MPLS controller action.
1964 dnl In this test, the input packet in vlan-tagged, which should be stripped
1965 dnl before we push the MPLS and VLAN tags.
1966 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1969 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))'
1971 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1972 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1974 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1975 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1976 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
1977 00000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
1978 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1979 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1980 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
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
1997 dnl Modified MPLS controller action.
1998 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1999 dnl both of these in the final flow
2000 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2003 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54: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)'
2005 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2006 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2008 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2009 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2010 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
2011 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2012 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2013 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2014 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2015 00000040 00 00 00 00
2017 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2018 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
2019 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2020 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2021 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2022 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2023 00000040 00 00 00 00
2025 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2026 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
2027 00000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2028 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2029 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2030 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2031 00000040 00 00 00 00
2034 dnl Modified MPLS controller action.
2035 dnl In this test, the input packet in vlan-tagged, which should be stripped
2036 dnl before we push the MPLS and VLAN tags.
2037 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2040 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))'
2042 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2043 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2045 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2046 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2047 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
2048 00000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2049 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2050 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2051 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
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
2068 dnl Modified MPLS controller action.
2069 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2070 dnl actions are reordered, so we see both of these in the final flow.
2071 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2074 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54: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)'
2076 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2077 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2079 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2080 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2081 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
2082 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2083 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2084 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2085 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2086 00000040 00 00 00 00
2088 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2089 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
2090 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2091 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2092 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2093 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2094 00000040 00 00 00 00
2096 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2097 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
2098 00000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2099 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2100 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2101 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2102 00000040 00 00 00 00
2105 dnl Modified MPLS controller action.
2106 dnl In this test, the input packet in vlan-tagged, which should be stripped
2107 dnl before we push the MPLS and VLAN tags.
2108 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2111 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))'
2113 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2114 ovs-appctl -t ovs-ofctl exit
2116 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2117 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2118 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
2119 00000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2120 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2121 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2122 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
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
2139 dnl Modified MPLS controller action.
2140 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2141 dnl actions are reordered, so we see both of these in the final flow.
2142 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2145 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54: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)'
2147 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2148 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2150 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2151 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2152 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
2153 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2154 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2155 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2156 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2157 00000040 00 00 00 00
2159 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2160 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
2161 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2162 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2163 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2164 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2165 00000040 00 00 00 00
2167 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2168 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
2169 00000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2170 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2171 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2172 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2173 00000040 00 00 00 00
2176 dnl Modified MPLS controller action.
2177 dnl In this test, the input packet in vlan-tagged, which should be stripped
2178 dnl before we push the MPLS and VLAN tags.
2179 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2182 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))'
2184 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2185 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2187 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2188 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2189 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
2190 00000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2191 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2192 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2193 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
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
2210 dnl Modified MPLS controller action.
2211 dnl In this test, the input packet in vlan-tagged, which should be stripped
2212 dnl before we push the MPLS and VLAN tags.
2213 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2216 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54: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))'
2218 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2219 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2221 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2222 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2223 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2224 00000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2225 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2226 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2227 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2229 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2230 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54: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
2244 dnl Modified MPLS controller action.
2245 dnl In this test, the input packet in vlan-tagged, which should be modified
2246 dnl before we push MPLS and VLAN tags.
2247 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2250 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54: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))'
2252 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2253 ovs-appctl -t ovs-ofctl exit
2255 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2256 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2257 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2258 00000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2259 00000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2260 00000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2261 00000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2263 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2264 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54: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
2278 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2279 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2280 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
2281 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
2282 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
2283 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
2284 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
2285 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
2286 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
2287 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
2288 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
2289 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
2290 OFPST_FLOW reply (OF1.2):
2296 AT_SETUP([ofproto-dpif - fragment handling])
2298 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2299 AT_DATA([flows.txt], [dnl
2300 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
2301 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2302 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2303 priority=50 tcp ip_frag=no actions=output:4
2304 priority=50 tcp ip_frag=first actions=output:5
2305 priority=50 tcp ip_frag=later actions=output:6
2307 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2309 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"
2310 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2311 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2312 later_flow="$base_flow,frag=later)"
2314 # mode no first later
2317 'drop 1 drop drop' \
2326 AT_CHECK([ovs-ofctl set-frags br0 $mode])
2327 for type in no first later; do
2328 eval flow=\$${type}_flow exp_output=\$$type
2329 printf "\n%s\n" "----$mode $type-----"
2330 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2332 if test $mode = drop && test $type != no; then
2333 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2335 echo "Datapath actions: $exp_output" >> expout
2336 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2342 AT_SETUP([ofproto-dpif - exit])
2344 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2345 AT_DATA([flows.txt], [dnl
2346 in_port=1 actions=output:10,exit,output:11
2347 in_port=2 actions=output:12,resubmit:1,output:12
2348 in_port=3 actions=output:13,resubmit:2,output:14
2350 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2351 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])
2352 AT_CHECK([tail -1 stdout], [0],
2353 [Datapath actions: 10
2355 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])
2356 AT_CHECK([tail -1 stdout], [0],
2357 [Datapath actions: 12,10
2359 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])
2360 AT_CHECK([tail -1 stdout], [0],
2361 [Datapath actions: 13,12,10
2367 AT_SETUP([ofproto-dpif - mirroring, select_all])
2369 ADD_OF_PORTS([br0], 1, 2, 3)
2371 set Bridge br0 mirrors=@m --\
2372 --id=@p3 get Port p3 --\
2373 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2375 AT_DATA([flows.txt], [dnl
2376 in_port=1 actions=output:2
2377 in_port=2 actions=output:1
2379 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2381 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)"
2382 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2383 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2384 [Datapath actions: 2,3
2387 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)"
2388 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2389 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2390 [Datapath actions: 1,3
2397 AT_SETUP([ofproto-dpif - mirroring, select_src])
2399 ADD_OF_PORTS([br0], 1, 2, 3)
2401 set Bridge br0 mirrors=@m --\
2402 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2403 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2405 AT_DATA([flows.txt], [dnl
2406 in_port=1 actions=output:2
2407 in_port=2 actions=output:1
2409 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2411 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)"
2412 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2413 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2414 [Datapath actions: 2,3
2417 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)"
2418 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2419 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2420 [Datapath actions: 1
2425 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2427 ADD_OF_PORTS([br0], 1, 2)
2429 set Bridge br0 mirrors=@m --\
2430 --id=@p2 get Port p2 --\
2431 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2433 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2435 # "in_port" defaults to OFPP_NONE if it's not specified.
2436 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"
2437 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2438 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2439 [Datapath actions: 1,2
2446 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2448 ADD_OF_PORTS([br0], 1, 2, 3)
2450 set Bridge br0 mirrors=@m --\
2451 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2452 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2454 AT_DATA([flows.txt], [dnl
2455 in_port=1 actions=output:2
2456 in_port=2 actions=output:1
2458 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2460 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)"
2461 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2462 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2463 [Datapath actions: 2,3
2466 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)"
2467 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2468 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2469 [Datapath actions: 1
2476 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2478 ADD_OF_PORTS([br0], 1, 2, 3)
2480 set Bridge br0 mirrors=@m --\
2481 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2482 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2484 AT_DATA([flows.txt], [dnl
2485 in_port=1, actions=output:2
2487 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2489 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)"
2490 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2491 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2492 [Datapath actions: 2
2495 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))"
2496 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2497 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2498 [Datapath actions: 2
2501 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))"
2502 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2503 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2504 [Datapath actions: 2,3
2511 AT_SETUP([ofproto-dpif - mirroring, output_port])
2513 ADD_OF_PORTS([br0], 1, 2, 3)
2515 set Bridge br0 mirrors=@m --\
2516 --id=@p3 get Port p3 --\
2517 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2519 AT_DATA([flows.txt], [dnl
2520 in_port=1 actions=mod_vlan_vid:17,output:2
2521 in_port=2 actions=output:1
2523 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2525 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)"
2526 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2527 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2528 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2531 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)"
2532 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2533 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2534 [Datapath actions: 1,3
2540 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2542 ADD_OF_PORTS([br0], 1, 2)
2544 set Bridge br0 mirrors=@m --\
2545 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2547 AT_DATA([flows.txt], [dnl
2548 in_port=1 actions=output:2
2549 in_port=2 actions=mod_vlan_vid:17,output:1
2551 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2553 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)"
2554 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2555 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2557 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2558 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2560 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2562 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)"
2563 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2564 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2566 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2567 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2569 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2574 # Two testcases below are for the ofproto/trace command
2575 # The first one tests all correct syntax:
2576 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2577 # ofproto/trace br_name br_flow [-generate|packet]
2578 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2579 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2580 ADD_OF_PORTS([br0], 1, 2, 3)
2582 AT_DATA([flows.txt], [dnl
2583 in_port=1 actions=output:2
2584 in_port=2 actions=output:1
2586 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2588 odp_flow="in_port(p1)"
2590 # Test command: ofproto/trace odp_flow with in_port as a name.
2591 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2592 AT_CHECK([tail -1 stdout], [0], [dnl
2596 odp_flow="in_port(1)"
2597 # Test command: ofproto/trace odp_flow
2598 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2599 AT_CHECK([tail -1 stdout], [0], [dnl
2603 # Test command: ofproto/trace dp_name odp_flow
2604 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2605 AT_CHECK([tail -1 stdout], [0], [dnl
2608 # Test commmand: ofproto/trace br_name br_flow
2609 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2610 AT_CHECK([tail -1 stdout], [0], [dnl
2614 # Delete the inserted flows
2615 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2616 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2618 # This section beflow tests the [-generate] option
2619 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2620 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"
2622 # Test command: ofproto/trace odp_flow
2623 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2624 # Check for no MAC learning entry
2625 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2629 # Test command: ofproto/trace br_name br_flow
2630 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_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 odp_flow -generate
2637 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2638 # Check for the MAC learning entry
2639 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2641 3 0 50:54:00:00:00:05 ?
2644 # Test command: ofproto/trace dp_name odp_flow -generate
2645 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2646 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2647 -generate], [0], [stdout])
2648 # Check for both MAC learning entries
2649 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2651 3 0 50:54:00:00:00:05 ?
2652 1 0 50:54:00:00:00:06 ?
2655 # Test command: ofproto/trace br_name br_flow -generate
2656 AT_CHECK([ovs-appctl ofproto/trace br0 \
2657 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2658 -generate], [0], [stdout])
2659 # Check for both MAC learning entries.
2660 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2662 3 0 50:54:00:00:00:05 ?
2663 1 0 50:54:00:00:00:06 ?
2664 2 0 50:54:00:00:00:07 ?
2667 # This section beflow tests the [packet] option
2668 # The ovs-tcpundump of packets between port1 and port2
2669 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2670 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2672 # Construct the MAC learning table
2673 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2674 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2675 -generate], [0], [stdout])
2677 # Construct the MAC learning table
2678 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2679 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2680 -generate], [0], [stdout])
2682 # Test command: ofproto/trace odp_flow packet
2683 AT_CHECK([ovs-appctl ofproto/trace \
2684 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2685 AT_CHECK([tail -1 stdout], [0], [dnl
2688 AT_CHECK([head -n 2 stdout], [0], [dnl
2690 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
2693 # Test command: ofproto/trace dp_name odp_flow packet
2694 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2695 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2696 AT_CHECK([tail -1 stdout], [0], [dnl
2699 AT_CHECK([head -n 2 stdout], [0], [dnl
2701 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
2704 # Test command: ofproto/trace br_name br_flow packet
2705 AT_CHECK([ovs-appctl ofproto/trace br0 \
2706 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2707 AT_CHECK([tail -1 stdout], [0], [dnl
2710 AT_CHECK([head -n 2 stdout], [0], [dnl
2712 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
2718 # The second test tests the corner cases
2719 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2721 ADD_OF_PORTS([br0], 1, 2)
2724 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2725 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2727 generate="-generate"
2728 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2730 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2736 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2738 AT_CHECK([tail -2 stderr], [0], [dnl
2739 Cannot find the datapath
2740 ovs-appctl: ovs-vswitchd: server returned an error
2743 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2749 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2751 AT_CHECK([tail -2 stderr], [0], [dnl
2752 Cannot find the datapath
2753 ovs-appctl: ovs-vswitchd: server returned an error
2756 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2762 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2764 AT_CHECK([tail -2 stderr], [0], [dnl
2765 Cannot find the datapath
2766 ovs-appctl: ovs-vswitchd: server returned an error
2769 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2775 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2777 AT_CHECK([tail -2 stderr], [0], [dnl
2778 Cannot find the datapath
2779 ovs-appctl: ovs-vswitchd: server returned an error
2782 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2788 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2790 AT_CHECK([tail -2 stderr], [0], [dnl
2792 ovs-appctl: ovs-vswitchd: server returned an error
2795 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2801 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2803 AT_CHECK([tail -2 stderr], [0], [dnl
2804 Must specify bridge name
2805 ovs-appctl: ovs-vswitchd: server returned an error
2808 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2809 AT_CHECK([ovs-appctl ofproto/trace \
2810 ovs-dummy "$odp_flow" garbage_option],
2811 [2], [stdout],[stderr])
2812 AT_CHECK([tail -2 stderr], [0], [dnl
2813 Trailing garbage in packet data
2814 ovs-appctl: ovs-vswitchd: server returned an error
2817 # Test incorrect command: ofproto/trace with 4 arguments
2818 AT_CHECK([ovs-appctl ofproto/trace \
2819 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2820 AT_CHECK([tail -2 stderr], [0], [dnl
2821 "ofproto/trace" command takes at most 3 arguments
2822 ovs-appctl: ovs-vswitchd: server returned an error
2825 # Test incorrect command: ofproto/trace with 0 argument
2826 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2827 AT_CHECK([tail -2 stderr], [0], [dnl
2828 "ofproto/trace" command requires at least 1 arguments
2829 ovs-appctl: ovs-vswitchd: server returned an error
2835 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2837 ADD_OF_PORTS([br0], 1, 2, 3)
2839 AT_DATA([flows.txt], [dnl
2840 in_port=1 actions=output:2
2841 in_port=2 actions=output:1
2843 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2845 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2846 AT_CHECK([tail -1 stdout], [0], [dnl
2847 Datapath actions: push_vlan(vid=123,pcp=0),2
2854 m4_define([OFPROTO_TRACE],
2856 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2857 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2859 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2862 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2865 AT_SETUP([ofproto-dpif - MAC learning])
2866 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2867 ADD_OF_PORTS([br0], 1, 2, 3)
2869 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)'
2871 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2874 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2878 # Check for the MAC learning entry.
2879 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2881 3 0 50:54:00:00:00:05 ?
2884 # Trace a packet arrival destined for the learned MAC.
2885 # (This will also learn a MAC.)
2888 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2892 # Check for both MAC learning entries.
2893 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2895 3 0 50:54:00:00:00:05 ?
2896 1 0 50:54:00:00:00:06 ?
2899 # Trace a packet arrival that updates the first learned MAC entry.
2902 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2906 # Check that the MAC learning entry was updated.
2907 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2909 1 0 50:54:00:00:00:06 ?
2910 2 0 50:54:00:00:00:05 ?
2913 # Add another bridge.
2917 -- set bridge br1 datapath-type=dummy])
2918 ADD_OF_PORTS([br1], 4, 5)
2920 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2923 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2928 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2932 # Check that the MAC learning entries were added.
2933 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2935 4 0 50:54:00:00:00:06 ?
2936 5 0 50:54:00:00:00:07 ?
2939 # Delete port p1 and see that its MAC learning entry disappeared, and
2940 # that the MAC learning entry for the same MAC was also deleted from br1.
2941 AT_CHECK([ovs-vsctl del-port p1])
2942 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2944 2 0 50:54:00:00:00:05 ?
2946 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2948 5 0 50:54:00:00:00:07 ?
2954 AT_SETUP([ofproto-dpif - MAC table overflow])
2956 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2957 ADD_OF_PORTS([br0], 1, 2, 3)
2959 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)'
2961 AT_CHECK([ovs-appctl time/stop])
2963 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2964 for i in 0 1 2 3 4 5 6 7 8 9; do
2967 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
2970 ovs-appctl time/warp 1000
2973 # Check for the MAC learning entries.
2974 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
2976 3 0 50:54:00:00:00:00
2977 3 0 50:54:00:00:00:01
2978 3 0 50:54:00:00:00:02
2979 3 0 50:54:00:00:00:03
2980 3 0 50:54:00:00:00:04
2981 3 0 50:54:00:00:00:05
2982 3 0 50:54:00:00:00:06
2983 3 0 50:54:00:00:00:07
2984 3 0 50:54:00:00:00:08
2985 3 0 50:54:00:00:00:09
2989 # Trace another ARP packet on another MAC.
2992 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
2996 # Check that the new one chased the oldest one out of the table.
2997 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
2999 3 0 50:54:00:00:00:01 ?
3000 3 0 50:54:00:00:00:02 ?
3001 3 0 50:54:00:00:00:03 ?
3002 3 0 50:54:00:00:00:04 ?
3003 3 0 50:54:00:00:00:05 ?
3004 3 0 50:54:00:00:00:06 ?
3005 3 0 50:54:00:00:00:07 ?
3006 3 0 50:54:00:00:00:08 ?
3007 3 0 50:54:00:00:00:09 ?
3008 3 0 50:54:00:00:00:10 ?
3014 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3016 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3018 # IP_VERSION_TYPE is used in AT_SETUP
3019 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3020 [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3021 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3023 ON_EXIT([kill `cat test-sflow.pid`])
3024 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3025 AT_CAPTURE_FILE([sflow.log])
3026 SFLOW_PORT=`parse_listening_port < test-sflow.log`
3027 ovs-appctl time/stop
3029 ADD_OF_PORTS([br0], 1, 2)
3031 set Interface br0 options:ifindex=1002 -- \
3032 set Interface p1 options:ifindex=1004 -- \
3033 set Interface p2 options:ifindex=1003 -- \
3034 set Bridge br0 sflow=@sf -- \
3035 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3036 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3038 dnl open with ARP packets to seed the bridge-learning. The output
3039 dnl ifIndex numbers should be reported predictably after that.
3040 dnl Since we set sampling=1 we should see all of these packets
3041 dnl reported. Sorting the output by data-source and seqNo makes
3042 dnl it deterministic. Ensuring that we send at least two packets
3043 dnl into each port means we get to check the seq nos are
3044 dnl incrementing correctly.
3045 dnl because packets from different ports can be handled by separate
3046 dnl threads, put some sleeps
3048 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)'
3050 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)'
3052 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)'
3054 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(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)'
3055 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)'
3057 dnl sleep long enough to get more than one counter sample
3058 dnl from each datasource so we can check sequence numbers
3059 for i in `seq 1 30`; do
3060 ovs-appctl time/warp 100
3063 ovs-appctl -t test-sflow exit
3065 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3086 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
3106 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
3126 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
3146 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
3166 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
3169 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3183 in_broadcasts=4294967295
3186 in_unknownprotos=4294967295
3189 out_multicasts=4294967295
3190 out_broadcasts=4294967295
3206 in_broadcasts=4294967295
3209 in_unknownprotos=4294967295
3212 out_multicasts=4294967295
3213 out_broadcasts=4294967295
3229 in_broadcasts=4294967295
3232 in_unknownprotos=4294967295
3235 out_multicasts=4294967295
3236 out_broadcasts=4294967295
3252 in_broadcasts=4294967295
3255 in_unknownprotos=4294967295
3258 out_multicasts=4294967295
3259 out_broadcasts=4294967295
3275 in_broadcasts=4294967295
3278 in_unknownprotos=4294967295
3281 out_multicasts=4294967295
3282 out_broadcasts=4294967295
3298 in_broadcasts=4294967295
3301 in_unknownprotos=4294967295
3304 out_multicasts=4294967295
3305 out_broadcasts=4294967295
3312 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3313 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3315 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3317 # Test that basic NetFlow reports flow statistics correctly:
3318 # The initial packet of a flow are correctly accounted.
3319 # Later packets within a flow are correctly accounted.
3320 # Flow actions changing (in this case, due to MAC learning)
3321 # cause a record to be sent.
3323 # IP_VERSION_TYPE is used in AT_SETUP
3324 m4_define([CHECK_NETFLOW_EXPIRATION],
3325 [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3326 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3327 ADD_OF_PORTS([br0], 1, 2)
3329 ovs-appctl time/stop
3330 ON_EXIT([kill `cat test-netflow.pid`])
3331 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3332 AT_CAPTURE_FILE([netflow.log])
3333 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3336 set Bridge br0 netflow=@nf -- \
3337 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3338 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3340 for delay in 1000 30000; do
3341 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)'
3342 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)'
3344 ovs-appctl time/warp $delay
3347 ovs-appctl time/warp 6000
3350 ovs-appctl -t test-netflow exit
3352 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])
3354 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])
3356 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3357 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3358 AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3362 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3363 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3365 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3367 # Test that basic NetFlow reports active expirations correctly.
3369 # IP_VERSION_TYPE is used in AT_SETUP
3370 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3371 [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3373 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3374 ADD_OF_PORTS([br0], 1, 2)
3376 ON_EXIT([kill `cat test-netflow.pid`])
3377 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3378 AT_CAPTURE_FILE([netflow.log])
3379 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3382 set Bridge br0 netflow=@nf -- \
3383 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3384 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3386 AT_CHECK([ovs-appctl time/stop])
3388 while test $n -le 60; do
3391 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)'
3392 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)'
3394 ovs-appctl time/warp 1000
3397 ovs-appctl time/warp 10000
3401 ovs-appctl -t test-netflow exit
3403 # Count the number of reported packets:
3404 # - From source to destination before MAC learning kicks in (just one).
3405 # - From source to destination after that.
3406 # - From destination to source.
3414 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3421 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3424 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3427 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3434 eval $counter=\`expr \$$counter + \$pkts\`
3435 n_recs=`expr $n_recs + 1`
3438 # There should be exactly 1 MAC learning packet,
3439 # exactly 59 other packets in that direction,
3440 # and exactly 60 packets in the other direction.
3441 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3446 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3447 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3449 AT_SETUP([ofproto-dpif - flow stats])
3451 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3452 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3454 ovs-appctl time/stop
3456 for i in `seq 1 10`; do
3457 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)'
3460 ovs-appctl time/warp 1000
3462 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3463 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3464 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3465 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3470 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3472 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3473 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3475 ovs-appctl time/stop
3477 for i in `seq 1 10`; do
3478 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)'
3481 ovs-appctl time/warp 100
3482 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3483 ovs-appctl time/warp 1000
3485 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3486 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3487 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3488 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3493 AT_SETUP([idle_age and hard_age increase over time])
3496 # get_ages DURATION HARD IDLE
3498 # Fetch the flow duration, hard age, and idle age into the variables
3499 # whose names are given as arguments. Rounds DURATION down to the
3500 # nearest integer. If hard_age doesn't appear in the output, sets
3501 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
3504 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3506 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3507 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3508 AS_VAR_COPY([$1], [duration])
3510 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3511 if test X"$hard" = X; then
3514 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3516 AS_VAR_COPY([$2], [hard])
3518 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3519 if test X"$idle" = X; then
3522 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3524 AS_VAR_COPY([$3], [idle])
3527 # Add a flow and get its initial hard and idle age.
3528 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3529 get_ages duration1 hard1 idle1
3531 ovs-appctl time/stop
3532 # Warp time forward by 10 seconds, then modify the flow's actions.
3533 ovs-appctl time/warp 10000
3534 get_ages duration2 hard2 idle2
3535 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3537 # Warp time forward by 10 seconds.
3538 ovs-appctl time/warp 10000
3539 get_ages duration3 hard3 idle3
3541 # Warp time forward 10 more seconds, then pass some packets through the flow,
3542 # then warp forward a few more times because idle times are only updated
3544 ovs-appctl time/warp 10000
3545 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)'
3546 ovs-appctl time/warp 1000
3547 ovs-appctl time/warp 1000
3548 ovs-appctl time/warp 1000
3549 get_ages duration4 hard4 idle4
3551 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3552 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3553 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3555 # Duration should increase steadily over time.
3556 AT_CHECK([test $duration1 -lt $duration2])
3557 AT_CHECK([test $duration2 -lt $duration3])
3558 AT_CHECK([test $duration3 -lt $duration4])
3560 # Hard age should be "none" initially because it's the same as flow_duration,
3561 # then it should increase.
3562 AT_CHECK([test $hard1 = none])
3563 AT_CHECK([test $hard2 = none])
3564 AT_CHECK([test $hard3 != none])
3565 AT_CHECK([test $hard4 != none])
3566 AT_CHECK([test $hard3 -lt $hard4])
3568 # Idle age should increase from 1 to 2 to 3, then decrease.
3569 AT_CHECK([test $idle1 -lt $idle2])
3570 AT_CHECK([test $idle2 -lt $idle3])
3571 AT_CHECK([test $idle3 -gt $idle4])
3573 # Check some invariant relationships.
3574 AT_CHECK([test $duration1 = $idle1])
3575 AT_CHECK([test $duration2 = $idle2])
3576 AT_CHECK([test $duration3 = $idle3])
3577 AT_CHECK([test $idle3 -gt $hard3])
3578 AT_CHECK([test $idle4 -lt $hard4])
3579 AT_CHECK([test $hard4 -lt $duration4])
3584 AT_SETUP([ofproto-dpif - fin_timeout])
3586 AT_DATA([flows.txt], [dnl
3587 in_port=1 actions=output:2
3588 in_port=2 actions=mod_vlan_vid:17,output:1
3590 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3591 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3593 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3596 ovs-appctl time/stop
3597 # Check that a TCP SYN packet does not change the timeout. (Because
3598 # flow stats updates are mainly what implements the fin_timeout
3599 # feature, we warp forward a couple of times to ensure that flow stats
3600 # run before re-checking the flow table.)
3601 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3602 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3605 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3607 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3609 # Check that a TCP FIN packet does change the timeout.
3610 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3611 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3614 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3616 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3621 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3622 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3623 ADD_OF_PORTS([br0], [1], [2])
3624 ADD_OF_PORTS([br1], [3])
3626 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3633 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3634 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3635 ADD_OF_PORTS([br0], [1], [2])
3636 ADD_OF_PORTS([br1], [3])
3638 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3639 dummy@ovs-dummy: hit:0 missed:0
3641 br0 65534/100: (dummy)
3645 br1 65534/101: (dummy)
3651 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3652 OVS_VSWITCHD_START([add-br br1 -- \
3653 set bridge br1 datapath-type=dummy fail-mode=secure])
3654 ADD_OF_PORTS([br0], [1], [2])
3655 ADD_OF_PORTS([br1], [3])
3657 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)'])
3658 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)'])
3659 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)'])
3661 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3662 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
3663 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
3666 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3667 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
3670 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3671 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
3672 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
3675 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3676 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
3682 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a userspace action])
3683 OVS_VSWITCHD_START([dnl
3684 add-port br0 p1 -- set Interface p1 type=dummy
3686 ON_EXIT([kill `cat ovs-ofctl.pid`])
3688 AT_CAPTURE_FILE([ofctl_monitor.log])
3689 AT_DATA([flows.txt], [dnl
3690 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3691 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3693 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3695 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3696 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3698 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3699 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)
3700 dnl (label 20, exp 0, [S], ttl 32)
3701 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3702 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3704 for dl_src in 00 01; do
3705 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"])
3707 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3708 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))
3716 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows - MPLS actions that result in a drop])
3717 OVS_VSWITCHD_START([dnl
3718 add-port br0 p1 -- set Interface p1 type=dummy
3720 ON_EXIT([kill `cat ovs-ofctl.pid`])
3722 AT_CAPTURE_FILE([ofctl_monitor.log])
3723 AT_DATA([flows.txt], [dnl
3724 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3725 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3727 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3729 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3730 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3731 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3733 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3734 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)
3735 dnl (label 20, exp 0, ttl 32)
3736 dnl (label 20, exp 0, ttl 32)
3737 dnl (label 20, exp 0, [S], ttl 32)
3738 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3739 dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3741 for dl_src in 00 01; do
3742 AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007 6066666666$dl_src 8847 00014020 00014120 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45"])
3744 AT_CHECK_UNQUOTED([ovs-appctl dpif/dump-flows br0 | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3745 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))
3752 AT_SETUP([ofproto-dpif - patch ports])
3753 OVS_VSWITCHD_START([add-br br1 \
3754 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3755 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3756 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3758 ADD_OF_PORTS([br0], [2])
3759 ADD_OF_PORTS([br1], [3])
3761 AT_CHECK([ovs-appctl time/stop])
3763 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3764 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3766 for i in $(seq 1 10); do
3767 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)'
3768 if [[ $i -eq 1 ]]; then
3773 for i in $(seq 1 5); do
3774 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)'
3775 if [[ $i -eq 1 ]]; then
3780 AT_CHECK([ovs-appctl time/warp 500], [0],
3784 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3785 dummy@ovs-dummy: hit:13 missed:2
3787 br0 65534/100: (dummy)
3789 pbr0 1/none: (patch: peer=pbr1)
3791 br1 65534/101: (dummy)
3793 pbr1 1/none: (patch: peer=pbr0)
3796 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
3797 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
3799 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
3800 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
3803 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3804 OFPST_PORT reply (xid=0x4): 1 ports
3805 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3806 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3809 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3810 OFPST_PORT reply (xid=0x4): 1 ports
3811 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3812 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3818 AT_SETUP([ofproto-dpif - port duration])
3819 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3820 ADD_OF_PORTS([br0], 1, 2)
3822 ovs-appctl time/stop
3823 ovs-appctl time/warp 10000
3825 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3826 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3835 dnl ----------------------------------------------------------------------
3836 AT_BANNER([ofproto-dpif -- megaflows])
3838 AT_SETUP([ofproto-dpif megaflow - port classification])
3840 ADD_OF_PORTS([br0], [1], [2])
3841 AT_DATA([flows.txt], [dnl
3842 table=0 in_port=1 actions=output(2)
3844 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3845 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)'])
3846 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)'])
3848 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3849 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>
3854 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3856 ADD_OF_PORTS([br0], [1], [2])
3857 AT_DATA([flows.txt], [dnl
3858 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3860 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3861 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)'])
3862 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)'])
3864 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3865 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>
3866 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>
3871 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3873 ADD_OF_PORTS([br0], [1], [2])
3874 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], [])
3875 AT_DATA([flows.txt], [dnl
3876 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3878 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3879 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)'])
3880 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)'])
3882 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3883 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>
3884 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>
3889 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3891 ADD_OF_PORTS([br0], [1], [2])
3892 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], [])
3893 AT_DATA([flows.txt], [dnl
3894 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3896 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3897 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)'])
3898 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)'])
3900 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3901 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>
3902 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>
3907 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3909 ADD_OF_PORTS([br0], [1], [2])
3910 AT_DATA([flows.txt], [dnl
3911 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3913 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3914 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)'])
3915 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3916 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3917 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>
3922 AT_SETUP([ofproto-dpif megaflow - normal])
3924 ADD_OF_PORTS([br0], [1], [2])
3925 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3926 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)'])
3927 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)'])
3929 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3930 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>
3931 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>
3936 AT_SETUP([ofproto-dpif megaflow - mpls])
3938 ADD_OF_PORTS([br0], [1], [2])
3939 AT_DATA([flows.txt], [dnl
3940 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
3941 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
3943 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3944 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)'])
3945 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)'])
3947 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3948 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>
3949 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>
3954 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
3956 # IP_VERSION_TYPE is used in AT_SETUP
3957 m4_define([CHECK_MEGAFLOW_NETFLOW],
3958 [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
3960 ADD_OF_PORTS([br0], [1], [2])
3962 dnl NetFlow configuration disables wildcarding relevant fields
3963 ON_EXIT([kill `cat test-netflow.pid`])
3964 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3965 AT_CAPTURE_FILE([netflow.log])
3966 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3968 set Bridge br0 netflow=@nf -- \
3969 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3970 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3972 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3973 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)'])
3974 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)'])
3976 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
3977 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>
3978 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>
3983 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
3984 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
3986 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
3988 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
3989 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
3990 set interface p2 type=dummy ofport_request=2 -- \
3991 set interface p3 type=dummy ofport_request=3])
3992 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
3995 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3996 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3997 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
3999 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4000 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/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>
4001 skb_priority(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/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>
4006 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4008 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4009 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4010 set interface p2 type=dummy ofport_request=2 -- \
4011 set interface p3 type=dummy ofport_request=3])
4012 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4015 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4016 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)'])
4017 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)'])
4019 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4020 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>
4021 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>
4026 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4027 # Create bond0 on br0 with interfaces p0 and p1
4028 # and bond1 on br1 with interfaces p2 and p3
4029 # with p0 patched to p2 and p1 patched to p3.
4031 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4032 other-config:lacp-time=fast \
4033 other-config:bond-rebalance-interval=0 -- \
4034 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4035 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4037 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4038 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4039 fail-mode=secure -- \
4040 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4041 other-config:lacp-time=fast \
4042 other-config:bond-rebalance-interval=0 -- \
4043 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4044 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4046 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4048 ADD_OF_PORTS([br0], [7])
4049 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4050 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4051 ovs-appctl time/stop
4052 ovs-appctl time/warp 5000
4053 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)'])
4054 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)'])
4056 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4057 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>
4058 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>
4063 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4065 ADD_OF_PORTS([br0], [1], [2])
4066 AT_DATA([flows.txt], [dnl
4067 table=0 in_port=1,ip actions=resubmit(90)
4068 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4070 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4071 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)'])
4072 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)'])
4074 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4075 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>
4076 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>
4081 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4083 ADD_OF_PORTS([br0], [1], [2])
4084 AT_DATA([flows.txt], [dnl
4085 table=0 in_port=1,ip actions=resubmit(,1)
4086 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4088 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4089 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)'])
4090 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=
4091 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4093 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4094 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>
4095 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>
4100 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4102 ADD_OF_PORTS([br0], [1], [2])
4103 AT_DATA([flows.txt], [dnl
4104 table=0 in_port=1,ip actions=goto_table(1)
4105 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4107 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4108 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)'])
4109 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)'])
4111 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4112 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>
4113 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>
4118 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4120 ADD_OF_PORTS([br0], [1], [2], [3])
4122 set Bridge br0 mirrors=@m --\
4123 --id=@p3 get Port p3 --\
4124 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4126 AT_DATA([flows.txt], [dnl
4127 in_port=1 actions=output:2
4129 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4130 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)'])
4131 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)'])
4133 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4134 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>
4139 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4141 ADD_OF_PORTS([br0], [1], [2], [3])
4143 set Bridge br0 mirrors=@m --\
4144 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4145 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4147 AT_DATA([flows.txt], [dnl
4148 in_port=1 actions=output:2
4150 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4151 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))'])
4152 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)'])
4154 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4155 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>
4156 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>
4161 AT_SETUP([ofproto-dpif megaflow - move action])
4163 ADD_OF_PORTS([br0], [1], [2])
4164 AT_DATA([flows.txt], [dnl
4165 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4166 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4167 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4169 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4170 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)'])
4171 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)'])
4173 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4174 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>
4175 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>
4180 AT_SETUP([ofproto-dpif megaflow - push action])
4182 ADD_OF_PORTS([br0], [1], [2])
4183 AT_DATA([flows.txt], [dnl
4184 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4186 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4187 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)'])
4188 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)'])
4190 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4191 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>
4192 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>
4197 AT_SETUP([ofproto-dpif megaflow - learning])
4199 ADD_OF_PORTS([br0], [1], [2])
4200 AT_DATA([flows.txt], [dnl
4201 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
4203 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4204 ovs-appctl time/stop
4205 # We send each packet twice because the first packet in each flow causes the
4206 # flow table to change and thus revalidations, which (depending on timing)
4207 # can keep a megaflow from being installed. The revalidations are done by
4208 # the second iteration, allowing the flows to be installed.
4210 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4211 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4212 ovs-appctl time/warp 100
4215 dnl The original flow is missing due to a revalidation.
4216 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4217 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>
4218 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>
4223 AT_SETUP([ofproto-dpif megaflow - tunnels])
4225 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4226 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4227 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4228 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4230 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4231 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4232 ofport_request=4 options:key=flow])
4233 AT_DATA([flows.txt], [dnl
4234 in_port=1,actions=output(2)
4235 in_port=3,actions=output(4)
4237 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4238 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4239 dnl will cause the packet to be dropped.
4240 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
4241 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
4242 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00: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)'])
4243 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)'])
4245 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4246 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>
4247 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>
4248 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>
4253 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4255 ADD_OF_PORTS([br0], [1], [2])
4256 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], [])
4257 AT_DATA([flows.txt], [dnl
4258 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4260 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4261 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)'])
4262 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)'])
4264 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
4265 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>
4266 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>
4271 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4273 ADD_OF_PORTS([br0], [1], [2])
4274 AT_DATA([flows.txt], [dnl
4275 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4277 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4278 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)'])
4279 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)'])
4281 dnl The megaflows do not match the same fields, since the first packet
4282 dnl is essentially a no-op. (The new destination MAC is the same as the
4283 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4284 dnl so that a packet that doesn't need its MAC address changed doesn't
4285 dnl hide one that does. Since the first entry doesn't need to change,
4286 dnl only the destination MAC address is matched (as decided by
4287 dnl ofproto-dpif). The second entry actually updates the destination
4288 dnl MAC, so both the source and destination MAC addresses are
4289 dnl un-wildcarded, since the ODP commit functions update both the source
4290 dnl and destination MAC addresses.
4291 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4292 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
4293 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
4298 AT_SETUP([ofproto-dpif megaflow - disabled])
4300 ADD_OF_PORTS([br0], [1], [2])
4301 AT_DATA([flows.txt], [dnl
4302 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4303 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4305 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4307 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4308 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4309 for i in 1 2 3 4; do
4310 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)'])
4311 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)'])
4314 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
4315 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
4316 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
4321 AT_SETUP([ofproto-dpif - datapath port number change])
4322 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4323 ADD_OF_PORTS([br0], 1)
4325 # Trace a flow that should output to p1.
4326 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4328 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4331 # Change p1's port number to 5.
4332 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4334 # Trace a flow that should output to p1 in its new location.
4335 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4337 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4342 # Tests the bundling with various bfd and cfm configurations.
4343 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4344 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4345 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4346 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4347 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4348 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4349 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4350 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4351 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4352 set Interface p0 cfm_mpid=1 -- \
4353 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4355 ovs-appctl time/stop
4356 # advance the clock to stablize everything.
4357 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4358 # cfm/show should show 'recv' fault.
4359 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4362 # bfd/show should show 'up'.
4363 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4364 Local Session State: up
4365 Remote Session State: up
4366 Local Session State: up
4367 Remote Session State: up
4369 # bond/show should show 'may-enable: true' for all slaves.
4370 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4377 # now disable the bfd on p1.
4378 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4379 # advance the clock to stablize everything.
4380 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4381 # cfm/show should show 'recv' fault.
4382 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4385 # bfd/show should show 'down'.
4386 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4387 Local Session State: down
4388 Remote Session State: down
4390 # bond/show should show 'may-enable: false' for p0.
4391 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4396 # now enable the bfd on p1 and disable bfd on p0.
4397 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4398 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4399 # advance the clock to stablize everything.
4400 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4401 # cfm/show should show 'recv' fault.
4402 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4405 # bfd/show should show 'down'.
4406 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4407 Local Session State: down
4408 Remote Session State: down
4410 # bond/show should show 'may-enable: false' for p0 and p1.
4411 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4421 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4422 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4425 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4427 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4428 monitor thread created
4430 # disable bfd on p0.
4431 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4433 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4434 monitor thread terminated
4436 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4439 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4441 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4442 monitor thread created
4444 # disable cfm on p0.
4445 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4447 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4448 monitor thread terminated
4450 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4452 # enable both bfd and cfm on p0.
4453 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4455 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4456 monitor thread created
4458 # disable bfd on p0.
4459 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4460 # check log, there should not be the log of thread terminated.
4461 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4463 # reenable bfd on p0.
4464 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4465 # check log, should still be on log of thread created.
4466 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4467 monitor thread created
4469 # disable bfd and cfm together.
4470 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4472 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4473 monitor thread terminated
4479 # this test helps avoid the deadlock between the main thread and monitor thread.
4480 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4483 for i in `seq 1 199`
4485 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])
4491 AT_BANNER([ofproto-dpif - flow translation resource limits])
4493 AT_SETUP([ofproto-dpif - infinite resubmit])
4495 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4496 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4498 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4500 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4503 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4506 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4508 ADD_OF_PORTS([br0], 1)
4509 (for i in `seq 1 64`; do
4511 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4513 echo "in_port=65, actions=local") > flows
4514 AT_CHECK([ovs-ofctl add-flows br0 flows])
4515 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4516 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4518 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4521 AT_SETUP([ofproto-dpif - too many output actions])
4523 ADD_OF_PORTS([br0], 1)
4524 (for i in `seq 1 12`; do
4526 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4528 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4529 AT_CHECK([ovs-ofctl add-flows br0 flows])
4530 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4531 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4534 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4536 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4539 AT_SETUP([ofproto-dpif - stack too deep])
4541 ADD_OF_PORTS([br0], 1)
4542 (for i in `seq 1 12`; do
4544 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4546 push="push:NXM_NX_REG0[[]]"
4547 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4548 AT_CHECK([ovs-ofctl add-flows br0 flows])
4549 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4550 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4552 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])