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