1
AT_BANNER([ofproto-dpif])
3
# Strips out uninteresting parts of flow output, as well as parts
4
# that vary from one run to another (e.g., timing and bond actions).
5
m4_define([STRIP_USED], [[sed '
6
s/used:[0-9]*\.[0-9]*/used:0.0/
8
m4_define([STRIP_XOUT], [[sed '
9
s/used:[0-9]*\.[0-9]*/used:0.0/
10
s/actions:.*/actions: <del>/
11
s/packets:[0-9]*/packets:0/
12
s/bytes:[0-9]*/bytes:0/
14
m4_define([FILTER_FLOW_INSTALL], [[
18
m4_define([FILTER_FLOW_DUMP], [[
19
grep 'flow_dump ' | sed '
21
s/used:[0-9]*\.[0-9]*/used:0.0/
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
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 -- \
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 \
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])
39
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
40
AT_CHECK([ovs-ofctl add-flow br1 action=normal])
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
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>
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.
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 -- \
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 \
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])
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
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
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>
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.
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 -- \
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
130
ovs-appctl time/warp 100
132
for i in `seq 0 100 |xargs printf '%02x\n'`;
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])
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])
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.
152
# Send some traffic, make sure the traffic are spread based on L4 headers.
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 -- \
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
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
176
OVS_WAIT_WHILE([ovs-appctl bond/show | grep "may_enable: false"])
178
ovs-appctl time/warp 100
179
ovs-appctl lacp/show > lacp.txt
180
ovs-appctl bond/show > bond.txt
182
for i in `seq 0 255` ;
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])
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])
202
# Makes sure recirculation does not change the way packet is handled.
203
AT_SETUP([ofproto-dpif, balance-tcp bonding, different recirc flow ])
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 -- \
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 -- \
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
225
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
228
# Waits for all ifaces enabled.
229
OVS_WAIT_UNTIL([test `ovs-appctl bond/show | grep -- "may_enable: true" | wc -l` -ge 4])
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
237
AT_CHECK([ovs-ofctl add-flows br-int flows.txt])
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)"])
243
# Forces revalidators to update all stats.
244
AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [dnl
247
AT_CHECK([ovs-appctl upcall/enable-megaflows], [0], [dnl
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
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
267
AT_SETUP([ofproto-dpif - resubmit])
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)
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
287
AT_SETUP([ofproto-dpif - goto table])
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
301
AT_SETUP([ofproto-dpif - write actions])
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)
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
318
AT_SETUP([ofproto-dpif - clear actions])
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
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
334
AT_SETUP([ofproto-dpif - group chaining not supported])
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'],
339
AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
340
[OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
345
AT_SETUP([ofproto-dpif - all group in action list])
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
358
AT_SETUP([ofproto-dpif - indirect group in action list])
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
370
AT_SETUP([ofproto-dpif - group actions have no effect afterwards])
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
382
AT_SETUP([ofproto-dpif - all group in action set])
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
395
AT_SETUP([ofproto-dpif - indirect group in action set])
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
407
AT_SETUP([ofproto-dpif - select group])
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)'])
413
# Try a bunch of different flows and make sure that they get distributed
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
419
sort results | uniq -c
420
AT_CHECK([sort results | uniq], [0],
421
[Datapath actions: 10
427
AT_SETUP([ofproto-dpif - select group with watch port])
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
439
AT_SETUP([ofproto-dpif - select group with weight])
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
451
AT_SETUP([ofproto-dpif - fast failover group])
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
463
AT_SETUP([ofproto-dpif - registers])
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
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
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
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
498
AT_SETUP([ofproto-dpif - push-pop])
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[[]]
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
517
AT_SETUP([ofproto-dpif - output])
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
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
538
AT_SETUP([ofproto-dpif - dec_ttl])
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
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.
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
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
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
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.
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])
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
588
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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.
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])
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
605
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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.
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])
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
622
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
626
AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
628
ADD_OF_PORTS([br0], [1], [2])
630
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
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
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
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
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
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
672
AT_SETUP([ofproto-dpif - output/flood flags])
674
ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
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
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])
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
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
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
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
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
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
734
ON_EXIT([kill `cat ovs-ofctl.pid`])
736
AT_CAPTURE_FILE([ofctl_monitor.log])
738
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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)'
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
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
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
756
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
757
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
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
768
ON_EXIT([kill `cat ovs-ofctl.pid`])
770
AT_CAPTURE_FILE([ofctl_monitor.log])
771
AT_CHECK([ovs-ofctl del-flows br0])
773
AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
775
dnl Test that missed packets are droped
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)'
779
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
781
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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):
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
796
ON_EXIT([kill `cat ovs-ofctl.pid`])
798
AT_CAPTURE_FILE([ofctl_monitor.log])
799
AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
801
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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)'
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
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
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
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):
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
833
ON_EXIT([kill `cat ovs-ofctl.pid`])
835
AT_CAPTURE_FILE([ofctl_monitor.log])
836
AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
838
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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)'
844
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
845
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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):
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
862
ON_EXIT([kill `cat ovs-ofctl.pid`])
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])
868
dnl Miss table 0, Hit table 1
869
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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)'
874
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
875
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
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
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
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
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])
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)'
894
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
895
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
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
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
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
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):
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
922
ON_EXIT([kill `cat ovs-ofctl.pid`])
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
929
AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
930
AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
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])
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)'
938
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
939
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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)'
958
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
959
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
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
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
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
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):
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
987
ON_EXIT([kill `cat ovs-ofctl.pid`])
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
994
AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
995
AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
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])
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)'
1003
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1005
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1008
dnl Hit table 1, Dropped
1009
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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)'
1014
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1016
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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):
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
1034
ON_EXIT([kill `cat ovs-ofctl.pid`])
1036
AT_CAPTURE_FILE([ofctl_monitor.log])
1037
AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1039
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1041
dnl Test that missed packets are droped
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)'
1045
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1047
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1050
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1051
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
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
1062
ON_EXIT([kill `cat ovs-ofctl.pid`])
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])
1069
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1071
dnl Test that missed packets are droped
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)'
1075
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1077
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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):
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
1094
ON_EXIT([kill `cat ovs-ofctl.pid`])
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])
1101
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1103
dnl Test that missed packets are droped
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)'
1107
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1109
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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):
1122
AT_SETUP([ofproto-dpif - controller])
1123
OVS_VSWITCHD_START([dnl
1124
add-port br0 p1 -- set Interface p1 type=dummy
1126
ON_EXIT([kill `cat ovs-ofctl.pid`])
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
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
1155
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1158
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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)'
1163
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1164
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
1177
dnl Singleton controller action.
1178
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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)'
1183
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1184
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1186
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1187
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
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
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
1197
dnl Modified controller action.
1198
AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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)'
1203
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1204
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1206
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1207
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
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
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
1217
dnl Modified VLAN controller action.
1218
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1221
ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44: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)'
1223
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1224
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1226
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1227
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1228
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
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
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
1237
dnl Modified MPLS controller action.
1238
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1241
ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44: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)'
1243
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1244
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1246
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1247
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1248
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1250
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1251
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1253
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1254
mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
1257
dnl Modified MPLS controller action.
1258
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1261
ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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)'
1263
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1264
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1266
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1267
NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=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
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
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
1277
dnl Modified MPLS controller action.
1278
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
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)
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)'
1285
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1286
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
1299
dnl Modified MPLS controller action.
1300
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
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))'
1305
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1306
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
1319
dnl Modified MPLS controller action.
1320
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
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)'
1325
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1326
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
1339
dnl Modified MPLS controller action.
1340
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
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)'
1345
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1346
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
1359
dnl Modified MPLS controller action.
1360
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
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)'
1365
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1366
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
1379
dnl Modified MPLS controller action.
1380
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
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)'
1385
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1386
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
1399
dnl Modified MPLS actions.
1400
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
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)'
1405
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1406
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
1419
dnl Modified MPLS ipv6 controller action.
1420
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
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)'
1425
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1426
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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)
1445
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
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'
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)'
1453
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1454
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
1468
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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)'
1473
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1474
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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
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
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
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
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
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
1506
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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'
1511
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1512
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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
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
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
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
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
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
1543
dnl Modified ARP controller action.
1544
AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
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)'
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
1573
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1576
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
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'
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
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
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
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
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
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
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
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
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
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
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
1648
ON_EXIT([kill `cat ovs-ofctl.pid`])
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'])
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])
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)'
1660
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1661
ovs-appctl -t ovs-ofctl exit
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
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
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
1674
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
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
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
1689
ON_EXIT([kill `cat ovs-ofctl.pid`])
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'])
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])
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)'
1701
OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1702
ovs-appctl -t ovs-ofctl exit
1704
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
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
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
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
1717
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
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):
1727
AT_SETUP([ofproto-dpif - ARP modification slow-path])
1729
ADD_OF_PORTS([br0], [1], [2])
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'
1734
# Input some packets that should follow the arp modification slow-path.
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)'
1738
AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
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
1756
AT_SETUP([ofproto-dpif - VLAN handling])
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 --])
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
1785
"100 10 0 1,5,6,7,8,pop_vlan,2" \
1786
"100 10 1 1,5,6,7,8,pop_vlan,2" \
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" \
1794
"1 10 0 5,6,7,8,100,pop_vlan,2" \
1795
"1 10 1 5,6,7,8,100,pop_vlan,2" \
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" \
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" \
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" \
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" \
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" \
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" \
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" \
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"
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)"
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))"
1876
echo "----------------------------------------------------------------------"
1877
echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1879
AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1880
actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1882
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1884
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1890
AT_SETUP([ofproto-dpif - MPLS handling])
1891
OVS_VSWITCHD_START([dnl
1892
add-port br0 p1 -- set Interface p1 type=dummy
1894
ON_EXIT([kill `cat ovs-ofctl.pid`])
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
1902
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
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])
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)'
1910
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1911
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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)'
1943
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1944
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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)'
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])
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
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
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
2007
AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
2008
OVS_VSWITCHD_START([dnl
2009
add-port br0 p1 -- set Interface p1 type=dummy
2011
ON_EXIT([kill `cat ovs-ofctl.pid`])
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
2026
AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
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])
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)'
2036
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2037
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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))'
2073
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2074
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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)'
2107
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2108
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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))'
2144
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2145
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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)'
2178
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2179
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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))'
2215
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2216
OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
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
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
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
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])
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)'
2249
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2250
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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))'
2286
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2287
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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))'
2320
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2321
OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
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
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
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
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])
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))'
2354
OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2355
ovs-appctl -t ovs-ofctl exit
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
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
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
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):
2398
AT_SETUP([ofproto-dpif - fragment handling])
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
2409
AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
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)"
2416
# mode no first later
2419
'drop 1 drop drop' \
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])
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
2437
echo "Datapath actions: $exp_output" >> expout
2438
AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2444
AT_SETUP([ofproto-dpif - exit])
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
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
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
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
2469
AT_SETUP([ofproto-dpif - mirroring, select_all])
2471
ADD_OF_PORTS([br0], 1, 2, 3)
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
2477
AT_DATA([flows.txt], [dnl
2478
in_port=1 actions=output:2
2479
in_port=2 actions=output:1
2481
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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
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
2499
AT_SETUP([ofproto-dpif - mirroring, select_src])
2501
ADD_OF_PORTS([br0], 1, 2, 3)
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
2507
AT_DATA([flows.txt], [dnl
2508
in_port=1 actions=output:2
2509
in_port=2 actions=output:1
2511
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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
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
2527
AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2529
ADD_OF_PORTS([br0], 1, 2)
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
2535
AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
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
2548
AT_SETUP([ofproto-dpif - mirroring, select_dst])
2550
ADD_OF_PORTS([br0], 1, 2, 3)
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
2556
AT_DATA([flows.txt], [dnl
2557
in_port=1 actions=output:2
2558
in_port=2 actions=output:1
2560
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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
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
2578
AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2580
ADD_OF_PORTS([br0], 1, 2, 3)
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
2586
AT_DATA([flows.txt], [dnl
2587
in_port=1, actions=output:2
2589
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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
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
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
2613
AT_SETUP([ofproto-dpif - mirroring, output_port])
2615
ADD_OF_PORTS([br0], 1, 2, 3)
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
2621
AT_DATA([flows.txt], [dnl
2622
in_port=1 actions=mod_vlan_vid:17,output:2
2623
in_port=2 actions=output:1
2625
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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
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
2642
AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2644
ADD_OF_PORTS([br0], 1, 2)
2646
set Bridge br0 mirrors=@m --\
2647
--id=@m create Mirror name=mymirror select_all=true output_vlan=12
2649
AT_DATA([flows.txt], [dnl
2650
in_port=1 actions=output:2
2651
in_port=2 actions=mod_vlan_vid:17,output:1
2653
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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: //'`
2659
expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2660
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2662
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
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: //'`
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])
2671
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
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)
2684
AT_DATA([flows.txt], [dnl
2685
in_port=1 actions=output:2
2686
in_port=2 actions=output:1
2688
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2690
odp_flow="in_port(p1)"
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
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
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
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
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])
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"
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
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
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
2743
3 0 50:54:00:00:00:05 ?
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
2753
3 0 50:54:00:00:00:05 ?
2754
1 0 50:54:00:00:00:06 ?
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
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 ?
2769
# This section beflow tests the [packet] option
2770
# The ovs-tcpundump of packets between port1 and port2
2771
pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2772
pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
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])
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])
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
2790
AT_CHECK([head -n 2 stdout], [0], [dnl
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
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
2801
AT_CHECK([head -n 2 stdout], [0], [dnl
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
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
2812
AT_CHECK([head -n 2 stdout], [0], [dnl
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
2820
# The second test tests the corner cases
2821
AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2823
ADD_OF_PORTS([br0], 1, 2)
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"
2829
generate="-generate"
2830
pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2832
# Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2838
[AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2840
AT_CHECK([tail -2 stderr], [0], [dnl
2841
Cannot find the datapath
2842
ovs-appctl: ovs-vswitchd: server returned an error
2845
# Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2851
[AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2853
AT_CHECK([tail -2 stderr], [0], [dnl
2854
Cannot find the datapath
2855
ovs-appctl: ovs-vswitchd: server returned an error
2858
# Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2864
[AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2866
AT_CHECK([tail -2 stderr], [0], [dnl
2867
Cannot find the datapath
2868
ovs-appctl: ovs-vswitchd: server returned an error
2871
# Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2877
[AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2879
AT_CHECK([tail -2 stderr], [0], [dnl
2880
Cannot find the datapath
2881
ovs-appctl: ovs-vswitchd: server returned an error
2884
# Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2890
[AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2892
AT_CHECK([tail -2 stderr], [0], [dnl
2894
ovs-appctl: ovs-vswitchd: server returned an error
2897
# Test incorrect command: ofproto/trace br_flow [-generate|packet]
2903
[AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2905
AT_CHECK([tail -2 stderr], [0], [dnl
2906
Must specify bridge name
2907
ovs-appctl: ovs-vswitchd: server returned an error
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
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
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
2937
AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2939
ADD_OF_PORTS([br0], 1, 2, 3)
2941
AT_DATA([flows.txt], [dnl
2942
in_port=1 actions=output:2
2943
in_port=2 actions=output:1
2945
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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
2956
m4_define([OFPROTO_TRACE],
2958
AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2959
actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2961
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2964
AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
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)
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)'
2973
# Trace an ARP packet arriving on p3, to create a MAC learning entry.
2976
[in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2980
# Check for the MAC learning entry.
2981
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2983
3 0 50:54:00:00:00:05 ?
2986
# Trace a packet arrival destined for the learned MAC.
2987
# (This will also learn a MAC.)
2990
[in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2994
# Check for both MAC learning entries.
2995
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2997
3 0 50:54:00:00:00:05 ?
2998
1 0 50:54:00:00:00:06 ?
3001
# Trace a packet arrival that updates the first learned MAC entry.
3004
[in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
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
3011
1 0 50:54:00:00:00:06 ?
3012
2 0 50:54:00:00:00:05 ?
3015
# Add another bridge.
3019
-- set bridge br1 datapath-type=dummy])
3020
ADD_OF_PORTS([br1], 4, 5)
3022
# Trace some packet arrivals in br1 to create MAC learning entries there too.
3025
[in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
3030
[in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
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
3037
4 0 50:54:00:00:00:06 ?
3038
5 0 50:54:00:00:00:07 ?
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
3046
2 0 50:54:00:00:00:05 ?
3048
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
3050
5 0 50:54:00:00:00:07 ?
3056
AT_SETUP([ofproto-dpif - MAC table overflow])
3058
[set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
3059
ADD_OF_PORTS([br0], 1, 2, 3)
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)'
3063
AT_CHECK([ovs-appctl time/stop])
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
3069
[in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
3072
ovs-appctl time/warp 1000
3075
# Check for the MAC learning entries.
3076
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
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
3091
# Trace another ARP packet on another MAC.
3094
[in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
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],
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 ?
3116
AT_SETUP([ofproto-dpif - MAC table overflow fairness])
3118
[set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
3119
ADD_OF_PORTS([br0], 1, 2, 3, 4, 5, 6)
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)'
3123
AT_CHECK([ovs-appctl time/stop])
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
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
3133
# Check for the MAC learning entries.
3134
AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
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
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
3155
# Check the results.
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.
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],
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
3182
# CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3184
# Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
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])
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
3197
ADD_OF_PORTS([br0], 1, 2)
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
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
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)'
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)'
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)'
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)'
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
3231
ovs-appctl -t test-sflow exit
3233
AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
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
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
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
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
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
3337
AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3351
in_broadcasts=4294967295
3354
in_unknownprotos=4294967295
3357
out_multicasts=4294967295
3358
out_broadcasts=4294967295
3374
in_broadcasts=4294967295
3377
in_unknownprotos=4294967295
3380
out_multicasts=4294967295
3381
out_broadcasts=4294967295
3397
in_broadcasts=4294967295
3400
in_unknownprotos=4294967295
3403
out_multicasts=4294967295
3404
out_broadcasts=4294967295
3420
in_broadcasts=4294967295
3423
in_unknownprotos=4294967295
3426
out_multicasts=4294967295
3427
out_broadcasts=4294967295
3443
in_broadcasts=4294967295
3446
in_unknownprotos=4294967295
3449
out_multicasts=4294967295
3450
out_broadcasts=4294967295
3466
in_broadcasts=4294967295
3469
in_unknownprotos=4294967295
3472
out_multicasts=4294967295
3473
out_broadcasts=4294967295
3480
CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3481
CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3483
# CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
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.
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)
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`
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
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)'
3513
ovs-appctl time/warp $delay
3516
ovs-appctl time/warp 6000
3519
ovs-appctl -t test-netflow exit
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])
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])
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])
3531
CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3532
CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3534
# CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3536
# Test that basic NetFlow reports active expirations correctly.
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])
3542
OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3543
ADD_OF_PORTS([br0], 1, 2)
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`
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
3555
AT_CHECK([ovs-appctl time/stop])
3557
while test $n -le 60; do
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)'
3563
ovs-appctl time/warp 1000
3566
ovs-appctl time/warp 10000
3570
ovs-appctl -t test-netflow exit
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.
3583
pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3590
"seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3593
"seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3596
"seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3603
eval $counter=\`expr \$$counter + \$pkts\`
3604
n_recs=`expr $n_recs + 1`
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
3615
CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3616
CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3618
AT_SETUP([ofproto-dpif - flow stats])
3620
AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3621
AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3623
ovs-appctl time/stop
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)'
3629
ovs-appctl time/warp 1000
3630
sleep 1 # wait for revalidator to update stats
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
3640
AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3642
AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3643
AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3645
ovs-appctl time/stop
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)'
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
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
3663
AT_SETUP([idle_age and hard_age increase over time])
3666
# get_ages DURATION HARD IDLE
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
3674
AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
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])
3680
hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3681
if test X"$hard" = X; then
3684
AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3686
AS_VAR_COPY([$2], [hard])
3688
idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3689
if test X"$idle" = X; then
3692
AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3694
AS_VAR_COPY([$3], [idle])
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
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])
3707
# Warp time forward by 10 seconds.
3708
ovs-appctl time/warp 10000
3709
get_ages duration3 hard3 idle3
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
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
3720
get_ages duration4 hard4 idle4
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
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])
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])
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])
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])
3755
AT_SETUP([ofproto-dpif - fin_timeout])
3757
AT_DATA([flows.txt], [dnl
3758
in_port=1 actions=output:2
3759
in_port=2 actions=mod_vlan_vid:17,output:1
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],
3765
idle_timeout=60, actions=fin_timeout(idle_timeout=5)
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
3777
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3779
n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
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
3786
AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3788
n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
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])
3798
AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
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])
3810
AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3811
dummy@ovs-dummy: hit:0 missed:0
3813
br0 65534/100: (dummy)
3817
br1 65534/101: (dummy)
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])
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
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
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
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
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
3860
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3861
ON_EXIT([kill `cat ovs-ofctl.pid`])
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
3868
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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.
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
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"])
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))
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
3897
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3898
ON_EXIT([kill `cat ovs-ofctl.pid`])
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
3905
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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.
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
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"])
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))
3932
AT_SETUP([ofproto-dpif - patch ports])
3933
OVS_VSWITCHD_START([add-br br1 \
3935
ADD_OF_PORTS([br0], [2])
3936
ADD_OF_PORTS([br1], [3])
3938
AT_CHECK([ovs-appctl time/stop])
3939
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3941
AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3942
AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3944
for i in $(seq 1 10); do
3945
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)'
3946
if [[ $i -eq 1 ]]; then
3951
for i in $(seq 1 5); do
3952
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)'
3953
if [[ $i -eq 1 ]]; then
3958
AT_CHECK([ovs-appctl time/warp 500], [0],
3961
sleep 1 # wait for log writer
3963
AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3964
dummy@ovs-dummy: hit:13 missed:2
3966
br0 65534/100: (dummy)
3968
pbr0 1/none: (patch: peer=pbr1)
3970
br1 65534/101: (dummy)
3972
pbr1 1/none: (patch: peer=pbr0)
3975
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3976
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
3977
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
3980
AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3981
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
3983
AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3984
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
3987
AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3988
OFPST_PORT reply (xid=0x4): 1 ports
3989
port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3990
tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3993
AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3994
OFPST_PORT reply (xid=0x4): 1 ports
3995
port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3996
tx pkts=5, bytes=300, drop=0, errs=0, coll=0
4002
AT_SETUP([ofproto-dpif - port duration])
4003
OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
4004
ADD_OF_PORTS([br0], 1, 2)
4006
ovs-appctl time/stop
4007
ovs-appctl time/warp 10000
4009
AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
4010
AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
4019
dnl ----------------------------------------------------------------------
4020
AT_BANNER([ofproto-dpif -- megaflows])
4022
AT_SETUP([ofproto-dpif megaflow - port classification])
4024
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4025
ADD_OF_PORTS([br0], [1], [2])
4026
AT_DATA([flows.txt], [dnl
4027
table=0 in_port=1 actions=output(2)
4029
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4030
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)'])
4032
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)'])
4034
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4035
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>
4040
AT_SETUP([ofproto-dpif megaflow - L2 classification])
4042
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4043
ADD_OF_PORTS([br0], [1], [2])
4044
AT_DATA([flows.txt], [dnl
4045
table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
4047
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4048
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)'])
4049
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)'])
4051
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4052
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>
4053
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>
4058
AT_SETUP([ofproto-dpif megaflow - L3 classification])
4060
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4061
ADD_OF_PORTS([br0], [1], [2])
4062
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], [])
4063
AT_DATA([flows.txt], [dnl
4064
table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
4066
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4067
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)'])
4068
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)'])
4070
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4071
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>
4072
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>
4077
AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
4079
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4080
ADD_OF_PORTS([br0], [1], [2])
4081
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], [])
4082
AT_DATA([flows.txt], [dnl
4083
table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
4085
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4086
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)'])
4087
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)'])
4089
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4090
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>
4091
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>
4096
AT_SETUP([ofproto-dpif megaflow - L4 classification])
4098
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4099
ADD_OF_PORTS([br0], [1], [2])
4100
AT_DATA([flows.txt], [dnl
4101
table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
4103
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4104
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)'])
4106
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)'])
4108
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4109
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>
4114
AT_SETUP([ofproto-dpif megaflow - normal])
4116
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4117
ADD_OF_PORTS([br0], [1], [2])
4118
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4119
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)'])
4120
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)'])
4122
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4123
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>
4124
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>
4129
AT_SETUP([ofproto-dpif megaflow - mpls])
4131
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4132
ADD_OF_PORTS([br0], [1], [2])
4133
AT_DATA([flows.txt], [dnl
4134
table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
4135
table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
4137
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4138
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
4139
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
4141
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4142
skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/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>
4143
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>
4148
# CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4150
# IP_VERSION_TYPE is used in AT_SETUP
4151
m4_define([CHECK_MEGAFLOW_NETFLOW],
4152
[AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4154
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4155
ADD_OF_PORTS([br0], [1], [2])
4157
dnl NetFlow configuration disables wildcarding relevant fields
4158
ON_EXIT([kill `cat test-netflow.pid`])
4159
AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4160
AT_CAPTURE_FILE([netflow.log])
4161
NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4163
set Bridge br0 netflow=@nf -- \
4164
--id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4165
engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4167
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4168
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)'])
4169
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)'])
4171
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4172
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>
4173
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>
4178
CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4179
CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4181
AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4183
[add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4184
add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4185
set interface p2 type=dummy ofport_request=2 -- \
4186
set interface p3 type=dummy ofport_request=3])
4187
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4189
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4191
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4192
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)'])
4193
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)'])
4195
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4196
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>
4197
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>
4202
AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4204
[add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4205
add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4206
set interface p2 type=dummy ofport_request=2 -- \
4207
set interface p3 type=dummy ofport_request=3])
4208
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4210
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4212
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4213
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)'])
4214
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)'])
4216
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4217
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>
4218
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>
4223
AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4224
# Create bond0 on br0 with interfaces p0 and p1
4225
# and bond1 on br1 with interfaces p2 and p3
4226
# with p0 patched to p2 and p1 patched to p3.
4228
[add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4229
other-config:lacp-time=fast \
4230
other-config:bond-rebalance-interval=0 -- \
4231
set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4232
set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4234
set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4235
set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4236
fail-mode=secure -- \
4237
add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4238
other-config:lacp-time=fast \
4239
other-config:bond-rebalance-interval=0 -- \
4240
set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4241
set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4243
AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4245
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4246
ADD_OF_PORTS([br0], [7])
4247
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4248
AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4249
ovs-appctl time/stop
4250
ovs-appctl time/warp 5000
4251
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)'])
4252
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)'])
4254
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4255
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>
4256
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>
4261
AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4263
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4264
ADD_OF_PORTS([br0], [1], [2])
4265
AT_DATA([flows.txt], [dnl
4266
table=0 in_port=1,ip actions=resubmit(90)
4267
table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4269
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4270
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)'])
4271
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)'])
4273
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4274
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>
4275
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>
4280
AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4282
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4283
ADD_OF_PORTS([br0], [1], [2])
4284
AT_DATA([flows.txt], [dnl
4285
table=0 in_port=1,ip actions=resubmit(,1)
4286
table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4288
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4289
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)'])
4290
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=
4291
1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4293
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4294
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>
4295
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>
4300
AT_SETUP([ofproto-dpif megaflow - goto_table action])
4302
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4303
ADD_OF_PORTS([br0], [1], [2])
4304
AT_DATA([flows.txt], [dnl
4305
table=0 in_port=1,ip actions=goto_table(1)
4306
table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4308
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4309
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4310
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4312
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4313
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>
4314
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>
4319
AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4321
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4322
ADD_OF_PORTS([br0], [1], [2], [3])
4324
set Bridge br0 mirrors=@m --\
4325
--id=@p3 get Port p3 --\
4326
--id=@m create Mirror name=mymirror select_all=true output_port=@p3
4328
AT_DATA([flows.txt], [dnl
4329
in_port=1 actions=output:2
4331
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4332
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)'])
4334
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)'])
4336
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4337
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>
4342
AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4344
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4345
ADD_OF_PORTS([br0], [1], [2], [3])
4347
set Bridge br0 mirrors=@m --\
4348
--id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4349
--id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4351
AT_DATA([flows.txt], [dnl
4352
in_port=1 actions=output:2
4354
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4355
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))'])
4356
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)'])
4358
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4359
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>
4360
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>
4365
AT_SETUP([ofproto-dpif megaflow - move action])
4367
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4368
ADD_OF_PORTS([br0], [1], [2])
4369
AT_DATA([flows.txt], [dnl
4370
table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4371
table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4372
table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4374
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4375
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)'])
4376
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)'])
4378
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4379
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>
4380
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>
4385
AT_SETUP([ofproto-dpif megaflow - push action])
4387
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4388
ADD_OF_PORTS([br0], [1], [2])
4389
AT_DATA([flows.txt], [dnl
4390
table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4392
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4393
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)'])
4394
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)'])
4396
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4397
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>
4398
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>
4403
AT_SETUP([ofproto-dpif megaflow - learning])
4405
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4406
ADD_OF_PORTS([br0], [1], [2])
4407
AT_DATA([flows.txt], [dnl
4408
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
4410
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4411
ovs-appctl time/stop
4412
# We send each packet twice because the first packet in each flow causes the
4413
# flow table to change and thus revalidations, which (depending on timing)
4414
# can keep a megaflow from being installed. The revalidations are done by
4415
# the second iteration, allowing the flows to be installed.
4417
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)'])
4418
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)'])
4419
ovs-appctl time/warp 100
4422
dnl The original flow is missing due to a revalidation.
4423
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4424
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>
4425
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>
4430
AT_SETUP([ofproto-dpif megaflow - tunnels])
4432
[add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4433
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4434
AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4435
options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4436
AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4438
AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4439
options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4440
ofport_request=4 options:key=flow])
4441
AT_DATA([flows.txt], [dnl
4442
in_port=1,actions=output(2)
4443
in_port=3,actions=output(4)
4445
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4446
dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4447
dnl will cause the packet to be dropped.
4448
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
4450
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)'])
4451
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)'])
4453
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)'])
4455
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4456
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>
4457
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>
4458
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>
4463
AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4465
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4466
ADD_OF_PORTS([br0], [1], [2])
4467
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], [])
4468
AT_DATA([flows.txt], [dnl
4469
table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4471
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4472
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)'])
4473
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)'])
4475
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4476
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>
4477
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>
4482
AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4484
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4485
ADD_OF_PORTS([br0], [1], [2])
4486
AT_DATA([flows.txt], [dnl
4487
table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4489
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4490
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)'])
4491
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)'])
4493
dnl The megaflows do not match the same fields, since the first packet
4494
dnl is essentially a no-op. (The new destination MAC is the same as the
4495
dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4496
dnl so that a packet that doesn't need its MAC address changed doesn't
4497
dnl hide one that does. Since the first entry doesn't need to change,
4498
dnl only the destination MAC address is matched (as decided by
4499
dnl ofproto-dpif). The second entry actually updates the destination
4500
dnl MAC, so both the source and destination MAC addresses are
4501
dnl un-wildcarded, since the ODP commit functions update both the source
4502
dnl and destination MAC addresses.
4503
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4504
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
4505
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
4510
AT_SETUP([ofproto-dpif megaflow - disabled])
4512
AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4513
ADD_OF_PORTS([br0], [1], [2])
4514
AT_DATA([flows.txt], [dnl
4515
table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4516
table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4518
AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4520
AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4521
AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4522
for i in 1 2 3 4; do
4523
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)'])
4524
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)'])
4525
if [[ $i -eq 1 ]]; then
4530
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4531
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
4532
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
4534
AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
4535
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
4536
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
4541
AT_SETUP([ofproto-dpif - datapath port number change])
4542
OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4543
ADD_OF_PORTS([br0], 1)
4545
# Trace a flow that should output to p1.
4546
AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4548
AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4551
# Change p1's port number to 5.
4552
AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4554
# Trace a flow that should output to p1 in its new location.
4555
AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4557
AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4562
# Tests the bundling with various bfd and cfm configurations.
4563
AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4564
OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4565
add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4566
add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4567
set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4568
set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4569
set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4570
set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4571
set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4572
set Interface p0 cfm_mpid=1 -- \
4573
set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4575
ovs-appctl time/stop
4576
# advance the clock to stablize everything.
4577
for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4578
# cfm/show should show 'recv' fault.
4579
AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4582
# bfd/show should show 'up'.
4583
AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4584
Local Session State: up
4585
Remote Session State: up
4586
Local Session State: up
4587
Remote Session State: up
4589
# bond/show should show 'may-enable: true' for all slaves.
4590
AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4597
# now disable the bfd on p1.
4598
AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4599
# advance the clock to stablize everything.
4600
for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4601
# cfm/show should show 'recv' fault.
4602
AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4605
# bfd/show should show 'down'.
4606
AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4607
Local Session State: down
4608
Remote Session State: down
4610
# bond/show should show 'may-enable: false' for p0.
4611
AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4616
# now enable the bfd on p1 and disable bfd on p0.
4617
AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4618
AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4619
# advance the clock to stablize everything.
4620
for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4621
# cfm/show should show 'recv' fault.
4622
AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4625
# bfd/show should show 'down'.
4626
AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4627
Local Session State: down
4628
Remote Session State: down
4630
# bond/show should show 'may-enable: false' for p0 and p1.
4631
AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4641
AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4642
OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4645
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4647
OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4648
# disable bfd on p0.
4649
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4651
OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4652
AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4655
AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4657
OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4658
# disable cfm on p0.
4659
AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4661
OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4662
AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4664
# enable both bfd and cfm on p0.
4665
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4667
OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4668
# disable bfd on p0.
4669
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4670
# check log, there should not be the log of thread terminated.
4671
AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4673
# reenable bfd on p0.
4674
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4675
# check log, should still be on log of thread created.
4676
AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4677
monitor thread created
4679
# disable bfd and cfm together.
4680
AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4682
OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4687
# this test helps avoid the deadlock between the main thread and monitor thread.
4688
AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4691
for i in `seq 1 199`
4693
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])
4699
AT_BANNER([ofproto-dpif - flow translation resource limits])
4701
AT_SETUP([ofproto-dpif - infinite resubmit])
4703
AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4704
AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4706
AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4708
AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4711
OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4714
AT_SETUP([ofproto-dpif - exponential resubmit chain])
4716
ADD_OF_PORTS([br0], 1)
4717
(for i in `seq 1 64`; do
4719
echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4721
echo "in_port=65, actions=local") > flows
4722
AT_CHECK([ovs-ofctl add-flows br0 flows])
4723
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4724
AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4726
OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4729
AT_SETUP([ofproto-dpif - too many output actions])
4731
ADD_OF_PORTS([br0], 1)
4732
(for i in `seq 1 12`; do
4734
echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4736
echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4737
AT_CHECK([ovs-ofctl add-flows br0 flows])
4738
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4739
AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4742
AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4744
OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4747
AT_SETUP([ofproto-dpif - stack too deep])
4749
ADD_OF_PORTS([br0], 1)
4750
(for i in `seq 1 12`; do
4752
echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4754
push="push:NXM_NX_REG0[[]]"
4755
echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4756
AT_CHECK([ovs-ofctl add-flows br0 flows])
4757
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4758
AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4760
OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
4763
AT_SETUP([ofproto-dpif - ICMPv6])
4765
ADD_OF_PORTS([br0], 1)
4767
AT_CAPTURE_FILE([ofctl_monitor.log])
4769
AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4771
ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
4773
OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4775
AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4776
NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
4777
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
4783
# Tests the exact match of CFI bit in installed datapath flows matching VLAN.
4784
AT_SETUP([ofproto-dpif - vlan matching])
4786
[add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
4787
AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
4789
AT_CHECK([ovs-ofctl del-flows br0])
4790
AT_CHECK([ovs-ofctl add-flow br0 "vlan_tci=0x000a/0x0fff,action=output:local"])
4792
AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=10,pcp=0),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))'])
4794
AT_CHECK([cat ovs-vswitchd.log | grep 'in_port(1)' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4795
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=10/0xfff,pcp=0/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>