Warn the free of 'recirc_id' by wrong 'ofproto'.
[cascardo/ovs.git] / tests / ofproto-dpif.at
1 AT_BANNER([ofproto-dpif])
2
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/
7 ' | sort]])
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/
13 ' | sort]])
14 m4_define([FILTER_FLOW_INSTALL], [[
15 grep ' put' | sed '
16     s/.*put\[create\] //
17 ' | sort | uniq]])
18 m4_define([FILTER_FLOW_DUMP], [[
19 grep 'flow_dump ' | sed '
20     s/.*flow_dump //
21     s/used:[0-9]*\.[0-9]*/used:0.0/
22 ' | sort | uniq]])
23
24 AT_SETUP([ofproto-dpif - dummy interface])
25 # Create br0 with interfaces p1 and p7
26 #    and br1 with interfaces p2 and p8
27 # with p1 and p2 connected via unix domain socket
28 OVS_VSWITCHD_START(
29   [add-port br0 p1 -- set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
30    add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
31    add-br br1 -- \
32    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
33    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
34                   fail-mode=secure -- \
35    add-port br1 p2 -- set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
36    add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
37 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
38
39 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
40 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
41 ovs-appctl time/stop
42 ovs-appctl time/warp 5000
43 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)'])
44 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)'])
45 ovs-appctl time/warp 100
46 sleep 1  # wait for forwarders process packets
47
48 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
49 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
50 skb_priority(0),skb_mark(0/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),icmp(type=8/0,code=0/0), actions: <del>
51 skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
52 skb_priority(0),skb_mark(0/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),icmp(type=8/0,code=0/0), actions: <del>
53 ])
54 OVS_VSWITCHD_STOP
55 AT_CLEANUP
56
57 AT_SETUP([ofproto-dpif, active-backup bonding])
58 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
59 #    and br1 with interfaces p3, p4 and p8.
60 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
61 OVS_VSWITCHD_START(
62   [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
63    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
64    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
65    add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
66    add-br br1 -- \
67    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
68    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
69                   fail-mode=secure -- \
70    add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
71    add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
72    add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
73 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
74
75 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
76 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
77 ovs-appctl netdev-dummy/set-admin-state up
78 ovs-appctl time/warp 100
79 ovs-appctl netdev-dummy/set-admin-state p2 down
80 ovs-appctl time/stop
81 ovs-appctl time/warp 100
82 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)'])
83 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)'])
84 ovs-appctl time/warp 100
85 ovs-appctl netdev-dummy/set-admin-state p2 up
86 ovs-appctl netdev-dummy/set-admin-state p1 down
87 ovs-appctl time/warp 100
88 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)'])
89 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)'])
90 ovs-appctl time/warp 100
91 ovs-appctl time/warp 100
92 sleep 1
93 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port([[348]])' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
94 skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
95 skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
96 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
97 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
98 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:09/00:00:00:00:00:00,tha=50:54:00:00:00:09/00:00:00:00:00:00), actions: <del>
99 skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:0b/00:00:00:00:00:00,tha=50:54:00:00:00:0b/00:00:00:00:00:00), actions: <del>
100 ])
101 OVS_VSWITCHD_STOP
102 AT_CLEANUP
103
104 AT_SETUP([ofproto-dpif, balance-slb bonding])
105 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
106 #    and br1 with interfaces p4, p5, p6 and p8.
107 #    p1 <-> p4, p2 <-> p5, p3 <-> p6
108 # Send some traffic, make sure the traffic are spread based on source mac.
109 OVS_VSWITCHD_START(
110   [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
111    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
112    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
113    set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
114    add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
115    add-br br1 -- \
116    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
117    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
118                   fail-mode=secure -- \
119    add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
120    add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
121    add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
122    add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
123
124 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
125 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
126 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
127 ])
128 ovs-appctl netdev-dummy/set-admin-state up
129 ovs-appctl time/stop
130 ovs-appctl time/warp 100
131 (
132 for i in `seq 0 100 |xargs printf '%02x\n'`;
133     do
134     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)"
135     AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
136     done
137 )
138 ovs-appctl time/warp 100
139 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
140 # Make sure there is resonable distribution to all three ports.
141 # We don't want to make this check precise, in case hash function changes.
142 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
143 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
144 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
145 OVS_VSWITCHD_STOP
146 AT_CLEANUP
147
148 AT_SETUP([ofproto-dpif, balance-tcp bonding])
149 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
150 #    and br1 with interfaces bond1(p4, p5, p6) and p8.
151 #    bond0 <-> bond1
152 # Send some traffic, make sure the traffic are spread based on L4 headers.
153 OVS_VSWITCHD_START(
154   [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
155         other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
156    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
157    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
158    set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
159    add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
160    add-br br1 -- \
161    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
162    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
163                   fail-mode=secure -- \
164    add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
165         other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
166    set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
167    set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
168    set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
169    add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
170 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
171 ])
172 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
173 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
174 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
175 ], [])
176 sleep 1;
177 ovs-appctl time/stop
178 ovs-appctl time/warp 100
179 ovs-appctl lacp/show > lacp.txt
180 ovs-appctl bond/show > bond.txt
181 (
182 for i in `seq 0 255` ;
183     do
184     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)"
185     AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
186     done
187 )
188 ovs-appctl time/warp 100
189 ovs-appctl time/warp 100
190 ovs-appctl time/warp 100
191 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
192 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
193 # Make sure there is resonable distribution to all three ports.
194 # We don't want to make this check precise, in case hash function changes.
195 AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 24])
196 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24])
197 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24])
198
199 OVS_VSWITCHD_STOP()
200 AT_CLEANUP
201
202 # Makes sure recirculation does not change the way packet is handled.
203 AT_SETUP([ofproto-dpif, balance-tcp bonding, different recirc flow ])
204 OVS_VSWITCHD_START(
205   [add-bond br0 bond0 p1 p2 bond_mode=balance-tcp lacp=active \
206        other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
207    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
208    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
209    add-br br1 -- \
210    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
211    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
212        fail-mode=standalone -- \
213    add-bond br1 bond1 p3 p4 bond_mode=balance-tcp lacp=active \
214        other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
215    set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
216    set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
217    add-port br1 br1- -- set interface br1- type=patch options:peer=br1+ ofport_request=100 -- \
218    add-br br-int -- \
219    set bridge br-int other-config:hwaddr=aa:77:aa:77:00:00 -- \
220    set bridge br-int datapath-type=dummy other-config:datapath-id=1235 \
221        fail-mode=secure -- \
222    add-port br-int br1+ -- set interface br1+ type=patch options:peer=br1- ofport_request=101 -- \
223    add-port br-int p5 -- set interface p5 ofport_request=5 type=dummy
224 ])
225 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
226 ])
227
228 # Waits for all ifaces enabled.
229 OVS_WAIT_UNTIL([test `ovs-appctl bond/show | grep -- "may_enable: true" |  wc -l` -ge 4])
230
231 # The dl_vlan flow should not be ever matched,
232 # since recirculation should not change the flow handling.
233 AT_DATA([flows.txt], [dnl
234 table=0 priority=1 in_port=5 actions=mod_vlan_vid:1,output(101)
235 table=0 priority=2 in_port=5 dl_vlan=1 actions=drop
236 ])
237 AT_CHECK([ovs-ofctl add-flows br-int flows.txt])
238
239 # Sends a packet to trigger recirculation.
240 # Should generate recirc_id(0x12d),dp_hash(0xcf/0xff).
241 AT_CHECK([ovs-appctl netdev-dummy/receive p5 "in_port(5),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no)"])
242
243 # Forces revalidators to update all stats.
244 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [dnl
245 megaflows disabled
246 ])
247 AT_CHECK([ovs-appctl upcall/enable-megaflows], [0], [dnl
248 megaflows enabled
249 ])
250
251 # Checks the flow stats in br1, should only be one flow with non-zero
252 # 'n_packets' from internal table.
253 AT_CHECK([ovs-appctl bridge/dump-flows br1 | ofctl_strip | grep -- "n_packets" | grep -- "table_id" | sed -e 's/output:[[0-9]]\+/output/'], [0], [dnl
254 table_id=254, n_packets=1, n_bytes=64, priority=20,recirc_id=0x12d,dp_hash=0xcf/0xff,actions=output
255 ])
256
257 # Checks the flow stats in br-int, should be only one match.
258 AT_CHECK([ovs-ofctl dump-flows br-int | ofctl_strip | sort], [0], [dnl
259  n_packets=1, n_bytes=60, priority=1,in_port=5 actions=mod_vlan_vid:1,output:101
260  priority=2,in_port=5,dl_vlan=1 actions=drop
261 NXST_FLOW reply:
262 ])
263
264 OVS_VSWITCHD_STOP()
265 AT_CLEANUP
266
267 AT_SETUP([ofproto-dpif - resubmit])
268 OVS_VSWITCHD_START
269 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
270                     [16], [17], [18], [19], [20], [21])
271 AT_DATA([flows.txt], [dnl
272 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
273 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
274 table=0 in_port=3 priority=2000 icmp actions=output(20)
275 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
276 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
277 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
278 ])
279 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
280 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])
281 AT_CHECK([tail -1 stdout], [0],
282   [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
283 ])
284 OVS_VSWITCHD_STOP
285 AT_CLEANUP
286
287 AT_SETUP([ofproto-dpif - goto table])
288 OVS_VSWITCHD_START
289 ADD_OF_PORTS([br0], [1], [10], [11])
290 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
291 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
292 echo "table=64 actions=output(11)" >> flows.txt
293 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
294 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])
295 AT_CHECK([tail -1 stdout], [0],
296   [Datapath actions: 10,11
297 ])
298 OVS_VSWITCHD_STOP
299 AT_CLEANUP
300
301 AT_SETUP([ofproto-dpif - write actions])
302 OVS_VSWITCHD_START
303 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
304 AT_DATA([flows.txt], [dnl
305 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
306 table=1 ip actions=write_actions(output(13)),goto_table(2)
307 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
308 ])
309 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
310 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])
311 AT_CHECK([tail -2 stdout], [0],
312   [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
313 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
314 ])
315 OVS_VSWITCHD_STOP
316 AT_CLEANUP
317
318 AT_SETUP([ofproto-dpif - clear actions])
319 OVS_VSWITCHD_START
320 ADD_OF_PORTS([br0], [1], [10], [11], [12])
321 AT_DATA([flows.txt], [dnl
322 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
323 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
324 ])
325 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
326 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=9'], [0], [stdout])
327 AT_CHECK([tail -2 stdout], [0],
328   [Megaflow: recirc_id=0,skb_priority=0,tcp,in_port=1,nw_frag=no,tp_src=8,tp_dst=9
329 Datapath actions: 10,set(tcp(src=91,dst=9)),11
330 ])
331 OVS_VSWITCHD_STOP
332 AT_CLEANUP
333
334 AT_SETUP([ofproto-dpif - group chaining not supported])
335 OVS_VSWITCHD_START
336 ADD_OF_PORTS([br0], [1], [10], [11])
337 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'],
338   [1], [], [stderr])
339 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
340   [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
341 ])
342 OVS_VSWITCHD_STOP
343 AT_CLEANUP
344
345 AT_SETUP([ofproto-dpif - all group in action list])
346 OVS_VSWITCHD_START
347 ADD_OF_PORTS([br0], [1], [10], [11])
348 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'])
349 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
350 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])
351 AT_CHECK([tail -2 stdout], [0],
352   [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
353 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
354 ])
355 OVS_VSWITCHD_STOP
356 AT_CLEANUP
357
358 AT_SETUP([ofproto-dpif - indirect group in action list])
359 OVS_VSWITCHD_START
360 ADD_OF_PORTS([br0], [1], [10])
361 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
362 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
363 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])
364 AT_CHECK([tail -1 stdout], [0],
365   [Datapath actions: 10
366 ])
367 OVS_VSWITCHD_STOP
368 AT_CLEANUP
369
370 AT_SETUP([ofproto-dpif - all group in action set])
371 OVS_VSWITCHD_START
372 ADD_OF_PORTS([br0], [1], [10], [11])
373 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'])
374 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
375 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])
376 AT_CHECK([tail -2 stdout], [0],
377   [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
378 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
379 ])
380 OVS_VSWITCHD_STOP
381 AT_CLEANUP
382
383 AT_SETUP([ofproto-dpif - indirect group in action set])
384 OVS_VSWITCHD_START
385 ADD_OF_PORTS([br0], [1], [10])
386 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
387 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
388 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])
389 AT_CHECK([tail -1 stdout], [0],
390   [Datapath actions: 10
391 ])
392 OVS_VSWITCHD_STOP
393 AT_CLEANUP
394
395 AT_SETUP([ofproto-dpif - select group])
396 OVS_VSWITCHD_START
397 ADD_OF_PORTS([br0], [1], [10], [11])
398 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
399 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
400
401 # Try a bunch of different flows and make sure that they get distributed
402 # at least somewhat.
403 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
404     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])
405     tail -1 stdout >> results
406 done
407 sort results | uniq -c
408 AT_CHECK([sort results | uniq], [0],
409   [Datapath actions: 10
410 Datapath actions: 11
411 ])
412 OVS_VSWITCHD_STOP
413 AT_CLEANUP
414
415 AT_SETUP([ofproto-dpif - select group with watch port])
416 OVS_VSWITCHD_START
417 ADD_OF_PORTS([br0], [1], [10], [11])
418 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
419 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
420 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])
421 AT_CHECK([tail -1 stdout], [0],
422   [Datapath actions: 11
423 ])
424 OVS_VSWITCHD_STOP
425 AT_CLEANUP
426
427 AT_SETUP([ofproto-dpif - select group with weight])
428 OVS_VSWITCHD_START
429 ADD_OF_PORTS([br0], [1], [10], [11], [12])
430 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'])
431 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
432 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])
433 AT_CHECK([tail -1 stdout], [0],
434   [Datapath actions: 11
435 ])
436 OVS_VSWITCHD_STOP
437 AT_CLEANUP
438
439 AT_SETUP([ofproto-dpif - fast failover group])
440 OVS_VSWITCHD_START
441 ADD_OF_PORTS([br0], [1], [10], [11])
442 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'])
443 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
444 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])
445 AT_CHECK([tail -1 stdout], [0],
446   [Datapath actions: drop
447 ])
448 OVS_VSWITCHD_STOP
449 AT_CLEANUP
450
451 AT_SETUP([ofproto-dpif - registers])
452 OVS_VSWITCHD_START
453 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
454 AT_DATA([flows.txt], [dnl
455 in_port=90                 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
456 in_port=91                 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
457 in_port=92                 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
458 in_port=93                 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
459
460 in_port=2                  actions=load:0x000db000->NXM_NX_REG0[[]]
461 in_port=3                  actions=load:0xdea->NXM_NX_REG0[[20..31]]
462 in_port=4                  actions=load:0xeef->NXM_NX_REG0[[0..11]]
463 in_port=5                  actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
464 in_port=6                  actions=load:0x22222222->NXM_NX_REG2[[]]
465 in_port=7                  actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
466 in_port=8                  actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
467 in_port=9,reg0=0xdeadbeef  actions=output:20
468 in_port=10,reg1=0xdeadbeef actions=output:21
469 in_port=11,reg2=0xeef22dea actions=output:22
470
471 dnl Sanilty check all registers
472 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
473 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
474 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
475 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
476
477 ])
478 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
479 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])
480 AT_CHECK([tail -1 stdout], [0],
481   [Datapath actions: 20,21,22,33
482 ])
483 OVS_VSWITCHD_STOP
484 AT_CLEANUP
485
486 AT_SETUP([ofproto-dpif - push-pop])
487 OVS_VSWITCHD_START
488 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
489 AT_DATA([flows.txt], [dnl
490 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
491 in_port=2            actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
492 in_port=3            actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
493 in_port=4            actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
494 in_port=5            actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
495
496 ])
497 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
498 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])
499 AT_CHECK([tail -1 stdout], [0],
500   [Datapath actions: 33,22,21,20
501 ])
502 OVS_VSWITCHD_STOP
503 AT_CLEANUP
504
505 AT_SETUP([ofproto-dpif - output])
506 OVS_VSWITCHD_START
507 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
508 AT_DATA([flows.txt], [dnl
509 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
510 in_port=2 actions=output:9
511 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
512 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
513 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
514 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
515 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
516 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
517 ])
518 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
519 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])
520 AT_CHECK([tail -1 stdout], [0],
521   [Datapath actions: 9,55,10,55,66,11,77,88,9,1
522 ])
523 OVS_VSWITCHD_STOP
524 AT_CLEANUP
525
526 AT_SETUP([ofproto-dpif - dec_ttl])
527 OVS_VSWITCHD_START
528 ADD_OF_PORTS([br0], [1], [2], [3], [4])
529 AT_DATA([flows.txt], [dnl
530 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
531 table=1 in_port=1 action=dec_ttl,output:3
532 ])
533 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
534 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])
535 AT_CHECK([tail -4 stdout], [0],
536   [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=2
537 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
538 This flow is handled by the userspace slow path because it:
539         - Sends "packet-in" messages to the OpenFlow controller.
540 ])
541 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])
542 AT_CHECK([tail -2 stdout], [0],
543   [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=3
544 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
545 ])
546 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])
547 AT_CHECK([tail -2 stdout], [0],
548   [Megaflow: recirc_id=0,skb_priority=0,ipv6,in_port=1,ipv6_src=::1,ipv6_dst=::2,ipv6_label=0x00000,nw_proto=10,nw_tos=112,nw_ecn=0,nw_ttl=128
549 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
550 ])
551
552 AT_CAPTURE_FILE([ofctl_monitor.log])
553 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
554 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])
555 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
556 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
557 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
558 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
559 ])
560 OVS_VSWITCHD_STOP
561 AT_CLEANUP
562
563 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
564 dnl buffer to be resized just before pushing the id of the dec_ttl action.
565 dnl Thus the implementation must account for this by using the
566 dnl reallocated buffer rather than the original buffer.
567 dnl
568 dnl A number of similar rules are added to try and exercise
569 dnl xrealloc sufficiently that it returns a different base pointer
570 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
571 OVS_VSWITCHD_START
572 ADD_OF_PORTS([br0], [1])
573 (for i in `seq 0 255`; do
574   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
575  done) > flows.txt
576 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
577 OVS_VSWITCHD_STOP
578 AT_CLEANUP
579
580 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
581 dnl buffer to be resized just before pushing the id of the dec_ttl action.
582 dnl Thus the implementation must account for this by using the
583 dnl reallocated buffer rather than the original buffer.
584 dnl
585 dnl A number of similar rules are added to try and exercise
586 dnl xrealloc sufficiently that it returns a different base pointer
587 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
588 OVS_VSWITCHD_START
589 ADD_OF_PORTS([br0], [1])
590 (for i in `seq 0 255`; do
591   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
592  done) > flows.txt
593 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
594 OVS_VSWITCHD_STOP
595 AT_CLEANUP
596
597 dnl A note action at offset 24 in ofpacts will cause the ofpacts
598 dnl buffer to be resized just before pushing the id of the dec_ttl action.
599 dnl Thus the implementation must account for this by using the
600 dnl reallocated buffer rather than the original buffer.
601 dnl
602 dnl A number of similar rules are added to try and exercise
603 dnl xrealloc sufficiently that it returns a different base pointer
604 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
605 OVS_VSWITCHD_START
606 ADD_OF_PORTS([br0], [1])
607 (for i in `seq 0 255`; do
608   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
609  done) > flows.txt
610 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
611 OVS_VSWITCHD_STOP
612 AT_CLEANUP
613
614 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
615 OVS_VSWITCHD_START
616 ADD_OF_PORTS([br0], [1], [2])
617
618 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
619
620 # "in_port" defaults to OFPP_NONE if it's not specified.
621 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"
622 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
623 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
624 1
625 2
626 100
627 ])
628
629 OVS_VSWITCHD_STOP
630 AT_CLEANUP
631
632 AT_SETUP([ofproto-dpif - DSCP])
633 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
634 ADD_OF_PORTS([br0], [9])
635 AT_DATA([flows.txt], [dnl
636 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
637 ])
638 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
639 AT_CHECK([ovs-vsctl -- \
640         set Port p1 qos=@newqos --\
641         --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
642         --id=@q1 create Queue dscp=1 --\
643         --id=@q2 create Queue dscp=2], [0], [ignore])
644 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])
645 AT_CHECK([tail -2 stdout], [0],
646   [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=9,nw_src=1.1.1.1,nw_dst=2.2.2.2,nw_tos=252,nw_ecn=3,nw_ttl=128
647 Datapath actions: dnl
648 100,dnl
649 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
650 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
651 1,dnl
652 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
653 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
654 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
655 100
656 ])
657 OVS_VSWITCHD_STOP
658 AT_CLEANUP
659
660 AT_SETUP([ofproto-dpif - output/flood flags])
661 OVS_VSWITCHD_START
662 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
663
664 AT_DATA([flows.txt], [dnl
665 in_port=local actions=local,flood
666 in_port=1 actions=flood
667 in_port=2 actions=all
668 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
669 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
670 ])
671 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
672 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
673 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
674
675 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])
676 AT_CHECK([tail -1 stdout \
677 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
678 1
679 2
680 3
681 4
682 7
683 ])
684
685 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])
686 AT_CHECK([tail -1 stdout \
687 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
688 100
689 2
690 3
691 4
692 7
693 ])
694
695 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])
696 AT_CHECK([tail -1 stdout \
697 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
698 1
699 100
700 3
701 4
702 6
703 7
704 ])
705
706 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])
707 AT_CHECK([tail -1 stdout], [0],
708   [Datapath actions: 100,1,2,4,6,7
709 ])
710
711 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])
712 AT_CHECK([tail -1 stdout], [0],
713   [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
714 ])
715 OVS_VSWITCHD_STOP
716 AT_CLEANUP
717
718 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
719 OVS_VSWITCHD_START([dnl
720    add-port br0 p1 -- set Interface p1 type=dummy
721 ])
722 ON_EXIT([kill `cat ovs-ofctl.pid`])
723
724 AT_CAPTURE_FILE([ofctl_monitor.log])
725
726 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
727
728 for i in 1 2 3 ; do
729     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)'
730 done
731 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
732 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
733 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
734 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
735 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
736 dnl
737 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
738 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
739 dnl
740 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
741 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
742 ])
743
744 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
745 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
746 NXST_FLOW reply:
747 ])
748
749 OVS_VSWITCHD_STOP
750 AT_CLEANUP
751
752 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
753 OVS_VSWITCHD_START([dnl
754    add-port br0 p1 -- set Interface p1 type=dummy
755 ])
756 ON_EXIT([kill `cat ovs-ofctl.pid`])
757
758 AT_CAPTURE_FILE([ofctl_monitor.log])
759 AT_CHECK([ovs-ofctl del-flows br0])
760
761 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
762
763 dnl Test that missed packets are droped
764 for i in 1 2 3 ; do
765     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)'
766 done
767 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
768
769 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
770 ])
771
772 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
773 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
774 OFPST_FLOW reply (OF1.3):
775 ])
776
777 OVS_VSWITCHD_STOP
778 AT_CLEANUP
779
780 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
781 OVS_VSWITCHD_START([dnl
782    add-port br0 p1 -- set Interface p1 type=dummy
783 ])
784 ON_EXIT([kill `cat ovs-ofctl.pid`])
785
786 AT_CAPTURE_FILE([ofctl_monitor.log])
787 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
788
789 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
790
791 for i in 1 2 3 ; do
792     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)'
793 done
794 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
795 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
796 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
797 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
798 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
799 dnl
800 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
801 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
802 dnl
803 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
804 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9,tcp_flags=0x010 tcp_csum:0
805 ])
806
807 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
808 sleep 1  # wait for revalidator to update stats
809 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
810  n_packets=3, n_bytes=180, actions=goto_table:1
811 OFPST_FLOW reply (OF1.2):
812 ])
813
814 OVS_VSWITCHD_STOP
815 AT_CLEANUP
816
817 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
818 OVS_VSWITCHD_START([dnl
819    add-port br0 p1 -- set Interface p1 type=dummy
820 ])
821 ON_EXIT([kill `cat ovs-ofctl.pid`])
822
823 AT_CAPTURE_FILE([ofctl_monitor.log])
824 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
825
826 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
827
828 for i in 1 2 3 ; do
829     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)'
830 done
831
832 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
833 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
834 ])
835
836 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
837 sleep 1  # wait for revalidator to update stats
838 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
839  n_packets=3, n_bytes=180, actions=resubmit(1,1)
840 OFPST_FLOW reply (OF1.2):
841 ])
842
843 OVS_VSWITCHD_STOP
844 AT_CLEANUP
845
846 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
847 OVS_VSWITCHD_START([dnl
848    add-port br0 p1 -- set Interface p1 type=dummy
849 ])
850 ON_EXIT([kill `cat ovs-ofctl.pid`])
851
852 AT_CAPTURE_FILE([ofctl_monitor.log])
853 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
854 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
855
856 dnl Miss table 0, Hit table 1
857 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
858
859 for i in 1 2 3 ; do
860     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)'
861 done
862 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
863 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
864
865 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
866 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
867 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
868 dnl
869 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
870 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
871 dnl
872 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
873 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
874 ])
875
876 dnl Hit table 0, Miss all other tables, sent to controller
877 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
878
879 for i in 1 2 3 ; do
880     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)'
881 done
882 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
883 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
884
885 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
886 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
887 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
888 dnl
889 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
890 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
891 dnl
892 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
893 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
894 ])
895
896 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
897 sleep 1  # wait for revalidator to update stats
898 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
899  table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
900 OFPST_FLOW reply (OF1.2):
901 ])
902
903 OVS_VSWITCHD_STOP
904 AT_CLEANUP
905
906 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
907 OVS_VSWITCHD_START([dnl
908    add-port br0 p1 -- set Interface p1 type=dummy
909 ])
910 ON_EXIT([kill `cat ovs-ofctl.pid`])
911
912 AT_CAPTURE_FILE([ofctl_monitor.log])
913 AT_DATA([flows.txt], [dnl
914 table=0 actions=goto_table(1)
915 table=2 dl_src=10:11:11:11:11:11 actions=controller
916 ])
917 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
918 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
919
920 dnl Hit table 0, Miss table 1, Hit table 2
921 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
922
923 for i in 1 2 3 ; do
924     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)'
925 done
926 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
927 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
928
929 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
930 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
931 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
932 dnl
933 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
934 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
935 dnl
936 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
937 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
938 ])
939
940 dnl Hit table 1, Miss all other tables, sent to controller
941 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
942
943 for i in 1 2 3 ; do
944     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 done
946 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
947 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
948
949 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
950 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
951 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
952 dnl
953 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
954 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
955 dnl
956 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
957 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
958 ])
959
960 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
961 sleep 1  # wait for revalidator to update stats
962 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
963  n_packets=6, n_bytes=360, actions=goto_table:1
964  table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
965 OFPST_FLOW reply (OF1.2):
966 ])
967
968 OVS_VSWITCHD_STOP
969 AT_CLEANUP
970
971 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
972 OVS_VSWITCHD_START([dnl
973    add-port br0 p1 -- set Interface p1 type=dummy
974 ])
975 ON_EXIT([kill `cat ovs-ofctl.pid`])
976
977 AT_CAPTURE_FILE([ofctl_monitor.log])
978 AT_DATA([flows.txt], [dnl
979 table=0 actions=resubmit(1,1)
980 table=2 dl_src=10:11:11:11:11:11 actions=controller
981 ])
982 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
983 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
984
985 dnl Hit table 0, Miss table 1, Dropped
986 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
987
988 for i in 1 2 3 ; do
989     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)'
990 done
991 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
992
993 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
994 ])
995
996 dnl Hit table 1, Dropped
997 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
998
999 for i in 1 2 3 ; do
1000     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)'
1001 done
1002 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1003
1004 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1005 ])
1006
1007 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1008 sleep 1  # wait for revalidator to update stats
1009 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1010  n_packets=6, n_bytes=360, actions=resubmit(1,1)
1011  table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1012 OFPST_FLOW reply (OF1.2):
1013 ])
1014
1015 OVS_VSWITCHD_STOP
1016 AT_CLEANUP
1017
1018 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
1019 OVS_VSWITCHD_START([dnl
1020    add-port br0 p1 -- set Interface p1 type=dummy
1021 ])
1022 ON_EXIT([kill `cat ovs-ofctl.pid`])
1023
1024 AT_CAPTURE_FILE([ofctl_monitor.log])
1025 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1026
1027 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1028
1029 dnl Test that missed packets are droped
1030 for i in 1 2 3 ; do
1031     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)'
1032 done
1033 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1034
1035 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1036 ])
1037
1038 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1039 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1040 NXST_FLOW reply:
1041 ])
1042
1043 OVS_VSWITCHD_STOP
1044 AT_CLEANUP
1045
1046 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
1047 OVS_VSWITCHD_START([dnl
1048    add-port br0 p1 -- set Interface p1 type=dummy
1049 ])
1050 ON_EXIT([kill `cat ovs-ofctl.pid`])
1051
1052 AT_CAPTURE_FILE([ofctl_monitor.log])
1053 AT_CHECK([ovs-ofctl del-flows br0])
1054 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1055 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1056
1057 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1058
1059 dnl Test that missed packets are droped
1060 for i in 1 2 3 ; do
1061     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)'
1062 done
1063 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1064
1065 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1066 ])
1067
1068 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1069 sleep 1  # wait for revalidator to update stats
1070 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1071  n_packets=3, n_bytes=180, actions=goto_table:1
1072 OFPST_FLOW reply (OF1.2):
1073 ])
1074
1075 OVS_VSWITCHD_STOP
1076 AT_CLEANUP
1077
1078 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1079 OVS_VSWITCHD_START([dnl
1080    add-port br0 p1 -- set Interface p1 type=dummy
1081 ])
1082 ON_EXIT([kill `cat ovs-ofctl.pid`])
1083
1084 AT_CAPTURE_FILE([ofctl_monitor.log])
1085 AT_CHECK([ovs-ofctl del-flows br0])
1086 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1087 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1088
1089 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1090
1091 dnl Test that missed packets are droped
1092 for i in 1 2 3 ; do
1093     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)'
1094 done
1095 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1096
1097 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1098 ])
1099
1100 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1101 sleep 1  # wait for revalidator to update stats
1102 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1103  n_packets=3, n_bytes=180, actions=resubmit(1,1)
1104 OFPST_FLOW reply (OF1.2):
1105 ])
1106
1107 OVS_VSWITCHD_STOP
1108 AT_CLEANUP
1109
1110 AT_SETUP([ofproto-dpif - controller])
1111 OVS_VSWITCHD_START([dnl
1112    add-port br0 p1 -- set Interface p1 type=dummy
1113 ])
1114 ON_EXIT([kill `cat ovs-ofctl.pid`])
1115
1116 AT_CAPTURE_FILE([ofctl_monitor.log])
1117 AT_DATA([flows.txt], [dnl
1118 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1119 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1120 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1121
1122 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1123 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)
1124 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)
1125 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1126 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)
1127 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1128 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1129 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1130 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
1131 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
1132 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
1133 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
1134 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
1135 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
1136 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
1137 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
1138 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1139 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1140 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
1141 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
1142 ])
1143 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1144
1145 dnl Flow miss.
1146 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1147
1148 for i in 1 2 3 ; do
1149     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)'
1150 done
1151 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1152 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1153
1154 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1155 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1156 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
1157 dnl
1158 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1159 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
1160 dnl
1161 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1162 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
1163 ])
1164
1165 dnl Singleton controller action.
1166 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1167
1168 for i in 1 2 3 ; do
1169     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)'
1170 done
1171 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1172 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1173
1174 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1175 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1176 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
1177 dnl
1178 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1179 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
1180 dnl
1181 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1182 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
1183 ])
1184
1185 dnl Modified controller action.
1186 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1187
1188 for i in 1 2 3 ; do
1189     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)'
1190 done
1191 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1192 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1193
1194 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1195 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1196 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
1197 dnl
1198 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1199 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
1200 dnl
1201 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1202 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
1203 ])
1204
1205 dnl Modified VLAN controller action.
1206 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1207
1208 for i in 1 2 3; do
1209     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)'
1210 done
1211 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1212 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1213
1214 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1215 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1216 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
1217 dnl
1218 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1219 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
1220 dnl
1221 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1222 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
1223 ])
1224
1225 dnl Modified MPLS controller action.
1226 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1227
1228 for i in 1 2 3; do
1229     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)'
1230 done
1231 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1232 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1233
1234 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1235 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1236 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
1237 dnl
1238 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1239 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
1240 dnl
1241 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1242 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
1243 ])
1244
1245 dnl Modified MPLS controller action.
1246 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1247
1248 for i in 1 2 3; do
1249     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)'
1250 done
1251 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1252 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1253
1254 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1255 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1256 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
1257 dnl
1258 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1259 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
1260 dnl
1261 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1262 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
1263 ])
1264
1265 dnl Modified MPLS controller action.
1266 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1267
1268 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)
1269
1270 for i in 1 2 3; do
1271     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)'
1272 done
1273 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1274 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1275
1276 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1277 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1278 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1279 dnl
1280 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1281 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=46912
1282 dnl
1283 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1284 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
1285 ])
1286
1287 dnl Modified MPLS controller action.
1288 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1289
1290 for i in 1 2 3; do
1291     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))'
1292 done
1293 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1294 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1295
1296 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1297 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1298 mpls,metadata=0,in_port=0,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
1299 dnl
1300 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1301 mpls,metadata=0,in_port=0,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
1302 dnl
1303 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1304 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
1305 ])
1306
1307 dnl Modified MPLS controller action.
1308 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1309
1310 for i in 1 2 3; do
1311     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)'
1312 done
1313 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1314 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1315
1316 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1317 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1318 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
1319 dnl
1320 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1321 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
1322 dnl
1323 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1324 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
1325 ])
1326
1327 dnl Modified MPLS controller action.
1328 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1329
1330 for i in 1 2 3; do
1331     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)'
1332 done
1333 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1334 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1335
1336 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1337 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1338 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
1339 dnl
1340 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1341 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
1342 dnl
1343 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1344 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
1345 ])
1346
1347 dnl Modified MPLS controller action.
1348 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1349
1350 for i in 1 2 3; do
1351     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)'
1352 done
1353 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1354 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1355
1356 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1357 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1358 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
1359 dnl
1360 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1361 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
1362 dnl
1363 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1364 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
1365 ])
1366
1367 dnl Modified MPLS controller action.
1368 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1369
1370 for i in 1 2 3; do
1371     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)'
1372 done
1373 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1374 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1375
1376 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1377 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1378 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1379 dnl
1380 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1381 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1382 dnl
1383 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1384 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
1385 ])
1386
1387 dnl Modified MPLS actions.
1388 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1389
1390 for i in 1 2 3; do
1391     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)'
1392 done
1393 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1394 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1395
1396 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1397 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1398 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
1399 dnl
1400 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1401 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
1402 dnl
1403 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1404 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
1405 ])
1406
1407 dnl Modified MPLS ipv6 controller action.
1408 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1409
1410 for i in 1 2 3; do
1411     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)'
1412 done
1413 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1414 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1415
1416 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1417 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1418 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
1419 dnl
1420 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1421 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
1422 dnl
1423 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1424 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
1425 ])
1426
1427
1428 dnl Modified MPLS pop action.
1429 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1430 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)
1431 dnl             (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1432
1433 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1434
1435 for i in 1 2 3; do
1436     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'
1437 done
1438 #for i in 2 3; do
1439 #    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)'
1440 #done
1441 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1442 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1443
1444 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1445 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1446 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
1447 dnl
1448 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1449 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
1450 dnl
1451 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1452 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
1453 ])
1454
1455 dnl Checksum TCP.
1456 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1457
1458 for i in 1 ; do
1459     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)'
1460 done
1461 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1462 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1463
1464 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1465 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1466 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
1467 dnl
1468 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1469 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
1470 dnl
1471 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)
1472 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
1473 dnl
1474 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)
1475 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
1476 dnl
1477 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)
1478 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
1479 dnl
1480 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)
1481 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
1482 dnl
1483 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)
1484 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
1485 dnl
1486 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)
1487 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
1488 dnl
1489 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)
1490 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
1491 ])
1492
1493 dnl Checksum UDP.
1494 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1495
1496 for i in 1 ; do
1497     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'
1498 done
1499 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1500 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1501
1502 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1503 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1504 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
1505 dnl
1506 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1507 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
1508 dnl
1509 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)
1510 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
1511 dnl
1512 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)
1513 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
1514 dnl
1515 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)
1516 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
1517 dnl
1518 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)
1519 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
1520 dnl
1521 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)
1522 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
1523 dnl
1524 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)
1525 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
1526 dnl
1527 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)
1528 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
1529 ])
1530
1531 dnl Modified ARP controller action.
1532 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1533
1534 for i in 1 2 3; do
1535     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)'
1536 done
1537
1538 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 9])
1539 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1540 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1541 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1542 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
1543 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1544 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
1545 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1546 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
1547 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1548 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
1549 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1550 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
1551 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1552 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
1553 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1554 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
1555 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1556 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
1557 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1558 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
1559 ])
1560
1561 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1562
1563 dnl Checksum SCTP.
1564 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1565
1566 for i in 1 ; do
1567     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'
1568 done
1569
1570 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1571 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1572 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1573 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1574 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
1575 dnl
1576 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1577 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
1578 dnl
1579 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)
1580 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
1581 dnl
1582 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)
1583 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
1584 dnl
1585 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)
1586 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
1587 dnl
1588 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)
1589 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
1590 dnl
1591 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)
1592 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
1593 dnl
1594 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)
1595 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
1596 dnl
1597 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)
1598 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
1599 ])
1600
1601 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1602  cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1603  cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1604  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)
1605  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)
1606  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)
1607  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)
1608  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)
1609  cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1610  cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1611  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
1612  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
1613  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
1614  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
1615  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
1616  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
1617  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
1618  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
1619  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
1620  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
1621  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
1622  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
1623  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1624  n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1625 NXST_FLOW reply:
1626 ])
1627
1628 OVS_VSWITCHD_STOP
1629 AT_CLEANUP
1630
1631
1632 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1633 OVS_VSWITCHD_START([dnl
1634    add-port br0 p1 -- set Interface p1 type=dummy
1635 ])
1636 ON_EXIT([kill `cat ovs-ofctl.pid`])
1637
1638 AT_CAPTURE_FILE([ofctl_monitor.log])
1639 # A table-miss flow has priority 0 and no match
1640 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1641
1642 dnl Singleton controller action.
1643 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1644
1645 for i in 1 2 3 ; do
1646     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)'
1647 done
1648 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1649 ovs-appctl -t ovs-ofctl exit
1650
1651 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1652 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1653 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
1654 dnl
1655 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1656 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
1657 dnl
1658 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1659 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
1660 ])
1661
1662 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1663
1664 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1665  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1666 NXST_FLOW reply:
1667 ])
1668
1669 OVS_VSWITCHD_STOP
1670 AT_CLEANUP
1671
1672
1673 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1674 OVS_VSWITCHD_START([dnl
1675    add-port br0 p1 -- set Interface p1 type=dummy
1676 ])
1677 ON_EXIT([kill `cat ovs-ofctl.pid`])
1678
1679 AT_CAPTURE_FILE([ofctl_monitor.log])
1680 # A table-miss flow has priority 0 and no match
1681 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1682
1683 dnl Singleton controller action.
1684 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1685
1686 for i in 1 2 3 ; do
1687     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)'
1688 done
1689 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1690 ovs-appctl -t ovs-ofctl exit
1691
1692 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1693
1694 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1695 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1696 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
1697 dnl
1698 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1699 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
1700 dnl
1701 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1702 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
1703 ])
1704
1705 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1706
1707 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1708  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1709 OFPST_FLOW reply (OF1.3):
1710 ])
1711
1712 OVS_VSWITCHD_STOP
1713 AT_CLEANUP
1714
1715 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1716 OVS_VSWITCHD_START
1717 ADD_OF_PORTS([br0], [1], [2])
1718
1719 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1720 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'
1721
1722 # Input some packets that should follow the arp modification slow-path.
1723 for i in 1 2 3; do
1724     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)'
1725 done
1726 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1727
1728 # Check the packets that were output.
1729 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1730 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
1731 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
1732 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
1733 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
1734 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
1735 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
1736 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
1737 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
1738 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
1739 ])
1740
1741 OVS_VSWITCHD_STOP
1742 AT_CLEANUP
1743
1744 AT_SETUP([ofproto-dpif - VLAN handling])
1745 OVS_VSWITCHD_START(
1746   [set Bridge br0 fail-mode=standalone -- \
1747    add-port br0 p1                                  trunks=10,12 -- \
1748    add-port br0 p2                           tag=10              -- \
1749    add-port br0 p3                           tag=12              \
1750                    other-config:priority-tags=true               -- \
1751    add-port br0 p4                           tag=12              -- \
1752    add-port br0 p5 vlan_mode=native-tagged   tag=10              -- \
1753    add-port br0 p6 vlan_mode=native-tagged   tag=10 trunks=10,12 -- \
1754    add-port br0 p7 vlan_mode=native-untagged tag=12              -- \
1755    add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1756                    other-config:priority-tags=true               -- \
1757    set Interface p1 type=dummy -- \
1758    set Interface p2 type=dummy -- \
1759    set Interface p3 type=dummy -- \
1760    set Interface p4 type=dummy -- \
1761    set Interface p5 type=dummy -- \
1762    set Interface p6 type=dummy -- \
1763    set Interface p7 type=dummy -- \
1764    set Interface p8 type=dummy --])
1765
1766 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1767 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1768 dnl actions.
1769 for tuple in \
1770         "100 none 0 drop" \
1771         "100 0    0 drop" \
1772         "100 0    1 drop" \
1773         "100 10   0 1,5,6,7,8,pop_vlan,2" \
1774         "100 10   1 1,5,6,7,8,pop_vlan,2" \
1775         "100 11   0 5,7" \
1776         "100 11   1 5,7" \
1777         "100 12   0 1,5,6,pop_vlan,3,4,7,8" \
1778         "100 12   1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1779         "1  none 0 drop" \
1780         "1  0    0 drop" \
1781         "1  0    1 drop" \
1782         "1  10   0 5,6,7,8,100,pop_vlan,2" \
1783         "1  10   1 5,6,7,8,100,pop_vlan,2" \
1784         "1  11   0 drop" \
1785         "1  11   1 drop" \
1786         "1  12   0 5,6,100,pop_vlan,3,4,7,8" \
1787         "1  12   1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1788         "2  none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1789         "2  0    0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1790         "2  0    1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1791         "2  10   0 drop" \
1792         "2  10   1 drop" \
1793         "2  11   0 drop" \
1794         "2  11   1 drop" \
1795         "2  12   0 drop" \
1796         "2  12   1 drop" \
1797         "3  none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1798         "3  0    0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1799         "3  0    1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1800         "3  10   0 drop" \
1801         "3  10   1 drop" \
1802         "3  11   0 drop" \
1803         "3  11   1 drop" \
1804         "3  12   0 drop" \
1805         "3  12   1 drop" \
1806         "4  none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1807         "4  0    0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1808         "4  0    1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1809         "4  10   0 drop" \
1810         "4  10   1 drop" \
1811         "4  11   0 drop" \
1812         "4  11   1 drop" \
1813         "4  12   0 drop" \
1814         "4  12   1 drop" \
1815         "5  none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1816         "5  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1817         "5  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1818         "5  10   0 1,6,7,8,100,pop_vlan,2" \
1819         "5  10   1 1,6,7,8,100,pop_vlan,2" \
1820         "5  11   0 7,100" \
1821         "5  11   1 7,100" \
1822         "5  12   0 1,6,100,pop_vlan,3,4,7,8" \
1823         "5  12   1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1824         "6  none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1825         "6  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1826         "6  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1827         "6  10   0 1,5,7,8,100,pop_vlan,2" \
1828         "6  10   1 1,5,7,8,100,pop_vlan,2" \
1829         "6  11   0 drop" \
1830         "6  11   1 drop" \
1831         "6  12   0 1,5,100,pop_vlan,3,4,7,8" \
1832         "6  12   1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1833         "7  none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1834         "7  0    0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1835         "7  0    1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1836         "7  10   0 1,5,6,8,100,pop_vlan,2" \
1837         "7  10   1 1,5,6,8,100,pop_vlan,2" \
1838         "7  11   0 5,100" \
1839         "7  11   1 5,100" \
1840         "7  12   0 1,5,6,100,pop_vlan,3,4,8" \
1841         "7  12   1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1842         "8  none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1843         "8  0    0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1844         "8  0    1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1845         "8  10   0 1,5,6,7,100,pop_vlan,2" \
1846         "8  10   1 1,5,6,7,100,pop_vlan,2" \
1847         "8  11   0 drop" \
1848         "8  11   1 drop" \
1849         "8  12   0 1,5,6,100,pop_vlan,3,4,7" \
1850         "8  12   1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1851 do
1852   set $tuple
1853   in_port=$1
1854   vlan=$2
1855   pcp=$3
1856   expected=$4
1857
1858   if test $vlan = none; then
1859     flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1860   else
1861     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))"
1862   fi
1863
1864   echo "----------------------------------------------------------------------"
1865   echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1866
1867   AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1868   actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1869
1870   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1871   mv stdout expout
1872   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1873 done
1874
1875 OVS_VSWITCHD_STOP
1876 AT_CLEANUP
1877
1878 AT_SETUP([ofproto-dpif - MPLS handling])
1879 OVS_VSWITCHD_START([dnl
1880    add-port br0 p1 -- set Interface p1 type=dummy
1881 ])
1882 ON_EXIT([kill `cat ovs-ofctl.pid`])
1883
1884 AT_CAPTURE_FILE([ofctl_monitor.log])
1885 AT_DATA([flows.txt], [dnl
1886 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1887 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1888 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1889 ])
1890 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1891
1892 dnl In this test, we push an MPLS tag to an ethernet packet.
1893 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1894
1895 for i in 1 2 3; do
1896     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)'
1897 done
1898 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1899 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1900
1901 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1902 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1903 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
1904 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1905 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1906 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1907 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1908 dnl
1909 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1910 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
1911 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1912 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1913 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1914 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1915 dnl
1916 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1917 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
1918 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1919 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1920 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1921 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1922 ])
1923
1924 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1925 dnl copied exactly, except for the BOS bit.
1926 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1927
1928 for i in 1 2 3; do
1929     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)'
1930 done
1931 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1932 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1933
1934 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1935 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1936 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
1937 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1938 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1939 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1940 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1941 dnl
1942 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1943 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
1944 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1945 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1946 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1947 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1948 dnl
1949 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1950 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
1951 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1952 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1953 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1954 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1955 ])
1956
1957 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1958 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1959 dnl to the MPLS ethertype of the MPLS push action which differs to that
1960 dnl of the input packet.
1961 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1962
1963 for i in 1 2 3; do
1964     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)'
1965 done
1966 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1967 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1968
1969 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1970 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1971 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
1972 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1973 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1974 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1975 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1976 dnl
1977 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1978 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
1979 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1980 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1981 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1982 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1983 dnl
1984 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1985 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
1986 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1987 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1988 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1989 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1990 ])
1991
1992 OVS_VSWITCHD_STOP
1993 AT_CLEANUP
1994
1995 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1996 OVS_VSWITCHD_START([dnl
1997    add-port br0 p1 -- set Interface p1 type=dummy
1998 ])
1999 ON_EXIT([kill `cat ovs-ofctl.pid`])
2000
2001 AT_CAPTURE_FILE([ofctl_monitor.log])
2002 AT_DATA([flows.txt], [dnl
2003 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
2004 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
2005 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
2006 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
2007 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
2008 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
2009 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
2010 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
2011 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
2012 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
2013 ])
2014 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
2015
2016 dnl Modified MPLS controller action.
2017 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2018 dnl both of these in the final flow
2019 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2020
2021 for i in 1 2 3; do
2022     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)'
2023 done
2024 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2025 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2026
2027 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2028 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2029 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
2030 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2031 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2032 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2033 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2034 00000040  00 00 00 00
2035 dnl
2036 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2037 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
2038 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2039 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2040 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2041 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2042 00000040  00 00 00 00
2043 dnl
2044 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2045 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
2046 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
2047 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2048 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2049 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2050 00000040  00 00 00 00
2051 ])
2052
2053 dnl Modified MPLS controller action.
2054 dnl In this test, the input packet in vlan-tagged, which should be stripped
2055 dnl before we push the MPLS and VLAN tags.
2056 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2057
2058 for i in 1 2 3; do
2059     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))'
2060 done
2061 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2062 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2063
2064 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2065 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2066 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
2067 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2068 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2069 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2070 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2071 dnl
2072 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2073 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
2074 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2075 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2076 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2077 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2078 dnl
2079 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2080 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
2081 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2082 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2083 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2084 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2085 ])
2086
2087 dnl Modified MPLS controller action.
2088 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2089 dnl both of these in the final flow
2090 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2091
2092 for i in 1 2 3; do
2093     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)'
2094 done
2095 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2096 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2097
2098 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2099 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2100 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
2101 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2102 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2103 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2104 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2105 00000040  00 00 00 00
2106 dnl
2107 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2108 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
2109 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2110 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2111 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2112 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2113 00000040  00 00 00 00
2114 dnl
2115 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2116 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
2117 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2118 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2119 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2120 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2121 00000040  00 00 00 00
2122 ])
2123
2124 dnl Modified MPLS controller action.
2125 dnl In this test, the input packet in vlan-tagged, which should be stripped
2126 dnl before we push the MPLS and VLAN tags.
2127 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2128
2129 for i in 1 2 3; do
2130     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))'
2131 done
2132 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2133 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2134
2135 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2136 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2137 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
2138 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2139 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2140 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2141 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2142 dnl
2143 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2144 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
2145 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2146 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2147 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2148 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2149 dnl
2150 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2151 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
2152 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2153 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2154 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2155 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2156 ])
2157
2158 dnl Modified MPLS controller action.
2159 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2160 dnl actions are reordered, so we see both of these in the final flow.
2161 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2162
2163 for i in 1 2 3; do
2164     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)'
2165 done
2166 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2167 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2168
2169 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2170 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2171 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
2172 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2173 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2174 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2175 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2176 00000040  00 00 00 00
2177 dnl
2178 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2179 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
2180 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2181 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2182 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2183 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2184 00000040  00 00 00 00
2185 dnl
2186 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2187 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
2188 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2189 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2190 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2191 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2192 00000040  00 00 00 00
2193 ])
2194
2195 dnl Modified MPLS controller action.
2196 dnl In this test, the input packet in vlan-tagged, which should be stripped
2197 dnl before we push the MPLS and VLAN tags.
2198 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2199
2200 for i in 1 2 3; do
2201     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))'
2202 done
2203 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2204 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2205
2206 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2207 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2208 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
2209 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2210 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2211 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2212 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2213 dnl
2214 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2215 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
2216 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2217 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2218 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2219 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2220 dnl
2221 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2222 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2223 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2224 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2225 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2226 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2227 ])
2228
2229 dnl Modified MPLS controller action.
2230 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2231 dnl actions are reordered, so we see both of these in the final flow.
2232 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2233
2234 for i in 1 2 3; do
2235     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)'
2236 done
2237 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2238 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2239
2240 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2241 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2242 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
2243 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2244 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2245 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2246 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2247 00000040  00 00 00 00
2248 dnl
2249 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2250 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
2251 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2252 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2253 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2254 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2255 00000040  00 00 00 00
2256 dnl
2257 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2258 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
2259 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2260 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2261 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2262 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2263 00000040  00 00 00 00
2264 ])
2265
2266 dnl Modified MPLS controller action.
2267 dnl In this test, the input packet in vlan-tagged, which should be stripped
2268 dnl before we push the MPLS and VLAN tags.
2269 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2270
2271 for i in 1 2 3; do
2272     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))'
2273 done
2274 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2275 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2276
2277 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2278 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2279 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2280 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2281 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2282 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2283 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2284 dnl
2285 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2286 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2287 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2288 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2289 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2290 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2291 dnl
2292 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2293 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
2294 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2295 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2296 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2297 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2298 ])
2299
2300 dnl Modified MPLS controller action.
2301 dnl In this test, the input packet in vlan-tagged, which should be stripped
2302 dnl before we push the MPLS and VLAN tags.
2303 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2304
2305 for i in 1 2 3; do
2306     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))'
2307 done
2308 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2309 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2310
2311 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2312 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2313 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
2314 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2315 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2316 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2317 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2318 dnl
2319 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2320 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
2321 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2322 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2323 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2324 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2325 dnl
2326 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2327 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
2328 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2329 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2330 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2331 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2332 ])
2333
2334 dnl Modified MPLS controller action.
2335 dnl In this test, the input packet in vlan-tagged, which should be modified
2336 dnl before we push MPLS and VLAN tags.
2337 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2338
2339 for i in 1 2 3; do
2340     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))'
2341 done
2342 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2343 ovs-appctl -t ovs-ofctl exit
2344
2345 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2346 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2347 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
2348 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2349 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2350 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2351 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2352 dnl
2353 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2354 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
2355 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2356 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2357 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2358 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2359 dnl
2360 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2361 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
2362 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2363 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2364 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2365 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2366 ])
2367
2368 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2369 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2370  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
2371  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
2372  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
2373  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
2374  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
2375  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
2376  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
2377  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
2378  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
2379  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
2380 OFPST_FLOW reply (OF1.2):
2381 ])
2382
2383 OVS_VSWITCHD_STOP
2384 AT_CLEANUP
2385
2386 AT_SETUP([ofproto-dpif - fragment handling])
2387 OVS_VSWITCHD_START
2388 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2389 AT_DATA([flows.txt], [dnl
2390 priority=75 tcp ip_frag=no    tp_dst=80 actions=output:1
2391 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2392 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2393 priority=50 tcp ip_frag=no              actions=output:4
2394 priority=50 tcp ip_frag=first           actions=output:5
2395 priority=50 tcp ip_frag=later           actions=output:6
2396 ])
2397 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2398
2399 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"
2400 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2401 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2402 later_flow="$base_flow,frag=later)"
2403
2404     # mode    no  first  later
2405 for tuple in \
2406     'normal    1     5      6' \
2407     'drop      1  drop   drop' \
2408     'nx-match  1     2      6'
2409 do
2410   set $tuple
2411   mode=$1
2412   no=$2
2413   first=$3
2414   later=$4
2415
2416   AT_CHECK([ovs-ofctl set-frags br0 $mode])
2417   for type in no first later; do
2418     eval flow=\$${type}_flow exp_output=\$$type
2419     printf "\n%s\n" "----$mode $type-----"
2420     AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2421     : > expout
2422     if test $mode = drop && test $type != no; then
2423         echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2424     fi
2425     echo "Datapath actions: $exp_output" >> expout
2426     AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2427   done
2428 done
2429 OVS_VSWITCHD_STOP
2430 AT_CLEANUP
2431
2432 AT_SETUP([ofproto-dpif - exit])
2433 OVS_VSWITCHD_START
2434 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2435 AT_DATA([flows.txt], [dnl
2436 in_port=1 actions=output:10,exit,output:11
2437 in_port=2 actions=output:12,resubmit:1,output:12
2438 in_port=3 actions=output:13,resubmit:2,output:14
2439 ])
2440 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2441 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])
2442 AT_CHECK([tail -1 stdout], [0],
2443   [Datapath actions: 10
2444 ])
2445 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])
2446 AT_CHECK([tail -1 stdout], [0],
2447   [Datapath actions: 12,10
2448 ])
2449 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])
2450 AT_CHECK([tail -1 stdout], [0],
2451   [Datapath actions: 13,12,10
2452 ])
2453 OVS_VSWITCHD_STOP
2454 AT_CLEANUP
2455
2456
2457 AT_SETUP([ofproto-dpif - mirroring, select_all])
2458 OVS_VSWITCHD_START
2459 ADD_OF_PORTS([br0], 1, 2, 3)
2460 ovs-vsctl \
2461         set Bridge br0 mirrors=@m --\
2462         --id=@p3 get Port p3 --\
2463         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2464
2465 AT_DATA([flows.txt], [dnl
2466 in_port=1 actions=output:2
2467 in_port=2 actions=output:1
2468 ])
2469 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2470
2471 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)"
2472 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2473 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2474   [Datapath actions: 2,3
2475 ])
2476
2477 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)"
2478 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2479 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2480   [Datapath actions: 1,3
2481 ])
2482
2483 OVS_VSWITCHD_STOP
2484 AT_CLEANUP
2485
2486
2487 AT_SETUP([ofproto-dpif - mirroring, select_src])
2488 OVS_VSWITCHD_START
2489 ADD_OF_PORTS([br0], 1, 2, 3)
2490 ovs-vsctl \
2491         set Bridge br0 mirrors=@m --\
2492         --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2493         --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2494
2495 AT_DATA([flows.txt], [dnl
2496 in_port=1 actions=output:2
2497 in_port=2 actions=output:1
2498 ])
2499 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2500
2501 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)"
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
2505 ])
2506
2507 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)"
2508 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2509 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2510   [Datapath actions: 1
2511 ])
2512 OVS_VSWITCHD_STOP
2513 AT_CLEANUP
2514
2515 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2516 OVS_VSWITCHD_START
2517 ADD_OF_PORTS([br0], 1, 2)
2518 ovs-vsctl \
2519         set Bridge br0 mirrors=@m --\
2520         --id=@p2 get Port p2 --\
2521         --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2522
2523 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2524
2525 # "in_port" defaults to OFPP_NONE if it's not specified.
2526 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"
2527 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2528 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2529   [Datapath actions: 1,2
2530 ])
2531
2532 OVS_VSWITCHD_STOP
2533 AT_CLEANUP
2534
2535
2536 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2537 OVS_VSWITCHD_START
2538 ADD_OF_PORTS([br0], 1, 2, 3)
2539 ovs-vsctl \
2540         set Bridge br0 mirrors=@m --\
2541         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2542         --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2543
2544 AT_DATA([flows.txt], [dnl
2545 in_port=1 actions=output:2
2546 in_port=2 actions=output:1
2547 ])
2548 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2549
2550 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)"
2551 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2552 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2553   [Datapath actions: 2,3
2554 ])
2555
2556 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)"
2557 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2558 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2559   [Datapath actions: 1
2560 ])
2561
2562 OVS_VSWITCHD_STOP
2563 AT_CLEANUP
2564
2565
2566 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2567 OVS_VSWITCHD_START
2568 ADD_OF_PORTS([br0], 1, 2, 3)
2569 ovs-vsctl \
2570         set Bridge br0 mirrors=@m --\
2571         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2572         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2573
2574 AT_DATA([flows.txt], [dnl
2575 in_port=1, actions=output:2
2576 ])
2577 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2578
2579 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)"
2580 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2581 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2582   [Datapath actions: 2
2583 ])
2584
2585 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))"
2586 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2587 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2588   [Datapath actions: 2
2589 ])
2590
2591 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))"
2592 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2593 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2594   [Datapath actions: 2,3
2595 ])
2596
2597 OVS_VSWITCHD_STOP
2598 AT_CLEANUP
2599
2600
2601 AT_SETUP([ofproto-dpif - mirroring, output_port])
2602 OVS_VSWITCHD_START
2603 ADD_OF_PORTS([br0], 1, 2, 3)
2604 ovs-vsctl \
2605         set Bridge br0 mirrors=@m --\
2606         --id=@p3 get Port p3 --\
2607         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2608
2609 AT_DATA([flows.txt], [dnl
2610 in_port=1 actions=mod_vlan_vid:17,output:2
2611 in_port=2 actions=output:1
2612 ])
2613 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2614
2615 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)"
2616 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2617 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2618   [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2619 ])
2620
2621 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)"
2622 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2623 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2624   [Datapath actions: 1,3
2625 ])
2626
2627 OVS_VSWITCHD_STOP
2628 AT_CLEANUP
2629
2630 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2631 OVS_VSWITCHD_START
2632 ADD_OF_PORTS([br0], 1, 2)
2633 ovs-vsctl \
2634         set Bridge br0 mirrors=@m --\
2635         --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2636
2637 AT_DATA([flows.txt], [dnl
2638 in_port=1 actions=output:2
2639 in_port=2 actions=mod_vlan_vid:17,output:1
2640 ])
2641 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2642
2643 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)"
2644 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2645 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2646
2647 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2648 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2649 mv stdout expout
2650 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2651
2652 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)"
2653 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2654 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2655
2656 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2657 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2658 mv stdout expout
2659 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2660
2661 OVS_VSWITCHD_STOP
2662 AT_CLEANUP
2663
2664 # Two testcases below are for the ofproto/trace command
2665 # The first one tests all correct syntax:
2666 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2667 # ofproto/trace br_name br_flow [-generate|packet]
2668 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2669 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2670 ADD_OF_PORTS([br0], 1, 2, 3)
2671
2672 AT_DATA([flows.txt], [dnl
2673 in_port=1 actions=output:2
2674 in_port=2 actions=output:1
2675 ])
2676 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2677
2678 odp_flow="in_port(1)"
2679 br_flow="in_port=1"
2680 # Test command: ofproto/trace odp_flow with in_port as a name.
2681 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2682 AT_CHECK([tail -1 stdout], [0], [dnl
2683 Datapath actions: 2
2684 ])
2685
2686 odp_flow="in_port(1)"
2687 # Test command: ofproto/trace odp_flow
2688 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2689 AT_CHECK([tail -1 stdout], [0], [dnl
2690 Datapath actions: 2
2691 ])
2692
2693 # Test command: ofproto/trace dp_name odp_flow
2694 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2695 AT_CHECK([tail -1 stdout], [0], [dnl
2696 Datapath actions: 2
2697 ])
2698 # Test commmand: ofproto/trace br_name br_flow
2699 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2700 AT_CHECK([tail -1 stdout], [0], [dnl
2701 Datapath actions: 2
2702 ])
2703
2704 # Delete the inserted flows
2705 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2706 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2707
2708 # This section beflow tests the [-generate] option
2709 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2710 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"
2711
2712 # Test command: ofproto/trace odp_flow
2713 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2714 # Check for no MAC learning entry
2715 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2716  port  VLAN  MAC                Age
2717 ])
2718
2719 # Test command: ofproto/trace br_name br_flow
2720 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2721 # Check for no MAC learning entry
2722 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2723  port  VLAN  MAC                Age
2724 ])
2725
2726 # Test command: ofproto/trace odp_flow -generate
2727 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2728 # Check for the MAC learning entry
2729 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2730  port  VLAN  MAC                Age
2731     3     0  50:54:00:00:00:05    ?
2732 ])
2733
2734 # Test command: ofproto/trace dp_name odp_flow -generate
2735 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2736   "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2737   -generate], [0], [stdout])
2738 # Check for both MAC learning entries
2739 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2740  port  VLAN  MAC                Age
2741     3     0  50:54:00:00:00:05    ?
2742     1     0  50:54:00:00:00:06    ?
2743 ])
2744
2745 # Test command: ofproto/trace br_name br_flow -generate
2746 AT_CHECK([ovs-appctl ofproto/trace br0 \
2747   "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2748   -generate], [0], [stdout])
2749 # Check for both MAC learning entries.
2750 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2751  port  VLAN  MAC                Age
2752     3     0  50:54:00:00:00:05    ?
2753     1     0  50:54:00:00:00:06    ?
2754     2     0  50:54:00:00:00:07    ?
2755 ])
2756
2757 # This section beflow tests the [packet] option
2758 # The ovs-tcpundump of packets between port1 and port2
2759 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2760 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2761
2762 # Construct the MAC learning table
2763 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2764   "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2765   -generate], [0], [stdout])
2766
2767 # Construct the MAC learning table
2768 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2769   "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2770   -generate], [0], [stdout])
2771
2772 # Test command: ofproto/trace odp_flow packet
2773 AT_CHECK([ovs-appctl ofproto/trace \
2774   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2775 AT_CHECK([tail -1 stdout], [0], [dnl
2776 Datapath actions: 2
2777 ])
2778 AT_CHECK([head -n 2 stdout], [0], [dnl
2779 Bridge: br0
2780 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
2781 ])
2782
2783 # Test command: ofproto/trace dp_name odp_flow packet
2784 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2785   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2786 AT_CHECK([tail -1 stdout], [0], [dnl
2787 Datapath actions: 2
2788 ])
2789 AT_CHECK([head -n 2 stdout], [0], [dnl
2790 Bridge: br0
2791 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
2792 ])
2793
2794 # Test command: ofproto/trace br_name br_flow packet
2795 AT_CHECK([ovs-appctl ofproto/trace br0 \
2796   "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2797 AT_CHECK([tail -1 stdout], [0], [dnl
2798 Datapath actions: 1
2799 ])
2800 AT_CHECK([head -n 2 stdout], [0], [dnl
2801 Bridge: br0
2802 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
2803 ])
2804
2805 OVS_VSWITCHD_STOP
2806 AT_CLEANUP
2807
2808 # The second test tests the corner cases
2809 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2810 OVS_VSWITCHD_START
2811 ADD_OF_PORTS([br0], 1, 2)
2812
2813 # Define flows
2814 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2815 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2816 # Define options
2817 generate="-generate"
2818 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2819
2820 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2821 m4_foreach(
2822 [option],
2823 [[],
2824 ["$generate"],
2825 ["$pkt"]],
2826 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2827   [2], [], [stderr])
2828 AT_CHECK([tail -2 stderr], [0], [dnl
2829 Cannot find the datapath
2830 ovs-appctl: ovs-vswitchd: server returned an error
2831 ])])
2832
2833 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2834 m4_foreach(
2835 [option],
2836 [[],
2837 ["$generate"],
2838 ["$pkt"]],
2839 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2840   [2], [], [stderr])
2841 AT_CHECK([tail -2 stderr], [0], [dnl
2842 Cannot find the datapath
2843 ovs-appctl: ovs-vswitchd: server returned an error
2844 ])])
2845
2846 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2847 m4_foreach(
2848 [option],
2849 [[],
2850 ["$generate"],
2851 ["$pkt"]],
2852 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2853   [2], [], [stderr])
2854 AT_CHECK([tail -2 stderr], [0], [dnl
2855 Cannot find the datapath
2856 ovs-appctl: ovs-vswitchd: server returned an error
2857 ])])
2858
2859 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2860 m4_foreach(
2861 [option],
2862 [[],
2863 ["$generate"],
2864 ["$pkt"]],
2865 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2866   [2], [], [stderr])
2867 AT_CHECK([tail -2 stderr], [0], [dnl
2868 Cannot find the datapath
2869 ovs-appctl: ovs-vswitchd: server returned an error
2870 ])])
2871
2872 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2873 m4_foreach(
2874 [option],
2875 [[],
2876 ["$generate"],
2877 ["$pkt"]],
2878 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2879   [2], [], [stderr])
2880 AT_CHECK([tail -2 stderr], [0], [dnl
2881 Unknown bridge name
2882 ovs-appctl: ovs-vswitchd: server returned an error
2883 ])])
2884
2885 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2886 m4_foreach(
2887 [option],
2888 [[],
2889 ["$generate"],
2890 ["$pkt"]],
2891 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2892   [2], [], [stderr])
2893 AT_CHECK([tail -2 stderr], [0], [dnl
2894 Must specify bridge name
2895 ovs-appctl: ovs-vswitchd: server returned an error
2896 ])])
2897
2898 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2899 AT_CHECK([ovs-appctl ofproto/trace \
2900   ovs-dummy "$odp_flow" garbage_option],
2901   [2], [stdout],[stderr])
2902 AT_CHECK([tail -2 stderr], [0], [dnl
2903 Trailing garbage in packet data
2904 ovs-appctl: ovs-vswitchd: server returned an error
2905 ])
2906
2907 # Test incorrect command: ofproto/trace with 4 arguments
2908 AT_CHECK([ovs-appctl ofproto/trace \
2909   arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2910 AT_CHECK([tail -2 stderr], [0], [dnl
2911 "ofproto/trace" command takes at most 3 arguments
2912 ovs-appctl: ovs-vswitchd: server returned an error
2913 ])
2914
2915 # Test incorrect command: ofproto/trace with 0 argument
2916 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2917 AT_CHECK([tail -2 stderr], [0], [dnl
2918 "ofproto/trace" command requires at least 1 arguments
2919 ovs-appctl: ovs-vswitchd: server returned an error
2920 ])
2921
2922 OVS_VSWITCHD_STOP
2923 AT_CLEANUP
2924
2925 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2926 OVS_VSWITCHD_START
2927 ADD_OF_PORTS([br0], 1, 2, 3)
2928
2929 AT_DATA([flows.txt], [dnl
2930 in_port=1 actions=output:2
2931 in_port=2 actions=output:1
2932 ])
2933 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2934
2935 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2936 AT_CHECK([tail -1 stdout], [0], [dnl
2937 Datapath actions: push_vlan(vid=123,pcp=0),2
2938 ])
2939
2940 OVS_VSWITCHD_STOP
2941 AT_CLEANUP
2942
2943
2944 m4_define([OFPROTO_TRACE],
2945   [flow="$2"
2946    AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2947    actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2948    expected="$4"
2949    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2950      [0], [stdout])
2951    mv stdout expout
2952    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2953      [0], [expout])])
2954
2955 AT_SETUP([ofproto-dpif - MAC learning])
2956 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2957 ADD_OF_PORTS([br0], 1, 2, 3)
2958
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)'
2960
2961 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2962 OFPROTO_TRACE(
2963   [ovs-dummy],
2964   [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2965   [-generate],
2966   [1,2,100])
2967
2968 # Check for the MAC learning entry.
2969 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2970  port  VLAN  MAC                Age
2971     3     0  50:54:00:00:00:05    ?
2972 ])
2973
2974 # Trace a packet arrival destined for the learned MAC.
2975 # (This will also learn a MAC.)
2976 OFPROTO_TRACE(
2977   [ovs-dummy],
2978   [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2979   [-generate],
2980   [3])
2981
2982 # Check for both MAC learning entries.
2983 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2984  port  VLAN  MAC                Age
2985     3     0  50:54:00:00:00:05    ?
2986     1     0  50:54:00:00:00:06    ?
2987 ])
2988
2989 # Trace a packet arrival that updates the first learned MAC entry.
2990 OFPROTO_TRACE(
2991   [ovs-dummy],
2992   [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2993   [-generate],
2994   [1,3,100])
2995
2996 # Check that the MAC learning entry was updated.
2997 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2998  port  VLAN  MAC                Age
2999     1     0  50:54:00:00:00:06    ?
3000     2     0  50:54:00:00:00:05    ?
3001 ])
3002
3003 # Add another bridge.
3004 AT_CHECK(
3005   [ovs-vsctl \
3006      -- add-br br1 \
3007      -- set bridge br1 datapath-type=dummy])
3008 ADD_OF_PORTS([br1], 4, 5)
3009
3010 # Trace some packet arrivals in br1 to create MAC learning entries there too.
3011 OFPROTO_TRACE(
3012   [ovs-dummy],
3013   [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
3014   [-generate],
3015   [5,101])
3016 OFPROTO_TRACE(
3017   [ovs-dummy],
3018   [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
3019   [-generate],
3020   [4,101])
3021
3022 # Check that the MAC learning entries were added.
3023 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3024  port  VLAN  MAC                Age
3025     4     0  50:54:00:00:00:06    ?
3026     5     0  50:54:00:00:00:07    ?
3027 ])
3028
3029 # Delete port p1 and see that its MAC learning entry disappeared, and
3030 # that the MAC learning entry for the same MAC was also deleted from br1.
3031 AT_CHECK([ovs-vsctl del-port p1])
3032 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3033  port  VLAN  MAC                Age
3034     2     0  50:54:00:00:00:05    ?
3035 ])
3036 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3037  port  VLAN  MAC                Age
3038     5     0  50:54:00:00:00:07    ?
3039 ])
3040
3041 OVS_VSWITCHD_STOP
3042 AT_CLEANUP
3043
3044 AT_SETUP([ofproto-dpif - MAC table overflow])
3045 OVS_VSWITCHD_START(
3046   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
3047 ADD_OF_PORTS([br0], 1, 2, 3)
3048
3049 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)'
3050
3051 AT_CHECK([ovs-appctl time/stop])
3052
3053 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
3054 for i in 0 1 2 3 4 5 6 7 8 9; do
3055     OFPROTO_TRACE(
3056       [ovs-dummy],
3057       [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
3058       [-generate],
3059       [1,2,100])
3060     ovs-appctl time/warp 1000
3061 done
3062
3063 # Check for the MAC learning entries.
3064 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3065   [0], [dnl
3066     3     0  50:54:00:00:00:00
3067     3     0  50:54:00:00:00:01
3068     3     0  50:54:00:00:00:02
3069     3     0  50:54:00:00:00:03
3070     3     0  50:54:00:00:00:04
3071     3     0  50:54:00:00:00:05
3072     3     0  50:54:00:00:00:06
3073     3     0  50:54:00:00:00:07
3074     3     0  50:54:00:00:00:08
3075     3     0  50:54:00:00:00:09
3076  port  VLAN  MAC                Age
3077 ])
3078
3079 # Trace another ARP packet on another MAC.
3080 OFPROTO_TRACE(
3081   [ovs-dummy],
3082   [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3083   [-generate],
3084   [1,2,100])
3085
3086 # Check that the new one chased the oldest one out of the table.
3087 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3088   [0], [dnl
3089     3     0  50:54:00:00:00:01    ?
3090     3     0  50:54:00:00:00:02    ?
3091     3     0  50:54:00:00:00:03    ?
3092     3     0  50:54:00:00:00:04    ?
3093     3     0  50:54:00:00:00:05    ?
3094     3     0  50:54:00:00:00:06    ?
3095     3     0  50:54:00:00:00:07    ?
3096     3     0  50:54:00:00:00:08    ?
3097     3     0  50:54:00:00:00:09    ?
3098     3     0  50:54:00:00:00:10    ?
3099  port  VLAN  MAC                Age
3100 ])
3101 OVS_VSWITCHD_STOP
3102 AT_CLEANUP
3103
3104 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3105 #
3106 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3107 #
3108 # IP_VERSION_TYPE is used in AT_SETUP
3109 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3110   [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3111   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3112
3113   ON_EXIT([kill `cat test-sflow.pid`])
3114   AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3115   AT_CAPTURE_FILE([sflow.log])
3116   SFLOW_PORT=`parse_listening_port < test-sflow.log`
3117   ovs-appctl time/stop
3118
3119   ADD_OF_PORTS([br0], 1, 2)
3120   ovs-vsctl \
3121      set Interface br0 options:ifindex=1002 -- \
3122      set Interface p1 options:ifindex=1004 -- \
3123      set Interface p2 options:ifindex=1003 -- \
3124      set Bridge br0 sflow=@sf -- \
3125      --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3126        header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3127
3128   dnl open with ARP packets to seed the bridge-learning.  The output
3129   dnl ifIndex numbers should be reported predictably after that.
3130   dnl Since we set sampling=1 we should see all of these packets
3131   dnl reported. Sorting the output by data-source and seqNo makes
3132   dnl it deterministic. Ensuring that we send at least two packets
3133   dnl into each port means we get to check the seq nos are
3134   dnl incrementing correctly.
3135   dnl because packets from different ports can be handled by separate
3136   dnl threads, put some sleeps
3137
3138   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)'
3139   sleep 1
3140   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)'
3141   sleep 1
3142   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)'
3143   sleep 1
3144   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)'
3145   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)'
3146
3147   dnl sleep long enough to get more than one counter sample
3148   dnl from each datasource so we can check sequence numbers
3149   for i in `seq 1 30`; do
3150       ovs-appctl time/warp 100
3151   done
3152   OVS_VSWITCHD_STOP
3153   ovs-appctl -t test-sflow exit
3154
3155   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3156         /g']], [0], [dnl
3157 HEADER
3158         dgramSeqNo=1
3159         ds=127.0.0.1>2:1000
3160         fsSeqNo=1
3161         in_vlan=0
3162         in_priority=0
3163         out_vlan=0
3164         out_priority=0
3165         meanSkip=1
3166         samplePool=1
3167         dropEvents=0
3168         in_ifindex=1004
3169         in_format=0
3170         out_ifindex=2
3171         out_format=2
3172         hdr_prot=1
3173         pkt_len=64
3174         stripped=4
3175         hdr_len=60
3176         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
3177 HEADER
3178         dgramSeqNo=1
3179         ds=127.0.0.1>2:1000
3180         fsSeqNo=2
3181         in_vlan=0
3182         in_priority=0
3183         out_vlan=0
3184         out_priority=0
3185         meanSkip=1
3186         samplePool=2
3187         dropEvents=0
3188         in_ifindex=1003
3189         in_format=0
3190         out_ifindex=2
3191         out_format=2
3192         hdr_prot=1
3193         pkt_len=64
3194         stripped=4
3195         hdr_len=60
3196         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
3197 HEADER
3198         dgramSeqNo=1
3199         ds=127.0.0.1>2:1000
3200         fsSeqNo=3
3201         in_vlan=0
3202         in_priority=0
3203         out_vlan=0
3204         out_priority=0
3205         meanSkip=1
3206         samplePool=3
3207         dropEvents=0
3208         in_ifindex=1004
3209         in_format=0
3210         out_ifindex=1003
3211         out_format=0
3212         hdr_prot=1
3213         pkt_len=64
3214         stripped=4
3215         hdr_len=60
3216         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
3217 HEADER
3218         dgramSeqNo=1
3219         ds=127.0.0.1>2:1000
3220         fsSeqNo=4
3221         in_vlan=0
3222         in_priority=0
3223         out_vlan=0
3224         out_priority=0
3225         meanSkip=1
3226         samplePool=4
3227         dropEvents=0
3228         in_ifindex=1003
3229         in_format=0
3230         out_ifindex=1004
3231         out_format=0
3232         hdr_prot=1
3233         pkt_len=64
3234         stripped=4
3235         hdr_len=60
3236         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
3237 HEADER
3238         dgramSeqNo=1
3239         ds=127.0.0.1>2:1000
3240         fsSeqNo=5
3241         in_vlan=0
3242         in_priority=0
3243         out_vlan=0
3244         out_priority=0
3245         meanSkip=1
3246         samplePool=5
3247         dropEvents=0
3248         in_ifindex=1003
3249         in_format=0
3250         out_ifindex=1004
3251         out_format=0
3252         hdr_prot=1
3253         pkt_len=64
3254         stripped=4
3255         hdr_len=60
3256         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
3257 ])
3258
3259   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3260         /g']], [0], [dnl
3261 IFCOUNTERS
3262         dgramSeqNo=2
3263         ds=127.0.0.1>0:1002
3264         csSeqNo=1
3265         ifindex=1002
3266         type=6
3267         ifspeed=100000000
3268         direction=0
3269         status=0
3270         in_octets=0
3271         in_unicasts=0
3272         in_multicasts=0
3273         in_broadcasts=4294967295
3274         in_discards=0
3275         in_errors=0
3276         in_unknownprotos=4294967295
3277         out_octets=120
3278         out_unicasts=2
3279         out_multicasts=4294967295
3280         out_broadcasts=4294967295
3281         out_discards=0
3282         out_errors=0
3283         promiscuous=0
3284 IFCOUNTERS
3285         dgramSeqNo=2
3286         ds=127.0.0.1>0:1003
3287         csSeqNo=1
3288         ifindex=1003
3289         type=6
3290         ifspeed=100000000
3291         direction=0
3292         status=0
3293         in_octets=138
3294         in_unicasts=3
3295         in_multicasts=0
3296         in_broadcasts=4294967295
3297         in_discards=0
3298         in_errors=0
3299         in_unknownprotos=4294967295
3300         out_octets=120
3301         out_unicasts=2
3302         out_multicasts=4294967295
3303         out_broadcasts=4294967295
3304         out_discards=0
3305         out_errors=0
3306         promiscuous=0
3307 IFCOUNTERS
3308         dgramSeqNo=2
3309         ds=127.0.0.1>0:1004
3310         csSeqNo=1
3311         ifindex=1004
3312         type=6
3313         ifspeed=100000000
3314         direction=0
3315         status=0
3316         in_octets=84
3317         in_unicasts=2
3318         in_multicasts=0
3319         in_broadcasts=4294967295
3320         in_discards=0
3321         in_errors=0
3322         in_unknownprotos=4294967295
3323         out_octets=180
3324         out_unicasts=3
3325         out_multicasts=4294967295
3326         out_broadcasts=4294967295
3327         out_discards=0
3328         out_errors=0
3329         promiscuous=0
3330 IFCOUNTERS
3331         dgramSeqNo=3
3332         ds=127.0.0.1>0:1002
3333         csSeqNo=2
3334         ifindex=1002
3335         type=6
3336         ifspeed=100000000
3337         direction=0
3338         status=0
3339         in_octets=0
3340         in_unicasts=0
3341         in_multicasts=0
3342         in_broadcasts=4294967295
3343         in_discards=0
3344         in_errors=0
3345         in_unknownprotos=4294967295
3346         out_octets=120
3347         out_unicasts=2
3348         out_multicasts=4294967295
3349         out_broadcasts=4294967295
3350         out_discards=0
3351         out_errors=0
3352         promiscuous=0
3353 IFCOUNTERS
3354         dgramSeqNo=3
3355         ds=127.0.0.1>0:1003
3356         csSeqNo=2
3357         ifindex=1003
3358         type=6
3359         ifspeed=100000000
3360         direction=0
3361         status=0
3362         in_octets=138
3363         in_unicasts=3
3364         in_multicasts=0
3365         in_broadcasts=4294967295
3366         in_discards=0
3367         in_errors=0
3368         in_unknownprotos=4294967295
3369         out_octets=120
3370         out_unicasts=2
3371         out_multicasts=4294967295
3372         out_broadcasts=4294967295
3373         out_discards=0
3374         out_errors=0
3375         promiscuous=0
3376 IFCOUNTERS
3377         dgramSeqNo=3
3378         ds=127.0.0.1>0:1004
3379         csSeqNo=2
3380         ifindex=1004
3381         type=6
3382         ifspeed=100000000
3383         direction=0
3384         status=0
3385         in_octets=84
3386         in_unicasts=2
3387         in_multicasts=0
3388         in_broadcasts=4294967295
3389         in_discards=0
3390         in_errors=0
3391         in_unknownprotos=4294967295
3392         out_octets=180
3393         out_unicasts=3
3394         out_multicasts=4294967295
3395         out_broadcasts=4294967295
3396         out_discards=0
3397         out_errors=0
3398         promiscuous=0
3399 ])
3400   AT_CLEANUP])
3401
3402 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3403 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3404
3405 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3406 #
3407 # Test that basic NetFlow reports flow statistics correctly:
3408 # The initial packet of a flow are correctly accounted.
3409 # Later packets within a flow are correctly accounted.
3410 # Flow actions changing (in this case, due to MAC learning)
3411 # cause a record to be sent.
3412 #
3413 # IP_VERSION_TYPE is used in AT_SETUP
3414 m4_define([CHECK_NETFLOW_EXPIRATION],
3415   [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3416   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3417   ADD_OF_PORTS([br0], 1, 2)
3418
3419   ovs-appctl time/stop
3420   ON_EXIT([kill `cat test-netflow.pid`])
3421   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3422   AT_CAPTURE_FILE([netflow.log])
3423   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3424
3425   ovs-vsctl \
3426      set Bridge br0 netflow=@nf -- \
3427      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3428        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3429
3430   for delay in 1000 30000; do
3431       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)'
3432       sleep 1  # ensure the order in which these two packets are processed
3433       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)'
3434
3435       ovs-appctl time/warp $delay
3436   done
3437
3438   ovs-appctl time/warp 6000
3439   sleep 1
3440   OVS_VSWITCHD_STOP
3441   ovs-appctl -t test-netflow exit
3442
3443   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])
3444
3445   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])
3446
3447   combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3448   separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3449   AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3450
3451   AT_CLEANUP])
3452
3453 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3454 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3455
3456 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3457 #
3458 # Test that basic NetFlow reports active expirations correctly.
3459 #
3460 # IP_VERSION_TYPE is used in AT_SETUP
3461 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3462   [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3463
3464   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3465   ADD_OF_PORTS([br0], 1, 2)
3466
3467   ON_EXIT([kill `cat test-netflow.pid`])
3468   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3469   AT_CAPTURE_FILE([netflow.log])
3470   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3471
3472   ovs-vsctl \
3473      set Bridge br0 netflow=@nf -- \
3474      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3475        engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3476
3477   AT_CHECK([ovs-appctl time/stop])
3478   n=1
3479   while test $n -le 60; do
3480       n=`expr $n + 1`
3481
3482       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)'
3483       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)'
3484
3485       ovs-appctl time/warp 1000
3486   done
3487
3488   ovs-appctl time/warp 10000
3489
3490   sleep 1
3491   OVS_VSWITCHD_STOP
3492   ovs-appctl -t test-netflow exit
3493
3494   # Count the number of reported packets:
3495   # - From source to destination before MAC learning kicks in (just one).
3496   # - From source to destination after that.
3497   # - From destination to source.
3498   n_learn=0
3499   n_in=0
3500   n_out=0
3501   n_other=0
3502   n_recs=0
3503   none=0
3504   while read line; do
3505       pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3506       case $pkts in
3507            [[0-9]]*) ;;
3508        *) continue ;;
3509       esac
3510
3511       case $line in
3512           "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3513               counter=n_learn
3514           ;;
3515       "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3516           counter=n_in
3517           ;;
3518       "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3519           counter=n_out
3520           ;;
3521       *)
3522           counter=n_other
3523           ;;
3524       esac
3525       eval $counter=\`expr \$$counter + \$pkts\`
3526       n_recs=`expr $n_recs + 1`
3527   done < netflow.log
3528
3529   # There should be exactly 1 MAC learning packet,
3530   # exactly 59 other packets in that direction,
3531   # and exactly 60 packets in the other direction.
3532   AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3533 ])
3534
3535   AT_CLEANUP])
3536
3537 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3538 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3539
3540 AT_SETUP([ofproto-dpif - flow stats])
3541 OVS_VSWITCHD_START
3542 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3543 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3544
3545 ovs-appctl time/stop
3546
3547 for i in `seq 1 10`; do
3548     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)'
3549 done
3550
3551 ovs-appctl time/warp 1000
3552 sleep 1  # wait for revalidator to update stats
3553
3554 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3555 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3556  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3557  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3558 ])
3559 OVS_VSWITCHD_STOP
3560 AT_CLEANUP
3561
3562 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3563 OVS_VSWITCHD_START
3564 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3565 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3566
3567 ovs-appctl time/stop
3568
3569 for i in `seq 1 10`; do
3570     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)'
3571 done
3572
3573 ovs-appctl time/warp 100
3574 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3575 ovs-appctl time/warp 1000
3576
3577 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3578 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3579  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3580  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3581 ])
3582 OVS_VSWITCHD_STOP
3583 AT_CLEANUP
3584
3585 AT_SETUP([idle_age and hard_age increase over time])
3586 OVS_VSWITCHD_START
3587
3588 # get_ages DURATION HARD IDLE
3589 #
3590 # Fetch the flow duration, hard age, and idle age into the variables
3591 # whose names are given as arguments.  Rounds DURATION down to the
3592 # nearest integer.  If hard_age doesn't appear in the output, sets
3593 # HARD to "none".  If idle_age doesn't appear in the output, sets IDLE
3594 # to 0.
3595 get_ages () {
3596     AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3597
3598     duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3599     AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3600     AS_VAR_COPY([$1], [duration])
3601
3602     hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3603     if test X"$hard" = X; then
3604         hard=none
3605     else
3606         AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3607     fi
3608     AS_VAR_COPY([$2], [hard])
3609
3610     idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3611     if test X"$idle" = X; then
3612         idle=0
3613     else
3614         AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3615     fi
3616     AS_VAR_COPY([$3], [idle])
3617 }
3618
3619 # Add a flow and get its initial hard and idle age.
3620 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3621 get_ages duration1 hard1 idle1
3622
3623 ovs-appctl time/stop
3624 # Warp time forward by 10 seconds, then modify the flow's actions.
3625 ovs-appctl time/warp 10000
3626 get_ages duration2 hard2 idle2
3627 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3628
3629 # Warp time forward by 10 seconds.
3630 ovs-appctl time/warp 10000
3631 get_ages duration3 hard3 idle3
3632
3633 # Warp time forward 10 more seconds, then pass some packets through the flow,
3634 # then warp forward a few more times because idle times are only updated
3635 # occasionally.
3636 ovs-appctl time/warp 10000
3637 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)'
3638 ovs-appctl time/warp 1000
3639 ovs-appctl time/warp 1000
3640 ovs-appctl time/warp 1000
3641 sleep 1
3642 get_ages duration4 hard4 idle4
3643
3644 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3645 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3646 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3647
3648 # Duration should increase steadily over time.
3649 AT_CHECK([test $duration1 -lt $duration2])
3650 AT_CHECK([test $duration2 -lt $duration3])
3651 AT_CHECK([test $duration3 -lt $duration4])
3652
3653 # Hard age should be "none" initially because it's the same as flow_duration,
3654 # then it should increase.
3655 AT_CHECK([test $hard1 = none])
3656 AT_CHECK([test $hard2 = none])
3657 AT_CHECK([test $hard3 != none])
3658 AT_CHECK([test $hard4 != none])
3659 AT_CHECK([test $hard3 -lt $hard4])
3660
3661 # Idle age should increase from 1 to 2 to 3, then decrease.
3662 AT_CHECK([test $idle1 -lt $idle2])
3663 AT_CHECK([test $idle2 -lt $idle3])
3664 AT_CHECK([test $idle3 -gt $idle4])
3665
3666 # Check some invariant relationships.
3667 AT_CHECK([test $duration1 = $idle1])
3668 AT_CHECK([test $duration2 = $idle2])
3669 AT_CHECK([test $duration3 = $idle3])
3670 AT_CHECK([test $idle3 -gt $hard3])
3671 AT_CHECK([test $idle4 -lt $hard4])
3672 AT_CHECK([test $hard4 -lt $duration4])
3673
3674 OVS_VSWITCHD_STOP
3675 AT_CLEANUP
3676
3677 AT_SETUP([ofproto-dpif - fin_timeout])
3678 OVS_VSWITCHD_START
3679 AT_DATA([flows.txt], [dnl
3680 in_port=1 actions=output:2
3681 in_port=2 actions=mod_vlan_vid:17,output:1
3682 ])
3683 ovs-appctl time/stop
3684 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3685 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3686 [NXST_FLOW reply:
3687  idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3688 ])
3689
3690 # Check that a TCP SYN packet does not change the timeout.  (Because
3691 # flow stats updates are mainly what implements the fin_timeout
3692 # feature, we warp forward a couple of times to ensure that flow stats
3693 # run before re-checking the flow table.)
3694 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3695 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3696 warped
3697 ])
3698 sleep 1
3699 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3700 [NXST_FLOW reply:
3701  n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3702 ])
3703 # Check that a TCP FIN packet does change the timeout.
3704 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3705 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3706 warped
3707 ])
3708 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3709 [NXST_FLOW reply:
3710  n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3711 ])
3712 OVS_VSWITCHD_STOP
3713 AT_CLEANUP
3714
3715 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3716 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3717 ADD_OF_PORTS([br0], [1], [2])
3718 ADD_OF_PORTS([br1], [3])
3719
3720 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3721 dummy@br0
3722 dummy@br1
3723 ])
3724 OVS_VSWITCHD_STOP
3725 AT_CLEANUP
3726
3727 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3728 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3729 ADD_OF_PORTS([br0], [1], [2])
3730 ADD_OF_PORTS([br1], [3])
3731
3732 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3733 dummy@ovs-dummy: hit:0 missed:0
3734         br0:
3735                 br0 65534/100: (dummy)
3736                 p1 1/1: (dummy)
3737                 p2 2/2: (dummy)
3738         br1:
3739                 br1 65534/101: (dummy)
3740                 p3 3/3: (dummy)
3741 ])
3742 OVS_VSWITCHD_STOP
3743 AT_CLEANUP
3744
3745 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3746 # bump max-idle to avoid the flows being reclaimed behind us
3747 OVS_VSWITCHD_START([add-br br1 -- \
3748                     set bridge br1 datapath-type=dummy fail-mode=secure -- \
3749                     set Open_vSwitch . other_config:max-idle=10000])
3750 ADD_OF_PORTS([br0], [1], [2])
3751 ADD_OF_PORTS([br1], [3])
3752
3753 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)'])
3754 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)'])
3755 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)'])
3756 sleep 1  # wait for upcall handlers
3757 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3758 skb_priority(0),recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:drop
3759 skb_priority(0),recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:drop
3760 ])
3761
3762 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3763 skb_priority(0),recirc_id(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:never, actions:drop
3764 ])
3765
3766 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3767 skb_priority(0),skb_mark(0/0),recirc_id(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
3768 skb_priority(0),skb_mark(0/0),recirc_id(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
3769 ])
3770
3771 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3772 skb_priority(0),skb_mark(0/0),recirc_id(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
3773 ])
3774
3775 OVS_VSWITCHD_STOP
3776 AT_CLEANUP
3777
3778 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
3779 OVS_VSWITCHD_START([dnl
3780    add-port br0 p1 -- set Interface p1 type=dummy
3781 ])
3782 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3783 ON_EXIT([kill `cat ovs-ofctl.pid`])
3784
3785 AT_CAPTURE_FILE([ofctl_monitor.log])
3786 AT_DATA([flows.txt], [dnl
3787 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3788 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3789 ])
3790 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3791
3792 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3793 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3794 dnl
3795 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3796 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)
3797 dnl         (label 20, exp 0, [S], ttl 32)
3798 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3799 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3800
3801 for dl_src in 00 01; do
3802     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"])
3803 done
3804 sleep 1  # wait for the datapath flow installed
3805 for dl_src in 00 01; do
3806     AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3807 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), actions:userspace(pid=0,slow_path(controller))
3808 ])
3809 done
3810
3811 OVS_VSWITCHD_STOP
3812 AT_CLEANUP
3813
3814
3815 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
3816 OVS_VSWITCHD_START([dnl
3817    add-port br0 p1 -- set Interface p1 type=dummy
3818 ])
3819 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3820 ON_EXIT([kill `cat ovs-ofctl.pid`])
3821
3822 AT_CAPTURE_FILE([ofctl_monitor.log])
3823 AT_DATA([flows.txt], [dnl
3824 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3825 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3826 ])
3827 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3828
3829 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3830 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3831 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3832 dnl
3833 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3834 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)
3835 dnl         (label 20, exp 0, ttl 32)
3836 dnl         (label 20, exp 0, ttl 32)
3837 dnl         (label 20, exp 0, [S], ttl 32)
3838 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3839 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3840
3841 for dl_src in 00 01; do
3842     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"])
3843 done
3844 sleep 1  # wait for the datapath flow installed
3845 for dl_src in 00 01; do
3846     AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3847 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), actions:userspace(pid=0,slow_path(controller))
3848 ])
3849 done
3850
3851 OVS_VSWITCHD_STOP
3852 AT_CLEANUP
3853
3854 AT_SETUP([ofproto-dpif - patch ports])
3855 OVS_VSWITCHD_START([add-br br1 \
3856 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3857 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3858 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3859
3860 ADD_OF_PORTS([br0], [2])
3861 ADD_OF_PORTS([br1], [3])
3862
3863 AT_CHECK([ovs-appctl time/stop])
3864 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3865
3866 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3867 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3868
3869 for i in $(seq 1 10); do
3870     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)'
3871     if [[ $i -eq 1 ]]; then
3872         sleep 1
3873     fi
3874 done
3875
3876 for i in $(seq 1 5); do
3877     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)'
3878     if [[ $i -eq 1 ]]; then
3879         sleep 1
3880     fi
3881 done
3882
3883 AT_CHECK([ovs-appctl time/warp 500], [0],
3884 [warped
3885 ])
3886 sleep 1  # wait for log writer
3887
3888 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3889 dummy@ovs-dummy: hit:13 missed:2
3890         br0:
3891                 br0 65534/100: (dummy)
3892                 p2 2/2: (dummy)
3893                 pbr0 1/none: (patch: peer=pbr1)
3894         br1:
3895                 br1 65534/101: (dummy)
3896                 p3 3/3: (dummy)
3897                 pbr1 1/none: (patch: peer=pbr0)
3898 ])
3899
3900 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3901 skb_priority(0),skb_mark(0/0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions:101,3,2
3902 skb_priority(0),skb_mark(0/0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions:100,2,3
3903 ])
3904
3905 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3906 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:9, bytes:540, used:0.0s, actions:101,3,2
3907 ])
3908 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3909 skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:4, bytes:240, used:0.0s, actions:100,2,3
3910 ])
3911
3912 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3913 OFPST_PORT reply (xid=0x4): 1 ports
3914   port  1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3915            tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3916 ])
3917
3918 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3919 OFPST_PORT reply (xid=0x4): 1 ports
3920   port  1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3921            tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3922 ])
3923
3924 OVS_VSWITCHD_STOP
3925 AT_CLEANUP
3926
3927 AT_SETUP([ofproto-dpif - port duration])
3928 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3929 ADD_OF_PORTS([br0], 1, 2)
3930
3931 ovs-appctl time/stop
3932 ovs-appctl time/warp 10000
3933
3934 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3935 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3936 [dnl
3937            duration=?s
3938            duration=?s
3939            duration=?s
3940 ])
3941 OVS_VSWITCHD_STOP
3942 AT_CLEANUP
3943
3944 dnl ----------------------------------------------------------------------
3945 AT_BANNER([ofproto-dpif -- megaflows])
3946
3947 AT_SETUP([ofproto-dpif megaflow - port classification])
3948 OVS_VSWITCHD_START
3949 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3950 ADD_OF_PORTS([br0], [1], [2])
3951 AT_DATA([flows.txt], [dnl
3952 table=0 in_port=1 actions=output(2)
3953 ])
3954 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3955 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)'])
3956 sleep 1
3957 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)'])
3958 sleep 1
3959 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3960 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
3961 ])
3962 OVS_VSWITCHD_STOP
3963 AT_CLEANUP
3964
3965 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3966 OVS_VSWITCHD_START
3967 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3968 ADD_OF_PORTS([br0], [1], [2])
3969 AT_DATA([flows.txt], [dnl
3970 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3971 ])
3972 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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)'])
3975 sleep 1
3976 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3977 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
3978 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
3979 ])
3980 OVS_VSWITCHD_STOP
3981 AT_CLEANUP
3982
3983 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3984 OVS_VSWITCHD_START
3985 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3986 ADD_OF_PORTS([br0], [1], [2])
3987 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], [])
3988 AT_DATA([flows.txt], [dnl
3989 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3990 ])
3991 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3992 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)'])
3993 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)'])
3994 sleep 1
3995 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3996 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
3997 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
3998 ])
3999 OVS_VSWITCHD_STOP
4000 AT_CLEANUP
4001
4002 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
4003 OVS_VSWITCHD_START
4004 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4005 ADD_OF_PORTS([br0], [1], [2])
4006 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], [])
4007 AT_DATA([flows.txt], [dnl
4008 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
4009 ])
4010 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4011 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)'])
4012 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)'])
4013 sleep 1
4014 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4015 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,dst=fe80::2/::,label=0/0,proto=10/0,tclass=0x70/0,hlimit=128/0,frag=no/0xff), actions: <del>
4016 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,dst=2001:db8:3c4d:1:2:3:4:1/::,label=0/0,proto=99/0,tclass=0x70/0,hlimit=64/0,frag=no/0xff), actions: <del>
4017 ])
4018 OVS_VSWITCHD_STOP
4019 AT_CLEANUP
4020
4021 AT_SETUP([ofproto-dpif megaflow - L4 classification])
4022 OVS_VSWITCHD_START
4023 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4024 ADD_OF_PORTS([br0], [1], [2])
4025 AT_DATA([flows.txt], [dnl
4026 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
4027 ])
4028 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4029 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)'])
4030 sleep 1
4031 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)'])
4032 sleep 1
4033 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4034 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0xff,code=0/0), actions: <del>
4035 ])
4036 OVS_VSWITCHD_STOP
4037 AT_CLEANUP
4038
4039 AT_SETUP([ofproto-dpif megaflow - normal])
4040 OVS_VSWITCHD_START
4041 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4042 ADD_OF_PORTS([br0], [1], [2])
4043 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4044 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)'])
4045 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)'])
4046 sleep 1
4047 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4048 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4049 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4050 ])
4051 OVS_VSWITCHD_STOP
4052 AT_CLEANUP
4053
4054 AT_SETUP([ofproto-dpif megaflow - mpls])
4055 OVS_VSWITCHD_START
4056 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4057 ADD_OF_PORTS([br0], [1], [2])
4058 AT_DATA([flows.txt], [dnl
4059 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
4060 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
4061 ])
4062 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4063 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)'])
4064 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)'])
4065 sleep 1
4066 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4067 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), actions: <del>
4068 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), actions: <del>
4069 ])
4070 OVS_VSWITCHD_STOP
4071 AT_CLEANUP
4072
4073 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4074 #
4075 # IP_VERSION_TYPE is used in AT_SETUP
4076 m4_define([CHECK_MEGAFLOW_NETFLOW],
4077   [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4078   OVS_VSWITCHD_START
4079   AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4080   ADD_OF_PORTS([br0], [1], [2])
4081
4082   dnl NetFlow configuration disables wildcarding relevant fields
4083   ON_EXIT([kill `cat test-netflow.pid`])
4084   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4085   AT_CAPTURE_FILE([netflow.log])
4086   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4087   ovs-vsctl \
4088      set Bridge br0 netflow=@nf -- \
4089      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4090        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4091
4092   AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4093   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)'])
4094   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)'])
4095   sleep 1
4096   AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4097 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), actions: <del>
4098 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), actions: <del>
4099 ])
4100   OVS_VSWITCHD_STOP
4101   AT_CLEANUP])
4102
4103 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4104 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4105
4106 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4107 OVS_VSWITCHD_START(
4108   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4109    add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4110    set interface p2 type=dummy ofport_request=2 -- \
4111    set interface p3 type=dummy ofport_request=3])
4112 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4113 ])
4114 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4115
4116 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4117 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)'])
4118 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)'])
4119 sleep 1
4120 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4121 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4122 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4123 ])
4124 OVS_VSWITCHD_STOP
4125 AT_CLEANUP
4126
4127 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4128 OVS_VSWITCHD_START(
4129   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4130    add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4131    set interface p2 type=dummy ofport_request=2 -- \
4132    set interface p3 type=dummy ofport_request=3])
4133 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4134 ])
4135 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4136
4137 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4138 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)'])
4139 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4140 sleep 1
4141 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4142 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4143 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4144 ])
4145 OVS_VSWITCHD_STOP
4146 AT_CLEANUP
4147
4148 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4149 # Create bond0 on br0 with interfaces p0 and p1
4150 #    and bond1 on br1 with interfaces p2 and p3
4151 # with p0 patched to p2 and p1 patched to p3.
4152 OVS_VSWITCHD_START(
4153   [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4154                             other-config:lacp-time=fast \
4155                             other-config:bond-rebalance-interval=0 -- \
4156    set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4157    set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4158    add-br br1 -- \
4159    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4160    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4161                   fail-mode=secure -- \
4162    add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4163                             other-config:lacp-time=fast \
4164                             other-config:bond-rebalance-interval=0 -- \
4165    set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4166    set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4167
4168 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4169 ])
4170 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4171 ADD_OF_PORTS([br0], [7])
4172 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4173 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4174 ovs-appctl time/stop
4175 ovs-appctl time/warp 5000
4176 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)'])
4177 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)'])
4178 sleep 1
4179 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4180 skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4181 skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4182 ])
4183 OVS_VSWITCHD_STOP
4184 AT_CLEANUP
4185
4186 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4187 OVS_VSWITCHD_START
4188 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4189 ADD_OF_PORTS([br0], [1], [2])
4190 AT_DATA([flows.txt], [dnl
4191 table=0 in_port=1,ip actions=resubmit(90)
4192 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4193 ])
4194 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4195 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)'])
4196 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4197 sleep 1
4198 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4199 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4200 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4201 ])
4202 OVS_VSWITCHD_STOP
4203 AT_CLEANUP
4204
4205 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4206 OVS_VSWITCHD_START
4207 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4208 ADD_OF_PORTS([br0], [1], [2])
4209 AT_DATA([flows.txt], [dnl
4210 table=0 in_port=1,ip actions=resubmit(,1)
4211 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4212 ])
4213 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4214 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)'])
4215 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=
4216 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4217 sleep 1
4218 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4219 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4220 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4221 ])
4222 OVS_VSWITCHD_STOP
4223 AT_CLEANUP
4224
4225 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4226 OVS_VSWITCHD_START
4227 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4228 ADD_OF_PORTS([br0], [1], [2])
4229 AT_DATA([flows.txt], [dnl
4230 table=0 in_port=1,ip actions=goto_table(1)
4231 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4232 ])
4233 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4234 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)'])
4235 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)'])
4236 sleep 1
4237 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4238 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4239 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4240 ])
4241 OVS_VSWITCHD_STOP
4242 AT_CLEANUP
4243
4244 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4245 OVS_VSWITCHD_START
4246 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4247 ADD_OF_PORTS([br0], [1], [2], [3])
4248 ovs-vsctl \
4249         set Bridge br0 mirrors=@m --\
4250         --id=@p3 get Port p3 --\
4251         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4252
4253 AT_DATA([flows.txt], [dnl
4254 in_port=1 actions=output:2
4255 ])
4256 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4257 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)'])
4258 sleep 1
4259 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4260 sleep 1
4261 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4262 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4263 ])
4264 OVS_VSWITCHD_STOP
4265 AT_CLEANUP
4266
4267 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4268 OVS_VSWITCHD_START
4269 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4270 ADD_OF_PORTS([br0], [1], [2], [3])
4271 ovs-vsctl \
4272         set Bridge br0 mirrors=@m --\
4273         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4274         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4275
4276 AT_DATA([flows.txt], [dnl
4277 in_port=1 actions=output:2
4278 ])
4279 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4280 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))'])
4281 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)'])
4282 sleep 1
4283 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4284 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8100),vlan(vid=11/0xfff,pcp=7/0x0,cfi=1/1),encap(eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0)), actions: <del>
4285 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4286 ])
4287 OVS_VSWITCHD_STOP
4288 AT_CLEANUP
4289
4290 AT_SETUP([ofproto-dpif megaflow - move action])
4291 OVS_VSWITCHD_START
4292 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4293 ADD_OF_PORTS([br0], [1], [2])
4294 AT_DATA([flows.txt], [dnl
4295 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4296 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4297 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4298 ])
4299 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4300 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)'])
4301 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)'])
4302 sleep 1
4303 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4304 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4305 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4306 ])
4307 OVS_VSWITCHD_STOP
4308 AT_CLEANUP
4309
4310 AT_SETUP([ofproto-dpif megaflow - push action])
4311 OVS_VSWITCHD_START
4312 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4313 ADD_OF_PORTS([br0], [1], [2])
4314 AT_DATA([flows.txt], [dnl
4315 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4316 ])
4317 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4318 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)'])
4319 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)'])
4320 sleep 1
4321 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4322 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4323 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4324 ])
4325 OVS_VSWITCHD_STOP
4326 AT_CLEANUP
4327
4328 AT_SETUP([ofproto-dpif megaflow - learning])
4329 OVS_VSWITCHD_START
4330 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4331 ADD_OF_PORTS([br0], [1], [2])
4332 AT_DATA([flows.txt], [dnl
4333 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
4334 ])
4335 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4336 ovs-appctl time/stop
4337 # We send each packet twice because the first packet in each flow causes the
4338 # flow table to change and thus revalidations, which (depending on timing)
4339 # can keep a megaflow from being installed.  The revalidations are done by
4340 # the second iteration, allowing the flows to be installed.
4341 for i in 1 2; do
4342     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)'])
4343     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)'])
4344     ovs-appctl time/warp 100
4345 done
4346 sleep 1
4347 dnl The original flow is missing due to a revalidation.
4348 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4349 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4350 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4351 ])
4352 OVS_VSWITCHD_STOP
4353 AT_CLEANUP
4354
4355 AT_SETUP([ofproto-dpif megaflow - tunnels])
4356 OVS_VSWITCHD_START(
4357   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4358 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4359 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4360      options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4361 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4362           ofport_request=3])
4363 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4364      options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4365      ofport_request=4 options:key=flow])
4366 AT_DATA([flows.txt], [dnl
4367 in_port=1,actions=output(2)
4368 in_port=3,actions=output(4)
4369 ])
4370 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4371 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4372 dnl will cause the packet to be dropped.
4373 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)'])
4374 sleep 1
4375 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)'])
4376 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)'])
4377 sleep 1
4378 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)'])
4379 sleep 1
4380 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4381 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0x3,ttl=128/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4382 skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0xff,ttl=128/0xff,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4383 skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0x1/0xff,ttl=64/0xff,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4384 ])
4385 OVS_VSWITCHD_STOP
4386 AT_CLEANUP
4387
4388 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4389 OVS_VSWITCHD_START
4390 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4391 ADD_OF_PORTS([br0], [1], [2])
4392 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], [])
4393 AT_DATA([flows.txt], [dnl
4394 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4395 ])
4396 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4397 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)'])
4398 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)'])
4399 sleep 1
4400 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4401 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4402 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8/0,code=0/0), actions: <del>
4403 ])
4404 OVS_VSWITCHD_STOP
4405 AT_CLEANUP
4406
4407 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4408 OVS_VSWITCHD_START
4409 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4410 ADD_OF_PORTS([br0], [1], [2])
4411 AT_DATA([flows.txt], [dnl
4412 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4413 ])
4414 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4415 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)'])
4416 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)'])
4417 sleep 1
4418 dnl The megaflows do not match the same fields, since the first packet
4419 dnl is essentially a no-op.  (The new destination MAC is the same as the
4420 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4421 dnl so that a packet that doesn't need its MAC address changed doesn't
4422 dnl hide one that does.  Since the first entry doesn't need to change,
4423 dnl only the destination MAC address is matched (as decided by
4424 dnl ofproto-dpif).  The second entry actually updates the destination
4425 dnl MAC, so both the source and destination MAC addresses are
4426 dnl un-wildcarded, since the ODP commit functions update both the source
4427 dnl and destination MAC addresses.
4428 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4429 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/ff:ff:ff:ff:ff:ff),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions:2
4430 skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
4431 ])
4432 OVS_VSWITCHD_STOP
4433 AT_CLEANUP
4434
4435 AT_SETUP([ofproto-dpif megaflow - disabled])
4436 OVS_VSWITCHD_START
4437 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4438 ADD_OF_PORTS([br0], [1], [2])
4439 AT_DATA([flows.txt], [dnl
4440 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4441 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4442 ])
4443 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4444 ], [])
4445 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4446 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4447 for i in 1 2 3 4; do
4448     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)'])
4449     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)'])
4450     if [[ $i -eq 1 ]]; then
4451         sleep 1
4452     fi
4453 done
4454 sleep 1
4455 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4456 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), actions:2
4457 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), actions:drop
4458 ])
4459 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
4460 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:2
4461 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:3, bytes:180, used:0.0s, actions:drop
4462 ])
4463 OVS_VSWITCHD_STOP
4464 AT_CLEANUP
4465
4466 AT_SETUP([ofproto-dpif - datapath port number change])
4467 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4468 ADD_OF_PORTS([br0], 1)
4469
4470 # Trace a flow that should output to p1.
4471 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4472   [0], [stdout])
4473 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4474 ])
4475
4476 # Change p1's port number to 5.
4477 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4478
4479 # Trace a flow that should output to p1 in its new location.
4480 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4481   [0], [stdout])
4482 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4483 ])
4484 OVS_VSWITCHD_STOP
4485 AT_CLEANUP
4486
4487 # Tests the bundling with various bfd and cfm configurations.
4488 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4489 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4490                     add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4491                     add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4492                     set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4493                     set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4494                     set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4495                     set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4496                     set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4497                     set Interface p0 cfm_mpid=1 -- \
4498                     set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4499
4500 ovs-appctl time/stop
4501 # advance the clock to stablize everything.
4502 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4503 # cfm/show should show 'recv' fault.
4504 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4505         fault: recv
4506 ])
4507 # bfd/show should show 'up'.
4508 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4509         Local Session State: up
4510         Remote Session State: up
4511         Local Session State: up
4512         Remote Session State: up
4513 ])
4514 # bond/show should show 'may-enable: true' for all slaves.
4515 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4516         may_enable: true
4517         may_enable: true
4518         may_enable: true
4519         may_enable: true
4520 ])
4521
4522 # now disable the bfd on p1.
4523 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4524 # advance the clock to stablize everything.
4525 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4526 # cfm/show should show 'recv' fault.
4527 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4528         fault: recv
4529 ])
4530 # bfd/show should show 'down'.
4531 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4532         Local Session State: down
4533         Remote Session State: down
4534 ])
4535 # bond/show should show 'may-enable: false' for p0.
4536 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4537         may_enable: false
4538         may_enable: true
4539 ])
4540
4541 # now enable the bfd on p1 and disable bfd on p0.
4542 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4543 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4544 # advance the clock to stablize everything.
4545 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4546 # cfm/show should show 'recv' fault.
4547 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4548         fault: recv
4549 ])
4550 # bfd/show should show 'down'.
4551 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4552         Local Session State: down
4553         Remote Session State: down
4554 ])
4555 # bond/show should show 'may-enable: false' for p0 and p1.
4556 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4557         may_enable: false
4558         may_enable: true
4559         may_enable: false
4560         may_enable: true
4561 ])
4562
4563 OVS_VSWITCHD_STOP
4564 AT_CLEANUP
4565
4566 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4567 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4568
4569 # enable bfd on p0.
4570 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4571 # check log.
4572 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4573 # disable bfd on p0.
4574 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4575 # check log.
4576 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4577 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4578
4579 # enable cfm on p0.
4580 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4581 # check log.
4582 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4583 # disable cfm on p0.
4584 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4585 # check log.
4586 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4587 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4588
4589 # enable both bfd and cfm on p0.
4590 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4591 # check log.
4592 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4593 # disable bfd on p0.
4594 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4595 # check log, there should not be the log of thread terminated.
4596 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4597 ])
4598 # reenable bfd on p0.
4599 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4600 # check log, should still be on log of thread created.
4601 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4602 monitor thread created
4603 ])
4604 # disable bfd and cfm together.
4605 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4606 # check log.
4607 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4608
4609 OVS_VSWITCHD_STOP
4610 AT_CLEANUP
4611
4612 # this test helps avoid the deadlock between the main thread and monitor thread.
4613 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4614 OVS_VSWITCHD_START
4615
4616 for i in `seq 1 199`
4617 do
4618     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])
4619 done
4620
4621 OVS_VSWITCHD_STOP
4622 AT_CLEANUP
4623 \f
4624 AT_BANNER([ofproto-dpif - flow translation resource limits])
4625
4626 AT_SETUP([ofproto-dpif - infinite resubmit])
4627 OVS_VSWITCHD_START
4628 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4629 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4630   [0], [stdout])
4631 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4632 ])
4633 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4634   [0], [1
4635 ])
4636 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4637 AT_CLEANUP
4638
4639 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4640 OVS_VSWITCHD_START
4641 ADD_OF_PORTS([br0], 1)
4642 (for i in `seq 1 64`; do
4643      j=`expr $i + 1`
4644      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4645  done
4646  echo "in_port=65, actions=local") > flows
4647  AT_CHECK([ovs-ofctl add-flows br0 flows])
4648 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4649 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4650 ])
4651 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4652 AT_CLEANUP
4653
4654 AT_SETUP([ofproto-dpif - too many output actions])
4655 OVS_VSWITCHD_START
4656 ADD_OF_PORTS([br0], 1)
4657 (for i in `seq 1 12`; do
4658      j=`expr $i + 1`
4659      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4660  done
4661  echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4662 AT_CHECK([ovs-ofctl add-flows br0 flows])
4663 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4664 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4665   [0], [1
4666 ])
4667 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4668 ])
4669 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4670 AT_CLEANUP
4671
4672 AT_SETUP([ofproto-dpif - stack too deep])
4673 OVS_VSWITCHD_START
4674 ADD_OF_PORTS([br0], 1)
4675 (for i in `seq 1 12`; do
4676      j=`expr $i + 1`
4677      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4678  done
4679  push="push:NXM_NX_REG0[[]]"
4680  echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4681  AT_CHECK([ovs-ofctl add-flows br0 flows])
4682 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4683 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4684 ])
4685 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
4686 AT_CLEANUP
4687
4688 AT_SETUP([ofproto-dpif - ICMPv6])
4689 OVS_VSWITCHD_START
4690 ADD_OF_PORTS([br0], 1)
4691
4692 AT_CAPTURE_FILE([ofctl_monitor.log])
4693
4694 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4695
4696 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
4697
4698 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4699
4700 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4701 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
4702 icmp6,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=00:00:86:05:80:da,dl_dst=00:60:97:07:69:ea,ipv6_src=fe80::200:86ff:fe05:80da,ipv6_dst=fe80::260:97ff:fe07:69ea,ipv6_label=0x00000,nw_tos=0,nw_ecn=0,nw_ttl=255,icmp_type=135,icmp_code=0,nd_target=fe80::260:97ff:fe07:69ea,nd_sll=00:00:86:05:80:da,nd_tll=00:00:00:00:00:00
4703 ])
4704
4705 OVS_VSWITCHD_STOP
4706 AT_CLEANUP