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