]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ofproto-dpif.at
coverage: Fix build when linker sections not supported.
[mirror_ovs.git] / tests / ofproto-dpif.at
CommitLineData
29901626
BP
1AT_BANNER([ofproto-dpif])
2
3AT_SETUP([ofproto-dpif - resubmit])
023e1e0a 4OVS_VSWITCHD_START
f7b8e494
JP
5ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
6 [16], [17], [18], [19], [20], [21])
29901626
BP
7AT_DATA([flows.txt], [dnl
8table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
9table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
10table=0 in_port=3 priority=2000 icmp actions=output(20)
11table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
12table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
13table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
14])
15AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31a19d69 16AT_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
17AT_CHECK([tail -1 stdout], [0],
18 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
19])
023e1e0a 20OVS_VSWITCHD_STOP
29901626 21AT_CLEANUP
58a89177 22
55599423
JR
23AT_SETUP([ofproto-dpif - goto table])
24OVS_VSWITCHD_START
25ADD_OF_PORTS([br0], [1], [10], [11])
26echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
4468099e
EJ
27for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
28echo "table=64 actions=output(11)" >> flows.txt
55599423
JR
29AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
30AT_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])
31AT_CHECK([tail -1 stdout], [0],
32 [Datapath actions: 10,11
33])
34OVS_VSWITCHD_STOP
35AT_CLEANUP
36
7fdb60a7
SH
37AT_SETUP([ofproto-dpif - write actions])
38OVS_VSWITCHD_START
39ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
40AT_DATA([flows.txt], [dnl
41table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
42table=1 ip actions=write_actions(output(13)),goto_table(2)
43table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
44])
45AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
46AT_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])
47AT_CHECK([tail -1 stdout], [0],
48 [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
49])
50OVS_VSWITCHD_STOP
51AT_CLEANUP
52
53AT_SETUP([ofproto-dpif - clear actions])
54OVS_VSWITCHD_START
55ADD_OF_PORTS([br0], [1], [10], [11], [12])
56AT_DATA([flows.txt], [dnl
57table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
58table=1 ip actions=set_field:192.168.3.91->ip_src,output(11),clear_actions
59])
60AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
61AT_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])
62AT_CHECK([tail -1 stdout], [0],
63 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
64])
65OVS_VSWITCHD_STOP
66AT_CLEANUP
67
f4fb341b
SH
68AT_SETUP([ofproto-dpif - all group in action list])
69OVS_VSWITCHD_START
70ADD_OF_PORTS([br0], [1], [10], [11])
71AT_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'])
72AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
73AT_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])
74AT_CHECK([tail -1 stdout], [0],
75 [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
76])
77OVS_VSWITCHD_STOP
78AT_CLEANUP
79
80AT_SETUP([ofproto-dpif - indirect group in action list])
81OVS_VSWITCHD_START
82ADD_OF_PORTS([br0], [1], [10])
83AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
84AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
85AT_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])
86AT_CHECK([tail -1 stdout], [0],
87 [Datapath actions: 10
88])
89OVS_VSWITCHD_STOP
90AT_CLEANUP
91
92AT_SETUP([ofproto-dpif - all group in action set])
93OVS_VSWITCHD_START
94ADD_OF_PORTS([br0], [1], [10], [11])
95AT_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'])
96AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
97AT_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])
98AT_CHECK([tail -1 stdout], [0],
99 [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
100])
101OVS_VSWITCHD_STOP
102AT_CLEANUP
103
104AT_SETUP([ofproto-dpif - indirect group in action set])
105OVS_VSWITCHD_START
106ADD_OF_PORTS([br0], [1], [10])
107AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
108AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
109AT_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])
110AT_CHECK([tail -1 stdout], [0],
111 [Datapath actions: 10
112])
113OVS_VSWITCHD_STOP
114AT_CLEANUP
115
fe7e5749
SH
116AT_SETUP([ofproto-dpif - select group])
117OVS_VSWITCHD_START
118ADD_OF_PORTS([br0], [1], [10], [11])
119AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
120AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
7cb279c2
SH
121
122# Try a bunch of different flows and make sure that they get distributed
123# at least somewhat.
124for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
125 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])
126 tail -1 stdout >> results
127done
128sort results | uniq -c
129AT_CHECK([sort results | uniq], [0],
fe7e5749 130 [Datapath actions: 10
7cb279c2 131Datapath actions: 11
fe7e5749
SH
132])
133OVS_VSWITCHD_STOP
134AT_CLEANUP
135
136AT_SETUP([ofproto-dpif - select group with watch port])
137OVS_VSWITCHD_START
138ADD_OF_PORTS([br0], [1], [10], [11])
139AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
140AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
141AT_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])
142AT_CHECK([tail -1 stdout], [0],
143 [Datapath actions: 11
144])
145OVS_VSWITCHD_STOP
146AT_CLEANUP
147
7cb279c2
SH
148AT_SETUP([ofproto-dpif - select group with weight])
149OVS_VSWITCHD_START
150ADD_OF_PORTS([br0], [1], [10], [11], [12])
151AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2,bucket=output:12,weight=0'])
152AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
153AT_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])
154AT_CHECK([tail -1 stdout], [0],
155 [Datapath actions: 11
156])
157OVS_VSWITCHD_STOP
158AT_CLEANUP
159
dd8cd4b4
SH
160AT_SETUP([ofproto-dpif - fast failover group])
161OVS_VSWITCHD_START
162ADD_OF_PORTS([br0], [1], [10], [11])
163AT_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'])
164AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
165AT_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])
166AT_CHECK([tail -1 stdout], [0],
167 [Datapath actions: drop
168])
169OVS_VSWITCHD_STOP
170AT_CLEANUP
171
58a89177 172AT_SETUP([ofproto-dpif - registers])
023e1e0a 173OVS_VSWITCHD_START
f7b8e494 174ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
58a89177
EJ
175AT_DATA([flows.txt], [dnl
176in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
177in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
e9358af6
EJ
178in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
179in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
180
58a89177
EJ
181in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
182in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
183in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
184in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
185in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
186in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
187in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
188in_port=9,reg0=0xdeadbeef actions=output:20
189in_port=10,reg1=0xdeadbeef actions=output:21
190in_port=11,reg2=0xeef22dea actions=output:22
e9358af6
EJ
191
192dnl Sanilty check all registers
193in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
194in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
195in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
196in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
bd85dac1 197
58a89177
EJ
198])
199AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 200AT_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 201AT_CHECK([tail -1 stdout], [0],
e9358af6 202 [Datapath actions: 20,21,22,33
58a89177 203])
023e1e0a 204OVS_VSWITCHD_STOP
58a89177 205AT_CLEANUP
f694937d 206
bd85dac1
AZ
207AT_SETUP([ofproto-dpif - push-pop])
208OVS_VSWITCHD_START
209ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
210AT_DATA([flows.txt], [dnl
211in_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
212in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
213in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
214in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
215in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
216
217])
218AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 219AT_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
220AT_CHECK([tail -1 stdout], [0],
221 [Datapath actions: 33,22,21,20
222])
223OVS_VSWITCHD_STOP
224AT_CLEANUP
225
f694937d 226AT_SETUP([ofproto-dpif - output])
023e1e0a 227OVS_VSWITCHD_START
f7b8e494 228ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
f694937d 229AT_DATA([flows.txt], [dnl
557323cd 230in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
f694937d
EJ
231in_port=2 actions=output:9
232in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
233in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
234in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
235in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
236in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
557323cd 237in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
f694937d
EJ
238])
239AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 240AT_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 241AT_CHECK([tail -1 stdout], [0],
557323cd 242 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
f694937d 243])
023e1e0a 244OVS_VSWITCHD_STOP
f694937d 245AT_CLEANUP
8e9ce036 246
f0fd1a17
PS
247AT_SETUP([ofproto-dpif - dec_ttl])
248OVS_VSWITCHD_START
f7b8e494 249ADD_OF_PORTS([br0], [1], [2], [3], [4])
f0fd1a17
PS
250AT_DATA([flows.txt], [dnl
251table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
252table=1 in_port=1 action=dec_ttl,output:3
253])
254AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
8249a1fe 255AT_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 256AT_CHECK([tail -3 stdout], [0],
8249a1fe 257 [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
258This flow is handled by the userspace slow path because it:
259 - Sends "packet-in" messages to the OpenFlow controller.
f0fd1a17 260])
8249a1fe 261AT_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 262AT_CHECK([tail -1 stdout], [0],
8249a1fe 263 [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 264])
50aa28fd 265AT_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
266AT_CHECK([tail -1 stdout], [0],
267 [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
268])
269
982697a4 270AT_CAPTURE_FILE([ofctl_monitor.log])
77a922c7 271AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8249a1fe 272AT_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
273OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
274AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8249a1fe
JR
275NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
276ip,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
277])
278OVS_VSWITCHD_STOP
279AT_CLEANUP
280
281
77750738 282AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
e44768b7
JP
283OVS_VSWITCHD_START
284ADD_OF_PORTS([br0], [1], [2])
77750738 285
77750738
JP
286AT_CHECK([ovs-ofctl add-flow br0 action=normal])
287
288# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 289flow="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 290AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
72d64e33
EJ
291AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
2921
2932
294100
295])
77750738
JP
296
297OVS_VSWITCHD_STOP
298AT_CLEANUP
299
8b36f51e 300AT_SETUP([ofproto-dpif - DSCP])
8b36f51e 301OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
72d64e33 302ADD_OF_PORTS([br0], [9])
8b36f51e 303AT_DATA([flows.txt], [dnl
bdda5aca 304actions=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
305])
306AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
307AT_CHECK([ovs-vsctl -- \
308 set Port p1 qos=@newqos --\
309 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
310 --id=@q1 create Queue dscp=1 --\
311 --id=@q2 create Queue dscp=2], [0], [ignore])
50aa28fd 312AT_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
313AT_CHECK([tail -1 stdout], [0],
314 [Datapath actions: dnl
e44768b7 315100,dnl
1b567fb9
AA
316set(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
317set(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 3181,dnl
1b567fb9
AA
319set(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
320set(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 321set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
e44768b7 322100
8b36f51e
EJ
323])
324OVS_VSWITCHD_STOP
325AT_CLEANUP
326
fd19297b 327AT_SETUP([ofproto-dpif - output/flood flags])
f7b8e494
JP
328OVS_VSWITCHD_START
329ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
fd19297b
EJ
330
331AT_DATA([flows.txt], [dnl
a0fbe94a 332in_port=local actions=local,flood
fd19297b
EJ
333in_port=1 actions=flood
334in_port=2 actions=all
bdda5aca
BP
335in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
336in_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
337])
338AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
339AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
340AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
341
50aa28fd 342AT_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
343AT_CHECK([tail -1 stdout \
344| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
3451
3462
3473
3484
3497
350])
351
50aa28fd 352AT_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
353AT_CHECK([tail -1 stdout \
354| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
e44768b7 355100
fd19297b
EJ
3562
3573
3584
3597
360])
361
50aa28fd 362AT_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
363AT_CHECK([tail -1 stdout \
364| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
fd19297b 3651
e44768b7 366100
fd19297b
EJ
3673
3684
3696
3707
371])
372
50aa28fd 373AT_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 374AT_CHECK([tail -1 stdout], [0],
e44768b7 375 [Datapath actions: 100,1,2,4,6,7
fd19297b
EJ
376])
377
50aa28fd 378AT_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 379AT_CHECK([tail -1 stdout], [0],
1b567fb9 380 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
fd19297b
EJ
381])
382OVS_VSWITCHD_STOP
383AT_CLEANUP
384
15056dc8
EJ
385AT_SETUP([ofproto-dpif - controller])
386OVS_VSWITCHD_START([dnl
387 add-port br0 p1 -- set Interface p1 type=dummy
388])
57c94f35 389ON_EXIT([kill `cat ovs-ofctl.pid`])
15056dc8
EJ
390
391AT_CAPTURE_FILE([ofctl_monitor.log])
392AT_DATA([flows.txt], [dnl
393cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
54834960 394cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
15056dc8
EJ
395cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
396
54834960
EJ
397cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
398cookie=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)
399cookie=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)
400cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
401cookie=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)
402cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
403cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
78cef7fd 404cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
b02475c5 405cookie=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 406cookie=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
407cookie=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
408cookie=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 409cookie=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
410cookie=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
411cookie=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
412cookie=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
413cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
414cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
415cookie=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 416cookie=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
417])
418AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
419
420dnl Flow miss.
77a922c7 421AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
422
423for i in 1 2 3 ; do
dc235f7f 424 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 425done
57c94f35
BP
426OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
427ovs-appctl -t ovs-ofctl exit
15056dc8 428
15056dc8 429AT_CHECK([cat ofctl_monitor.log], [0], [dnl
f0fd1a17 430OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 431tcp,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 432dnl
f0fd1a17 433OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 434tcp,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 435dnl
f0fd1a17 436OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
dc235f7f 437tcp,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
438])
439
440dnl Singleton controller action.
77a922c7 441AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
442
443for i in 1 2 3 ; do
dc235f7f 444 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 445done
57c94f35
BP
446OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
447ovs-appctl -t ovs-ofctl exit
15056dc8 448
15056dc8
EJ
449AT_CHECK([cat ofctl_monitor.log], [0], [dnl
450OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 451tcp,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
452dnl
453OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 454tcp,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
455dnl
456OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 457tcp,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
458])
459
460dnl Modified controller action.
77a922c7 461AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
462
463for i in 1 2 3 ; do
dc235f7f 464 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 465done
57c94f35
BP
466OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
467ovs-appctl -t ovs-ofctl exit
15056dc8 468
15056dc8
EJ
469AT_CHECK([cat ofctl_monitor.log], [0], [dnl
470OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 471tcp,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
472dnl
473OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 474tcp,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
475dnl
476OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
dc235f7f 477tcp,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
478])
479
363dd1d9
JS
480dnl Modified VLAN controller action.
481AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
482
483for i in 1 2 3; do
8249a1fe 484 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 485done
57c94f35
BP
486OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
487ovs-appctl -t ovs-ofctl exit
363dd1d9 488
363dd1d9
JS
489AT_CHECK([cat ofctl_monitor.log], [0], [dnl
490NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 491ip,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
492dnl
493NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 494ip,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
495dnl
496NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
8249a1fe 497ip,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
498])
499
b02475c5
SH
500dnl Modified MPLS controller action.
501AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
502
503for i in 1 2 3; do
8249a1fe 504 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 505done
57c94f35
BP
506OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
507ovs-appctl -t ovs-ofctl exit
b02475c5 508
b02475c5
SH
509AT_CHECK([cat ofctl_monitor.log], [0], [dnl
510NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 511mpls,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
512dnl
513NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 514mpls,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
515dnl
516NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 517mpls,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
518])
519
520dnl Modified MPLS controller action.
521AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
522
b0a17866 523for i in 1 2 3; do
8249a1fe 524 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
525done
526OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
527ovs-appctl -t ovs-ofctl exit
528
529AT_CHECK([cat ofctl_monitor.log], [0], [dnl
530NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 531ip,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
532dnl
533NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 534ip,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
535dnl
536NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
8249a1fe 537ip,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
538])
539
540dnl Modified MPLS controller action.
541AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
542
b02475c5
SH
543dnl 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)
544
545for i in 1 2 3; do
546 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)'
547done
548
549OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
550AT_CHECK([cat ofctl_monitor.log], [0], [dnl
551NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 552mpls,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
b02475c5
SH
553dnl
554NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 555mpls,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
b02475c5
SH
556dnl
557NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 558mpls,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
b02475c5
SH
559])
560
561dnl Modified MPLS controller action.
562AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
563
564for i in 1 2 3; do
8249a1fe 565 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 566done
57c94f35
BP
567OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
568ovs-appctl -t ovs-ofctl exit
b02475c5 569
b02475c5
SH
570AT_CHECK([cat ofctl_monitor.log], [0], [dnl
571NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 572mpls,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
573dnl
574NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 575mpls,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
576dnl
577NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 578mpls,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
579])
580
b676167a
SH
581dnl Modified MPLS controller action.
582AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
583
584for i in 1 2 3; do
8249a1fe 585 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 586done
57c94f35
BP
587OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
588ovs-appctl -t ovs-ofctl exit
b676167a 589
b676167a
SH
590AT_CHECK([cat ofctl_monitor.log], [0], [dnl
591NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 592mpls,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
593dnl
594NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 595mpls,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
596dnl
597NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 598mpls,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
599])
600
0f3f3c3d
SH
601dnl Modified MPLS controller action.
602AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
603
604for i in 1 2 3; do
8249a1fe 605 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 606done
57c94f35
BP
607OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
608ovs-appctl -t ovs-ofctl exit
0f3f3c3d 609
0f3f3c3d
SH
610AT_CHECK([cat ofctl_monitor.log], [0], [dnl
611NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 612mpls,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
613dnl
614NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 615mpls,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
616dnl
617NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 618mpls,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
619])
620
621dnl Modified MPLS controller action.
622AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
623
624for i in 1 2 3; do
8249a1fe 625 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 626done
57c94f35
BP
627OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
628ovs-appctl -t ovs-ofctl exit
0f3f3c3d 629
0f3f3c3d
SH
630AT_CHECK([cat ofctl_monitor.log], [0], [dnl
631NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 632mpls,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
633dnl
634NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 635mpls,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
636dnl
637NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 638mpls,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
639])
640
641dnl Modified MPLS controller action.
642AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
643
644for i in 1 2 3; do
8249a1fe 645 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 646done
57c94f35
BP
647OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
648ovs-appctl -t ovs-ofctl exit
0f3f3c3d 649
0f3f3c3d
SH
650AT_CHECK([cat ofctl_monitor.log], [0], [dnl
651NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 652mpls,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
653dnl
654NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 655mpls,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
656dnl
657NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 658mpls,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
659])
660
b02475c5
SH
661dnl Modified MPLS actions.
662AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
663
664for i in 1 2 3; do
02830175 665 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 666done
57c94f35
BP
667OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
668ovs-appctl -t ovs-ofctl exit
b02475c5 669
b02475c5
SH
670AT_CHECK([cat ofctl_monitor.log], [0], [dnl
671NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 672mpls,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
673dnl
674NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 675mpls,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
676dnl
677NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 678mpls,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
679])
680
681dnl Modified MPLS ipv6 controller action.
682AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
683
684for i in 1 2 3; do
685 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)'
686done
57c94f35
BP
687OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
688ovs-appctl -t ovs-ofctl exit
b02475c5 689
b02475c5
SH
690AT_CHECK([cat ofctl_monitor.log], [0], [dnl
691NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 692mplsm,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
693dnl
694NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 695mplsm,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
696dnl
697NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
52105b67 698mplsm,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
699])
700
701
702dnl Modified MPLS pop action.
cff78c88
SH
703dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
704dnl 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)
705dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
706
b02475c5
SH
707AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
708
709for i in 1 2 3; do
cff78c88 710 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 711done
cff78c88
SH
712#for i in 2 3; do
713# 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)'
714#done
57c94f35
BP
715OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
716ovs-appctl -t ovs-ofctl exit
b02475c5 717
b02475c5 718AT_CHECK([cat ofctl_monitor.log], [0], [dnl
cff78c88 719NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 720tcp,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 721dnl
cff78c88 722NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 723tcp,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 724dnl
cff78c88 725NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
dc235f7f 726tcp,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
727])
728
15056dc8 729dnl Checksum TCP.
77a922c7 730AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
731
732for i in 1 ; do
dc235f7f 733 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 734done
57c94f35
BP
735OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
736ovs-appctl -t ovs-ofctl exit
15056dc8 737
15056dc8 738AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 739NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
dc235f7f 740tcp,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 741dnl
42edbe39 742NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
dc235f7f 743tcp,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 744dnl
42edbe39 745NXT_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 746tcp,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 747dnl
42edbe39 748NXT_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 749tcp,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 750dnl
42edbe39 751NXT_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 752tcp,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 753dnl
42edbe39 754NXT_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 755tcp,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 756dnl
42edbe39 757NXT_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 758tcp,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 759dnl
42edbe39 760NXT_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 761tcp,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 762dnl
42edbe39 763NXT_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 764tcp,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
765])
766
767dnl Checksum UDP.
77a922c7 768AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
769
770for i in 1 ; do
771 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'
772done
57c94f35
BP
773OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
774ovs-appctl -t ovs-ofctl exit
15056dc8 775
15056dc8 776AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 777NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 778udp,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 779dnl
42edbe39 780NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
3f78c3cc 781udp,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 782dnl
42edbe39 783NXT_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 784udp,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 785dnl
42edbe39 786NXT_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 787udp,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 788dnl
42edbe39 789NXT_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 790udp,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 791dnl
42edbe39 792NXT_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 793udp,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 794dnl
42edbe39 795NXT_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 796udp,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 797dnl
42edbe39 798NXT_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 799udp,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 800dnl
42edbe39 801NXT_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 802udp,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
803])
804
f6c8a6b1
BP
805dnl Modified ARP controller action.
806AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
807
808for i in 1 2 3; do
809 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)'
810done
811
812OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
813AT_CHECK([cat ofctl_monitor.log], [0], [dnl
814NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
815arp,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
816NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
817arp,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
818NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 819arp,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
820NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
821arp,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
822NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
823arp,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
824NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 825arp,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
826NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
827arp,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
828NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
829arp,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
830NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
56d72f37 831arp,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
832])
833
5c0243a9 834AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
0d56eaf2
JS
835
836dnl Checksum SCTP.
837AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
838
839for i in 1 ; do
840 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'
841done
842
843OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
844AT_CHECK([cat ofctl_monitor.log], [0], [dnl
845NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
846sctp,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
847dnl
848NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
849sctp,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
850dnl
851NXT_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)
852sctp,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
853dnl
854NXT_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)
855sctp,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
856dnl
857NXT_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)
858sctp,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
859dnl
860NXT_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)
861sctp,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
862dnl
863NXT_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)
864sctp,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
865dnl
866NXT_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)
867sctp,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
868dnl
869NXT_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)
870sctp,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
871])
872
ef0ce8ae 873AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
0d56eaf2 874 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
ef0ce8ae 875 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
876 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)
877 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)
878 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)
879 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)
880 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)
881 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
882 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
363dd1d9 883 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
884 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
885 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
886 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 887 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
888 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
889 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
890 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 891 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 892 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 893 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 894 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 895 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
ef0ce8ae
BP
896 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
897NXST_FLOW reply:
15056dc8
EJ
898])
899
900OVS_VSWITCHD_STOP
8e9ce036 901AT_CLEANUP
04c956fc 902
f6c8a6b1
BP
903AT_SETUP([ofproto-dpif - ARP modification slow-path])
904OVS_VSWITCHD_START
905ADD_OF_PORTS([br0], [1], [2])
906
907ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
908ovs-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'
909
910# Input some packets that should follow the arp modification slow-path.
911for i in 1 2 3; do
912 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)'
913done
914AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
915
916# Check the packets that were output.
917AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
918arp,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
919arp,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
920arp,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=40:44:44:44:44:41
921arp,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
922arp,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
923arp,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=40:44:44:44:44:41
924arp,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
925arp,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
926arp,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=40:44:44:44:44:41
927])
928
f6c8a6b1
BP
929OVS_VSWITCHD_STOP
930AT_CLEANUP
931
ecac4ebf 932AT_SETUP([ofproto-dpif - VLAN handling])
04c956fc 933OVS_VSWITCHD_START(
023e1e0a
BP
934 [set Bridge br0 fail-mode=standalone -- \
935 add-port br0 p1 trunks=10,12 -- \
ecac4ebf 936 add-port br0 p2 tag=10 -- \
5e9ceccd
BP
937 add-port br0 p3 tag=12 \
938 other-config:priority-tags=true -- \
ecac4ebf
BP
939 add-port br0 p4 tag=12 -- \
940 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
941 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
942 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
5e9ceccd
BP
943 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
944 other-config:priority-tags=true -- \
ecac4ebf
BP
945 set Interface p1 type=dummy -- \
946 set Interface p2 type=dummy -- \
947 set Interface p3 type=dummy -- \
948 set Interface p4 type=dummy -- \
949 set Interface p5 type=dummy -- \
950 set Interface p6 type=dummy -- \
951 set Interface p7 type=dummy -- \
952 set Interface p8 type=dummy --])
04c956fc 953
247527db
BP
954dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
955dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
ecac4ebf 956dnl actions.
04c956fc 957for tuple in \
e44768b7
JP
958 "100 none 0 drop" \
959 "100 0 0 drop" \
960 "100 0 1 drop" \
961 "100 10 0 1,5,6,7,8,pop_vlan,2" \
962 "100 10 1 1,5,6,7,8,pop_vlan,2" \
963 "100 11 0 5,7" \
964 "100 11 1 5,7" \
965 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
966 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
247527db
BP
967 "1 none 0 drop" \
968 "1 0 0 drop" \
969 "1 0 1 drop" \
e44768b7
JP
970 "1 10 0 5,6,7,8,100,pop_vlan,2" \
971 "1 10 1 5,6,7,8,100,pop_vlan,2" \
247527db
BP
972 "1 11 0 drop" \
973 "1 11 1 drop" \
e44768b7
JP
974 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
975 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
976 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
977 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
978 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
247527db
BP
979 "2 10 0 drop" \
980 "2 10 1 drop" \
981 "2 11 0 drop" \
982 "2 11 1 drop" \
983 "2 12 0 drop" \
984 "2 12 1 drop" \
e44768b7
JP
985 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
986 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
987 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
988 "3 10 0 drop" \
989 "3 10 1 drop" \
990 "3 11 0 drop" \
991 "3 11 1 drop" \
992 "3 12 0 drop" \
993 "3 12 1 drop" \
e44768b7
JP
994 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
995 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
996 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
997 "4 10 0 drop" \
998 "4 10 1 drop" \
999 "4 11 0 drop" \
1000 "4 11 1 drop" \
1001 "4 12 0 drop" \
1002 "4 12 1 drop" \
e44768b7
JP
1003 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1004 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1005 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1006 "5 10 0 1,6,7,8,100,pop_vlan,2" \
1007 "5 10 1 1,6,7,8,100,pop_vlan,2" \
1008 "5 11 0 7,100" \
1009 "5 11 1 7,100" \
1010 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
1011 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1012 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1013 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1014 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1015 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1016 "6 10 1 1,5,7,8,100,pop_vlan,2" \
247527db
BP
1017 "6 11 0 drop" \
1018 "6 11 1 drop" \
e44768b7
JP
1019 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1020 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1021 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1022 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1023 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1024 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1025 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1026 "7 11 0 5,100" \
1027 "7 11 1 5,100" \
1028 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1029 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1030 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1031 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1032 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1033 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1034 "8 10 1 1,5,6,7,100,pop_vlan,2" \
247527db
BP
1035 "8 11 0 drop" \
1036 "8 11 1 drop" \
e44768b7
JP
1037 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1038 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
04c956fc
BP
1039do
1040 set $tuple
1041 in_port=$1
1042 vlan=$2
ecac4ebf
BP
1043 pcp=$3
1044 expected=$4
04c956fc
BP
1045
1046 if test $vlan = none; then
247527db 1047 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
04c956fc 1048 else
247527db 1049 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
1050 fi
1051
395e68ce
BP
1052 echo "----------------------------------------------------------------------"
1053 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1054
50aa28fd 1055 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
ecac4ebf 1056 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
04c956fc 1057
247527db 1058 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
becffb86 1059 mv stdout expout
247527db 1060 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
04c956fc
BP
1061done
1062
1063OVS_VSWITCHD_STOP
1064AT_CLEANUP
7257b535
BP
1065
1066AT_SETUP([ofproto-dpif - fragment handling])
023e1e0a 1067OVS_VSWITCHD_START
72d64e33 1068ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
7257b535
BP
1069AT_DATA([flows.txt], [dnl
1070priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1071priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1072priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1073priority=50 tcp ip_frag=no actions=output:4
1074priority=50 tcp ip_frag=first actions=output:5
1075priority=50 tcp ip_frag=later actions=output:6
1076])
1077AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1078
a61680c6 1079base_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
1080no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1081first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1082later_flow="$base_flow,frag=later)"
1083
1084 # mode no first later
1085for tuple in \
1086 'normal 1 5 6' \
1087 'drop 1 drop drop' \
1088 'nx-match 1 2 6'
1089do
1090 set $tuple
1091 mode=$1
1092 no=$2
1093 first=$3
1094 later=$4
1095
1096 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1097 for type in no first later; do
1098 eval flow=\$${type}_flow exp_output=\$$type
7fd51d39 1099 printf "\n%s\n" "----$mode $type-----"
50aa28fd 1100 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
7fd51d39
BP
1101 : > expout
1102 if test $mode = drop && test $type != no; then
1103 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1104 fi
1105 echo "Datapath actions: $exp_output" >> expout
1106 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
7257b535
BP
1107 done
1108done
023e1e0a 1109OVS_VSWITCHD_STOP
7257b535 1110AT_CLEANUP
848e8809
EJ
1111
1112AT_SETUP([ofproto-dpif - exit])
1113OVS_VSWITCHD_START
f7b8e494 1114ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
848e8809
EJ
1115AT_DATA([flows.txt], [dnl
1116in_port=1 actions=output:10,exit,output:11
1117in_port=2 actions=output:12,resubmit:1,output:12
1118in_port=3 actions=output:13,resubmit:2,output:14
1119])
1120AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 1121AT_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
1122AT_CHECK([tail -1 stdout], [0],
1123 [Datapath actions: 10
1124])
50aa28fd 1125AT_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
1126AT_CHECK([tail -1 stdout], [0],
1127 [Datapath actions: 12,10
1128])
50aa28fd 1129AT_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
1130AT_CHECK([tail -1 stdout], [0],
1131 [Datapath actions: 13,12,10
1132])
1133OVS_VSWITCHD_STOP
1134AT_CLEANUP
c06bba01
JP
1135
1136
1137AT_SETUP([ofproto-dpif - mirroring, select_all])
432fca23
BP
1138OVS_VSWITCHD_START
1139ADD_OF_PORTS([br0], 1, 2, 3)
1140ovs-vsctl \
c06bba01
JP
1141 set Bridge br0 mirrors=@m --\
1142 --id=@p3 get Port p3 --\
432fca23 1143 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 1144
c06bba01
JP
1145AT_DATA([flows.txt], [dnl
1146in_port=1 actions=output:2
1147in_port=2 actions=output:1
1148])
1149AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1150
247527db 1151flow="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 1152AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1153AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1154 [Datapath actions: 2,3
c06bba01
JP
1155])
1156
247527db 1157flow="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 1158AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1159AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1160 [Datapath actions: 1,3
c06bba01
JP
1161])
1162
1163OVS_VSWITCHD_STOP
1164AT_CLEANUP
1165
1166
1167AT_SETUP([ofproto-dpif - mirroring, select_src])
432fca23
BP
1168OVS_VSWITCHD_START
1169ADD_OF_PORTS([br0], 1, 2, 3)
1170ovs-vsctl \
c06bba01
JP
1171 set Bridge br0 mirrors=@m --\
1172 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
432fca23 1173 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
c06bba01 1174
c06bba01
JP
1175AT_DATA([flows.txt], [dnl
1176in_port=1 actions=output:2
1177in_port=2 actions=output:1
1178])
1179AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1180
247527db 1181flow="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 1182AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1183AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1184 [Datapath actions: 2,3
c06bba01
JP
1185])
1186
247527db 1187flow="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 1188AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1189AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1190 [Datapath actions: 1
c06bba01
JP
1191])
1192OVS_VSWITCHD_STOP
1193AT_CLEANUP
1194
33158a18 1195AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
432fca23
BP
1196OVS_VSWITCHD_START
1197ADD_OF_PORTS([br0], 1, 2)
1198ovs-vsctl \
33158a18
JP
1199 set Bridge br0 mirrors=@m --\
1200 --id=@p2 get Port p2 --\
432fca23 1201 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
33158a18 1202
33158a18
JP
1203AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1204
1205# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 1206flow="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
1207AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1208AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1209 [Datapath actions: 1,2
33158a18
JP
1210])
1211
1212OVS_VSWITCHD_STOP
1213AT_CLEANUP
1214
c06bba01
JP
1215
1216AT_SETUP([ofproto-dpif - mirroring, select_dst])
432fca23
BP
1217OVS_VSWITCHD_START
1218ADD_OF_PORTS([br0], 1, 2, 3)
1219ovs-vsctl \
c06bba01
JP
1220 set Bridge br0 mirrors=@m --\
1221 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 1222 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
c06bba01 1223
c06bba01
JP
1224AT_DATA([flows.txt], [dnl
1225in_port=1 actions=output:2
1226in_port=2 actions=output:1
1227])
1228AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1229
247527db 1230flow="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 1231AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1232AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1233 [Datapath actions: 2,3
c06bba01
JP
1234])
1235
247527db 1236flow="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 1237AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1238AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1239 [Datapath actions: 1
c06bba01
JP
1240])
1241
1242OVS_VSWITCHD_STOP
1243AT_CLEANUP
1244
1245
1246AT_SETUP([ofproto-dpif - mirroring, select_vlan])
432fca23
BP
1247OVS_VSWITCHD_START
1248ADD_OF_PORTS([br0], 1, 2, 3)
1249ovs-vsctl \
c06bba01
JP
1250 set Bridge br0 mirrors=@m --\
1251 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 1252 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
c06bba01 1253
c06bba01
JP
1254AT_DATA([flows.txt], [dnl
1255in_port=1, actions=output:2
1256])
1257AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1258
247527db 1259flow="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 1260AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1261AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1262 [Datapath actions: 2
c06bba01
JP
1263])
1264
247527db 1265flow="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 1266AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1267AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1268 [Datapath actions: 2
c06bba01
JP
1269])
1270
247527db 1271flow="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 1272AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1273AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1274 [Datapath actions: 2,3
c06bba01
JP
1275])
1276
1277OVS_VSWITCHD_STOP
1278AT_CLEANUP
1279
1280
1281AT_SETUP([ofproto-dpif - mirroring, output_port])
432fca23
BP
1282OVS_VSWITCHD_START
1283ADD_OF_PORTS([br0], 1, 2, 3)
1284ovs-vsctl \
c06bba01
JP
1285 set Bridge br0 mirrors=@m --\
1286 --id=@p3 get Port p3 --\
432fca23 1287 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 1288
c06bba01
JP
1289AT_DATA([flows.txt], [dnl
1290in_port=1 actions=mod_vlan_vid:17,output:2
1291in_port=2 actions=output:1
1292])
1293AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1294
247527db 1295flow="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 1296AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1297AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1298 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
c06bba01
JP
1299])
1300
247527db 1301flow="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 1302AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1303AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1304 [Datapath actions: 1,3
c06bba01
JP
1305])
1306
1307OVS_VSWITCHD_STOP
1308AT_CLEANUP
1309
c06bba01 1310AT_SETUP([ofproto-dpif - mirroring, output_vlan])
432fca23
BP
1311OVS_VSWITCHD_START
1312ADD_OF_PORTS([br0], 1, 2)
1313ovs-vsctl \
c06bba01 1314 set Bridge br0 mirrors=@m --\
432fca23 1315 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
c06bba01 1316
c06bba01
JP
1317AT_DATA([flows.txt], [dnl
1318in_port=1 actions=output:2
1319in_port=2 actions=mod_vlan_vid:17,output:1
1320])
1321AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1322
247527db 1323flow="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 1324AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
1325actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1326
e44768b7 1327expected="2,push_vlan(vid=12,pcp=0),1,2,100"
247527db 1328AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 1329mv stdout expout
247527db 1330AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01 1331
247527db 1332flow="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 1333AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
1334actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1335
e44768b7 1336expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
247527db 1337AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 1338mv stdout expout
247527db 1339AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01
JP
1340
1341OVS_VSWITCHD_STOP
1342AT_CLEANUP
b44a10b7 1343
22bb3cbc
AW
1344# Two testcases below are for the ofproto/trace command
1345# The first one tests all correct syntax:
1346# ofproto/trace [dp_name] odp_flow [-generate|packet]
1347# ofproto/trace br_name br_flow [-generate|packet]
1348AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1349OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1350ADD_OF_PORTS([br0], 1, 2, 3)
1351
1352AT_DATA([flows.txt], [dnl
1353in_port=1 actions=output:2
1354in_port=2 actions=output:1
1355])
1356AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1357
0a37839c 1358odp_flow="in_port(p1)"
22bb3cbc 1359br_flow="in_port=1"
0a37839c
GS
1360# Test command: ofproto/trace odp_flow with in_port as a name.
1361AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1362AT_CHECK([tail -1 stdout], [0], [dnl
1363Datapath actions: 2
1364])
1365
1366odp_flow="in_port(1)"
22bb3cbc
AW
1367# Test command: ofproto/trace odp_flow
1368AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1369AT_CHECK([tail -1 stdout], [0], [dnl
1370Datapath actions: 2
1371])
1372
1373# Test command: ofproto/trace dp_name odp_flow
1374AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1375AT_CHECK([tail -1 stdout], [0], [dnl
1376Datapath actions: 2
1377])
1378# Test commmand: ofproto/trace br_name br_flow
1379AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1380AT_CHECK([tail -1 stdout], [0], [dnl
1381Datapath actions: 2
1382])
1383
1384# Delete the inserted flows
1385AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1386AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1387
1388# This section beflow tests the [-generate] option
1389odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1390br_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"
1391
1392# Test command: ofproto/trace odp_flow
1393AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1394# Check for no MAC learning entry
1395AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1396 port VLAN MAC Age
1397])
1398
1399# Test command: ofproto/trace br_name br_flow
1400AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1401# Check for no MAC learning entry
1402AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1403 port VLAN MAC Age
1404])
1405
1406# Test command: ofproto/trace odp_flow -generate
1407AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1408# Check for the MAC learning entry
1409AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1410 port VLAN MAC Age
1411 3 0 50:54:00:00:00:05 ?
1412])
1413
1414# Test command: ofproto/trace dp_name odp_flow -generate
1415AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1416 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1417 -generate], [0], [stdout])
1418# Check for both MAC learning entries
1419AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1420 port VLAN MAC Age
1421 3 0 50:54:00:00:00:05 ?
1422 1 0 50:54:00:00:00:06 ?
1423])
1424
1425# Test command: ofproto/trace br_name br_flow -generate
1426AT_CHECK([ovs-appctl ofproto/trace br0 \
1427 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1428 -generate], [0], [stdout])
1429# Check for both MAC learning entries.
1430AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1431 port VLAN MAC Age
1432 3 0 50:54:00:00:00:05 ?
1433 1 0 50:54:00:00:00:06 ?
1434 2 0 50:54:00:00:00:07 ?
1435])
1436
1437# This section beflow tests the [packet] option
1438# The ovs-tcpundump of packets between port1 and port2
1439pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1440pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1441
1442# Construct the MAC learning table
1443AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1444 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1445 -generate], [0], [stdout])
1446
1447# Construct the MAC learning table
1448AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1449 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1450 -generate], [0], [stdout])
1451
1452# Test command: ofproto/trace odp_flow packet
1453AT_CHECK([ovs-appctl ofproto/trace \
1454 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1455AT_CHECK([tail -1 stdout], [0], [dnl
1456Datapath actions: 2
1457])
b6f00895 1458AT_CHECK([head -n 2 stdout], [0], [dnl
22bb3cbc 1459Bridge: br0
1362e248 1460Flow: 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
1461])
1462
1463# Test command: ofproto/trace dp_name odp_flow packet
1464AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1465 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1466AT_CHECK([tail -1 stdout], [0], [dnl
1467Datapath actions: 2
1468])
b6f00895 1469AT_CHECK([head -n 2 stdout], [0], [dnl
22bb3cbc 1470Bridge: br0
1362e248 1471Flow: 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
1472])
1473
1474# Test command: ofproto/trace br_name br_flow packet
1475AT_CHECK([ovs-appctl ofproto/trace br0 \
1362e248 1476 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
22bb3cbc 1477AT_CHECK([tail -1 stdout], [0], [dnl
ed2e7245 1478Datapath actions: 1
22bb3cbc
AW
1479])
1480AT_CHECK([head -n 2 stdout], [0], [dnl
b6f00895 1481Bridge: br0
1362e248 1482Flow: 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
1483])
1484
1485OVS_VSWITCHD_STOP
1486AT_CLEANUP
1487
1488# The second test tests the corner cases
1489AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1490OVS_VSWITCHD_START
1491ADD_OF_PORTS([br0], 1, 2)
1492
1493# Define flows
1494odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1495br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1496# Define options
1497generate="-generate"
1498pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1499
1500# Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1501m4_foreach(
1502[option],
1503[[],
1504["$generate"],
1505["$pkt"]],
1506[AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1507 [2], [], [stderr])
1508AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 1509Cannot find the datapath
22bb3cbc
AW
1510ovs-appctl: ovs-vswitchd: server returned an error
1511])])
1512
1513# Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1514m4_foreach(
1515[option],
1516[[],
1517["$generate"],
1518["$pkt"]],
1519[AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1520 [2], [], [stderr])
1521AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 1522Cannot find the datapath
22bb3cbc
AW
1523ovs-appctl: ovs-vswitchd: server returned an error
1524])])
1525
1526# Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1527m4_foreach(
1528[option],
1529[[],
1530["$generate"],
1531["$pkt"]],
1532[AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1533 [2], [], [stderr])
1534AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 1535Cannot find the datapath
22bb3cbc
AW
1536ovs-appctl: ovs-vswitchd: server returned an error
1537])])
1538
1539# Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1540m4_foreach(
1541[option],
1542[[],
1543["$generate"],
1544["$pkt"]],
1545[AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1546 [2], [], [stderr])
1547AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 1548Cannot find the datapath
22bb3cbc
AW
1549ovs-appctl: ovs-vswitchd: server returned an error
1550])])
1551
1552# Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1553m4_foreach(
1554[option],
1555[[],
1556["$generate"],
1557["$pkt"]],
1558[AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1559 [2], [], [stderr])
1560AT_CHECK([tail -2 stderr], [0], [dnl
1561Unknown bridge name
1562ovs-appctl: ovs-vswitchd: server returned an error
1563])])
1564
1565# Test incorrect command: ofproto/trace br_flow [-generate|packet]
1566m4_foreach(
1567[option],
1568[[],
1569["$generate"],
1570["$pkt"]],
1571[AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1572 [2], [], [stderr])
1573AT_CHECK([tail -2 stderr], [0], [dnl
1574Must specify bridge name
1575ovs-appctl: ovs-vswitchd: server returned an error
1576])])
1577
1578# Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1579AT_CHECK([ovs-appctl ofproto/trace \
1580 ovs-dummy "$odp_flow" garbage_option],
1581 [2], [stdout],[stderr])
1582AT_CHECK([tail -2 stderr], [0], [dnl
1583Trailing garbage in packet data
1584ovs-appctl: ovs-vswitchd: server returned an error
1585])
1586
1587# Test incorrect command: ofproto/trace with 4 arguments
1588AT_CHECK([ovs-appctl ofproto/trace \
1589 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1590AT_CHECK([tail -2 stderr], [0], [dnl
1591"ofproto/trace" command takes at most 3 arguments
1592ovs-appctl: ovs-vswitchd: server returned an error
1593])
1594
1595# Test incorrect command: ofproto/trace with 0 argument
1596AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1597AT_CHECK([tail -2 stderr], [0], [dnl
1598"ofproto/trace" command requires at least 1 arguments
1599ovs-appctl: ovs-vswitchd: server returned an error
1600])
1601
1602OVS_VSWITCHD_STOP
1603AT_CLEANUP
1604
aee0979b
BP
1605AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
1606OVS_VSWITCHD_START
1607ADD_OF_PORTS([br0], 1, 2, 3)
1608
1609AT_DATA([flows.txt], [dnl
1610in_port=1 actions=output:2
1611in_port=2 actions=output:1
1612])
1613AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1614
1615AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
1616AT_CHECK([tail -1 stdout], [0], [dnl
1617Datapath actions: push_vlan(vid=123,pcp=0),2
1618])
1619
1620OVS_VSWITCHD_STOP
1621AT_CLEANUP
1622
1623
b44a10b7
BP
1624m4_define([OFPROTO_TRACE],
1625 [flow="$2"
1626 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1627 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1628 expected="$4"
1629 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1630 [0], [stdout])
1631 mv stdout expout
1632 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1633 [0], [expout])])
1634
1635AT_SETUP([ofproto-dpif - MAC learning])
432fca23
BP
1636OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1637ADD_OF_PORTS([br0], 1, 2, 3)
b44a10b7 1638
b44a10b7
BP
1639arp='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)'
1640
1641# Trace an ARP packet arriving on p3, to create a MAC learning entry.
1642OFPROTO_TRACE(
50aa28fd 1643 [ovs-dummy],
247527db 1644 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1645 [-generate],
e44768b7 1646 [1,2,100])
b44a10b7
BP
1647
1648# Check for the MAC learning entry.
83664f72 1649AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1650 port VLAN MAC Age
247527db 1651 3 0 50:54:00:00:00:05 ?
b44a10b7
BP
1652])
1653
1654# Trace a packet arrival destined for the learned MAC.
1655# (This will also learn a MAC.)
1656OFPROTO_TRACE(
50aa28fd 1657 [ovs-dummy],
247527db 1658 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
b44a10b7 1659 [-generate],
247527db 1660 [3])
b44a10b7
BP
1661
1662# Check for both MAC learning entries.
83664f72 1663AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1664 port VLAN MAC Age
247527db
BP
1665 3 0 50:54:00:00:00:05 ?
1666 1 0 50:54:00:00:00:06 ?
b44a10b7
BP
1667])
1668
1669# Trace a packet arrival that updates the first learned MAC entry.
1670OFPROTO_TRACE(
50aa28fd 1671 [ovs-dummy],
247527db 1672 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1673 [-generate],
e44768b7 1674 [1,3,100])
b44a10b7
BP
1675
1676# Check that the MAC learning entry was updated.
83664f72 1677AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1678 port VLAN MAC Age
247527db
BP
1679 1 0 50:54:00:00:00:06 ?
1680 2 0 50:54:00:00:00:05 ?
b44a10b7
BP
1681])
1682
1683# Add another bridge.
1684AT_CHECK(
1685 [ovs-vsctl \
1686 -- add-br br1 \
ad28062f
BP
1687 -- set bridge br1 datapath-type=dummy])
1688ADD_OF_PORTS([br1], 4, 5)
b44a10b7
BP
1689
1690# Trace some packet arrivals in br1 to create MAC learning entries there too.
1691OFPROTO_TRACE(
50aa28fd 1692 [ovs-dummy],
247527db 1693 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1694 [-generate],
e44768b7 1695 [5,101])
b44a10b7 1696OFPROTO_TRACE(
50aa28fd 1697 [ovs-dummy],
247527db 1698 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1699 [-generate],
e44768b7 1700 [4,101])
b44a10b7
BP
1701
1702# Check that the MAC learning entries were added.
83664f72 1703AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1704 port VLAN MAC Age
247527db
BP
1705 4 0 50:54:00:00:00:06 ?
1706 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
1707])
1708
1709# Delete port p1 and see that its MAC learning entry disappeared, and
1710# that the MAC learning entry for the same MAC was also deleted from br1.
1711AT_CHECK([ovs-vsctl del-port p1])
83664f72 1712AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1713 port VLAN MAC Age
247527db 1714 2 0 50:54:00:00:00:05 ?
b44a10b7 1715])
83664f72 1716AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1717 port VLAN MAC Age
247527db 1718 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
1719])
1720
1721OVS_VSWITCHD_STOP
1722AT_CLEANUP
17f7f7e0 1723
c4069512
BP
1724AT_SETUP([ofproto-dpif - MAC table overflow])
1725OVS_VSWITCHD_START(
ad28062f
BP
1726 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1727ADD_OF_PORTS([br0], 1, 2, 3)
c4069512
BP
1728
1729arp='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)'
1730
1731AT_CHECK([ovs-appctl time/stop])
1732
1733# Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1734for i in 0 1 2 3 4 5 6 7 8 9; do
1735 OFPROTO_TRACE(
50aa28fd 1736 [ovs-dummy],
c4069512
BP
1737 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1738 [-generate],
1739 [1,2,100])
1740 ovs-appctl time/warp 1000
1741done
1742
1743# Check for the MAC learning entries.
1744AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1745 [0], [dnl
1746 3 0 50:54:00:00:00:00
1747 3 0 50:54:00:00:00:01
1748 3 0 50:54:00:00:00:02
1749 3 0 50:54:00:00:00:03
1750 3 0 50:54:00:00:00:04
1751 3 0 50:54:00:00:00:05
1752 3 0 50:54:00:00:00:06
1753 3 0 50:54:00:00:00:07
1754 3 0 50:54:00:00:00:08
1755 3 0 50:54:00:00:00:09
1756 port VLAN MAC Age
1757])
1758
1759# Trace another ARP packet on another MAC.
1760OFPROTO_TRACE(
50aa28fd 1761 [ovs-dummy],
c4069512
BP
1762 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1763 [-generate],
1764 [1,2,100])
1765
1766# Check that the new one chased the oldest one out of the table.
1767AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1768 [0], [dnl
1769 3 0 50:54:00:00:00:01 ?
1770 3 0 50:54:00:00:00:02 ?
1771 3 0 50:54:00:00:00:03 ?
1772 3 0 50:54:00:00:00:04 ?
1773 3 0 50:54:00:00:00:05 ?
1774 3 0 50:54:00:00:00:06 ?
1775 3 0 50:54:00:00:00:07 ?
1776 3 0 50:54:00:00:00:08 ?
1777 3 0 50:54:00:00:00:09 ?
1778 3 0 50:54:00:00:00:10 ?
1779 port VLAN MAC Age
1780])
1781OVS_VSWITCHD_STOP
1782AT_CLEANUP
1783
8073dd31
NM
1784dnl Test that sFlow samples packets correctly.
1785AT_SETUP([ofproto-dpif - sFlow packet sampling])
8073dd31
NM
1786OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1787
798e1352 1788ON_EXIT([kill `cat test-sflow.pid`])
1e04fcc8
BP
1789AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1790AT_CAPTURE_FILE([sflow.log])
1791SFLOW_PORT=`parse_listening_port < test-sflow.log`
1792
8073dd31
NM
1793ovs-appctl time/stop
1794
1795ADD_OF_PORTS([br0], 1, 2)
1796ovs-vsctl \
1797 set Interface br0 options:ifindex=1002 -- \
1798 set Interface p1 options:ifindex=1004 -- \
1799 set Interface p2 options:ifindex=1003 -- \
1800 set Bridge br0 sflow=@sf -- \
1801 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1802 header=128 sampling=1 polling=1
8073dd31
NM
1803
1804dnl open with ARP packets to seed the bridge-learning. The output
1805dnl ifIndex numbers should be reported predictably after that.
1806dnl Since we set sampling=1 we should see all of these packets
1807dnl reported. Sorting the output by data-source and seqNo makes
1808dnl it deterministic. Ensuring that we send at least two packets
1809dnl into each port means we get to check the seq nos are
1810dnl incrementing correctly.
1811
1812ovs-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)'
1813ovs-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)'
1814ovs-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)'
1815ovs-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)'
1816ovs-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)'
1817
1818dnl sleep long enough to get more than one counter sample
1819dnl from each datasource so we can check sequence numbers
1820for i in `seq 1 30`; do
1821 ovs-appctl time/warp 100
1822done
1823OVS_VSWITCHD_STOP
1824ovs-appctl -t test-sflow exit
1825
1826AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1827 /g']], [0], [dnl
1828HEADER
1829 dgramSeqNo=1
743cea45 1830 ds=127.0.0.1>2:1000
8073dd31
NM
1831 fsSeqNo=1
1832 in_vlan=0
1833 in_priority=0
1834 out_vlan=0
1835 out_priority=0
1836 meanSkip=1
1837 samplePool=1
1838 dropEvents=0
743cea45 1839 in_ifindex=1004
8073dd31
NM
1840 in_format=0
1841 out_ifindex=2
1842 out_format=2
1843 hdr_prot=1
1844 pkt_len=64
1845 stripped=4
1846 hdr_len=60
743cea45 1847 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
1848HEADER
1849 dgramSeqNo=1
743cea45 1850 ds=127.0.0.1>2:1000
8073dd31
NM
1851 fsSeqNo=2
1852 in_vlan=0
1853 in_priority=0
1854 out_vlan=0
1855 out_priority=0
1856 meanSkip=1
1857 samplePool=2
1858 dropEvents=0
1859 in_ifindex=1003
1860 in_format=0
743cea45
NM
1861 out_ifindex=2
1862 out_format=2
8073dd31
NM
1863 hdr_prot=1
1864 pkt_len=64
1865 stripped=4
1866 hdr_len=60
743cea45 1867 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
1868HEADER
1869 dgramSeqNo=1
743cea45 1870 ds=127.0.0.1>2:1000
8073dd31
NM
1871 fsSeqNo=3
1872 in_vlan=0
1873 in_priority=0
1874 out_vlan=0
1875 out_priority=0
1876 meanSkip=1
1877 samplePool=3
1878 dropEvents=0
743cea45 1879 in_ifindex=1004
8073dd31 1880 in_format=0
743cea45 1881 out_ifindex=1003
8073dd31
NM
1882 out_format=0
1883 hdr_prot=1
1884 pkt_len=64
1885 stripped=4
1886 hdr_len=60
743cea45 1887 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
1888HEADER
1889 dgramSeqNo=1
743cea45
NM
1890 ds=127.0.0.1>2:1000
1891 fsSeqNo=4
8073dd31
NM
1892 in_vlan=0
1893 in_priority=0
1894 out_vlan=0
1895 out_priority=0
1896 meanSkip=1
743cea45 1897 samplePool=4
8073dd31 1898 dropEvents=0
743cea45 1899 in_ifindex=1003
8073dd31 1900 in_format=0
743cea45
NM
1901 out_ifindex=1004
1902 out_format=0
8073dd31
NM
1903 hdr_prot=1
1904 pkt_len=64
1905 stripped=4
1906 hdr_len=60
743cea45 1907 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
1908HEADER
1909 dgramSeqNo=1
743cea45
NM
1910 ds=127.0.0.1>2:1000
1911 fsSeqNo=5
8073dd31
NM
1912 in_vlan=0
1913 in_priority=0
1914 out_vlan=0
1915 out_priority=0
1916 meanSkip=1
743cea45 1917 samplePool=5
8073dd31 1918 dropEvents=0
743cea45 1919 in_ifindex=1003
8073dd31 1920 in_format=0
743cea45 1921 out_ifindex=1004
8073dd31
NM
1922 out_format=0
1923 hdr_prot=1
1924 pkt_len=64
1925 stripped=4
1926 hdr_len=60
52105b67 1927 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
1928])
1929
1930AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1931 /g']], [0], [dnl
1932IFCOUNTERS
1933 dgramSeqNo=2
1934 ds=127.0.0.1>0:1002
1935 csSeqNo=1
1936 ifindex=1002
1937 type=6
1938 ifspeed=100000000
1939 direction=0
1940 status=3
1941 in_octets=0
1942 in_unicasts=0
1943 in_multicasts=0
1944 in_broadcasts=4294967295
1945 in_discards=0
1946 in_errors=0
1947 in_unknownprotos=4294967295
1948 out_octets=120
1949 out_unicasts=2
1950 out_multicasts=4294967295
1951 out_broadcasts=4294967295
1952 out_discards=0
1953 out_errors=0
1954 promiscuous=0
1955IFCOUNTERS
1956 dgramSeqNo=2
1957 ds=127.0.0.1>0:1003
1958 csSeqNo=1
1959 ifindex=1003
1960 type=6
1961 ifspeed=100000000
1962 direction=0
1963 status=0
52105b67 1964 in_octets=138
8073dd31
NM
1965 in_unicasts=3
1966 in_multicasts=0
1967 in_broadcasts=4294967295
1968 in_discards=0
1969 in_errors=0
1970 in_unknownprotos=4294967295
1971 out_octets=120
1972 out_unicasts=2
1973 out_multicasts=4294967295
1974 out_broadcasts=4294967295
1975 out_discards=0
1976 out_errors=0
1977 promiscuous=0
1978IFCOUNTERS
1979 dgramSeqNo=2
1980 ds=127.0.0.1>0:1004
1981 csSeqNo=1
1982 ifindex=1004
1983 type=6
1984 ifspeed=100000000
1985 direction=0
1986 status=0
1987 in_octets=84
1988 in_unicasts=2
1989 in_multicasts=0
1990 in_broadcasts=4294967295
1991 in_discards=0
1992 in_errors=0
1993 in_unknownprotos=4294967295
1994 out_octets=180
1995 out_unicasts=3
1996 out_multicasts=4294967295
1997 out_broadcasts=4294967295
1998 out_discards=0
1999 out_errors=0
2000 promiscuous=0
2001IFCOUNTERS
2002 dgramSeqNo=3
2003 ds=127.0.0.1>0:1002
2004 csSeqNo=2
2005 ifindex=1002
2006 type=6
2007 ifspeed=100000000
2008 direction=0
2009 status=3
2010 in_octets=0
2011 in_unicasts=0
2012 in_multicasts=0
2013 in_broadcasts=4294967295
2014 in_discards=0
2015 in_errors=0
2016 in_unknownprotos=4294967295
2017 out_octets=120
2018 out_unicasts=2
2019 out_multicasts=4294967295
2020 out_broadcasts=4294967295
2021 out_discards=0
2022 out_errors=0
2023 promiscuous=0
2024IFCOUNTERS
2025 dgramSeqNo=3
2026 ds=127.0.0.1>0:1003
2027 csSeqNo=2
2028 ifindex=1003
2029 type=6
2030 ifspeed=100000000
2031 direction=0
2032 status=0
52105b67 2033 in_octets=138
8073dd31
NM
2034 in_unicasts=3
2035 in_multicasts=0
2036 in_broadcasts=4294967295
2037 in_discards=0
2038 in_errors=0
2039 in_unknownprotos=4294967295
2040 out_octets=120
2041 out_unicasts=2
2042 out_multicasts=4294967295
2043 out_broadcasts=4294967295
2044 out_discards=0
2045 out_errors=0
2046 promiscuous=0
2047IFCOUNTERS
2048 dgramSeqNo=3
2049 ds=127.0.0.1>0:1004
2050 csSeqNo=2
2051 ifindex=1004
2052 type=6
2053 ifspeed=100000000
2054 direction=0
2055 status=0
2056 in_octets=84
2057 in_unicasts=2
2058 in_multicasts=0
2059 in_broadcasts=4294967295
2060 in_discards=0
2061 in_errors=0
2062 in_unknownprotos=4294967295
2063 out_octets=180
2064 out_unicasts=3
2065 out_multicasts=4294967295
2066 out_broadcasts=4294967295
2067 out_discards=0
2068 out_errors=0
2069 promiscuous=0
2070])
2071AT_CLEANUP
2072
2073
2074
17f7f7e0
BP
2075dnl Test that basic NetFlow reports flow statistics correctly:
2076dnl - The initial packet of a flow are correctly accounted.
2077dnl - Later packets within a flow are correctly accounted.
2078dnl - Flow actions changing (in this case, due to MAC learning)
2079dnl cause a record to be sent.
2080AT_SETUP([ofproto-dpif - NetFlow flow expiration])
2081
432fca23
BP
2082OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2083ADD_OF_PORTS([br0], 1, 2)
1e04fcc8 2084
31ef9f51 2085ovs-appctl time/stop
1e04fcc8
BP
2086ON_EXIT([kill `cat test-netflow.pid`])
2087AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2088AT_CAPTURE_FILE([netflow.log])
2089NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2090
432fca23 2091ovs-vsctl \
17f7f7e0
BP
2092 set Bridge br0 netflow=@nf -- \
2093 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
432fca23 2094 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
17f7f7e0 2095
17f7f7e0
BP
2096for delay in 1000 30000; do
2097 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)'
2098 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)'
2099
2100 ovs-appctl time/warp $delay
2101done
2102
d441e1b3 2103sleep 1
17f7f7e0
BP
2104OVS_VSWITCHD_STOP
2105ovs-appctl -t test-netflow exit
2106
2107AT_CHECK([[sed -e 's/, uptime [0-9]*//
2108s/, now [0-9.]*//
65ba8e9c 2109s/time \([0-9]*\)\.\.\.\1$/time <moment>/
17f7f7e0 2110s/time [0-9]*\.\.\.[0-9]*/time <range>/
52440c19
BP
2111' netflow.log | sort]], [0],
2112 [
2113header: v5, seq 0, engine 2,1
17f7f7e0 2114header: v5, seq 1, engine 2,1
52440c19
BP
2115seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
2116seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
2117seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
17f7f7e0
BP
2118])
2119AT_CLEANUP
2120
2121dnl Test that basic NetFlow reports active expirations correctly.
2122AT_SETUP([ofproto-dpif - NetFlow active expiration])
2123
432fca23
BP
2124OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2125ADD_OF_PORTS([br0], 1, 2)
1e04fcc8
BP
2126
2127ON_EXIT([kill `cat test-netflow.pid`])
2128AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2129AT_CAPTURE_FILE([netflow.log])
2130NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2131
432fca23 2132ovs-vsctl \
17f7f7e0
BP
2133 set Bridge br0 netflow=@nf -- \
2134 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
432fca23 2135 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
17f7f7e0 2136
f802352d 2137AT_CHECK([ovs-appctl time/stop])
17f7f7e0
BP
2138n=1
2139while test $n -le 60; do
2140 n=`expr $n + 1`
2141
2142 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)'
2143 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)'
2144
2145 ovs-appctl time/warp 1000
2146done
2147
2148ovs-appctl time/warp 10000
2149
d441e1b3 2150sleep 1
17f7f7e0
BP
2151OVS_VSWITCHD_STOP
2152ovs-appctl -t test-netflow exit
2153
2154# Count the number of reported packets:
2155# - From source to destination before MAC learning kicks in (just one).
2156# - From source to destination after that.
2157# - From destination to source.
2158n_learn=0
2159n_in=0
2160n_out=0
2161n_other=0
2162n_recs=0
2163none=0
2164while read line; do
2165 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2166 case $pkts in
2167 [[0-9]]*) ;;
2168 *) continue ;;
2169 esac
2170
2171 case $line in
52440c19 2172 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
17f7f7e0
BP
2173 counter=n_learn
2174 ;;
52440c19 2175 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
17f7f7e0
BP
2176 counter=n_in
2177 ;;
52440c19 2178 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
17f7f7e0
BP
2179 counter=n_out
2180 ;;
2181 *)
2182 counter=n_other
2183 ;;
2184 esac
2185 eval $counter=\`expr \$$counter + \$pkts\`
2186 n_recs=`expr $n_recs + 1`
2187done < netflow.log
2188
2189# There should be exactly 1 MAC learning packet,
2190# exactly 59 other packets in that direction,
2191# and exactly 60 packets in the other direction.
2192AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2193])
2194
2195# There should be 1 expiration for MAC learning,
2196# at least 5 active and a final expiration in one direction,
2197# and at least 5 active and a final expiration in the other direction.
2198echo $n_recs
2199AT_CHECK([test $n_recs -ge 13])
2200
2201AT_CLEANUP
f27f2134
BP
2202
2203AT_SETUP([idle_age and hard_age increase over time])
2204OVS_VSWITCHD_START
2205
2206# get_ages DURATION HARD IDLE
2207#
2208# Fetch the flow duration, hard age, and idle age into the variables
2209# whose names are given as arguments. Rounds DURATION down to the
2210# nearest integer. If hard_age doesn't appear in the output, sets
2211# HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2212# to 0.
2213get_ages () {
2214 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2215
2216 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2217 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2218 AS_VAR_COPY([$1], [duration])
2219
2220 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2221 if test X"$hard" = X; then
2222 hard=none
2223 else
2224 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2225 fi
2226 AS_VAR_COPY([$2], [hard])
2227
2228 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2229 if test X"$idle" = X; then
2230 idle=0
2231 else
2232 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2233 fi
2234 AS_VAR_COPY([$3], [idle])
2235}
2236
2237# Add a flow and get its initial hard and idle age.
2238AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2239get_ages duration1 hard1 idle1
2240
31ef9f51 2241ovs-appctl time/stop
f27f2134
BP
2242# Warp time forward by 10 seconds, then modify the flow's actions.
2243ovs-appctl time/warp 10000
2244get_ages duration2 hard2 idle2
2245AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2246
2247# Warp time forward by 10 seconds.
2248ovs-appctl time/warp 10000
2249get_ages duration3 hard3 idle3
2250
2251# Warp time forward 10 more seconds, then pass some packets through the flow,
2252# then warp forward a few more times because idle times are only updated
2253# occasionally.
2254ovs-appctl time/warp 10000
2255ovs-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)'
2256ovs-appctl time/warp 1000
2257ovs-appctl time/warp 1000
2258ovs-appctl time/warp 1000
2259get_ages duration4 hard4 idle4
2260
2261printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2262printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2263printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2264
2265# Duration should increase steadily over time.
2266AT_CHECK([test $duration1 -lt $duration2])
2267AT_CHECK([test $duration2 -lt $duration3])
2268AT_CHECK([test $duration3 -lt $duration4])
2269
2270# Hard age should be "none" initially because it's the same as flow_duration,
2271# then it should increase.
2272AT_CHECK([test $hard1 = none])
2273AT_CHECK([test $hard2 = none])
2274AT_CHECK([test $hard3 != none])
2275AT_CHECK([test $hard4 != none])
2276AT_CHECK([test $hard3 -lt $hard4])
2277
2278# Idle age should increase from 1 to 2 to 3, then decrease.
2279AT_CHECK([test $idle1 -lt $idle2])
2280AT_CHECK([test $idle2 -lt $idle3])
2281AT_CHECK([test $idle3 -gt $idle4])
2282
2283# Check some invariant relationships.
2284AT_CHECK([test $duration1 = $idle1])
2285AT_CHECK([test $duration2 = $idle2])
2286AT_CHECK([test $duration3 = $idle3])
2287AT_CHECK([test $idle3 -gt $hard3])
2288AT_CHECK([test $idle4 -lt $hard4])
2289AT_CHECK([test $hard4 -lt $duration4])
2290
2291OVS_VSWITCHD_STOP
2292AT_CLEANUP
0e553d9c
BP
2293
2294AT_SETUP([ofproto-dpif - fin_timeout])
2295OVS_VSWITCHD_START
2296AT_DATA([flows.txt], [dnl
2297in_port=1 actions=output:2
2298in_port=2 actions=mod_vlan_vid:17,output:1
2299])
2300AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2301AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2302[NXST_FLOW reply:
2303 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2304])
31ef9f51
AW
2305
2306ovs-appctl time/stop
0e553d9c
BP
2307# Check that a TCP SYN packet does not change the timeout. (Because
2308# flow stats updates are mainly what implements the fin_timeout
2309# feature, we warp forward a couple of times to ensure that flow stats
2310# run before re-checking the flow table.)
323cc924 2311AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
0e553d9c
BP
2312AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2313warped
2314])
2315AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2316[NXST_FLOW reply:
2317 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2318])
2319# Check that a TCP FIN packet does change the timeout.
323cc924 2320AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
0e553d9c
BP
2321AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2322warped
2323])
2324AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2325[NXST_FLOW reply:
2326 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2327])
2328OVS_VSWITCHD_STOP
2329AT_CLEANUP
27022416
JP
2330
2331AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2332OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2333ADD_OF_PORTS([br0], [1], [2])
2334ADD_OF_PORTS([br1], [3])
2335
2336AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2337dummy@br0
2338dummy@br1
2339])
2340OVS_VSWITCHD_STOP
2341AT_CLEANUP
2342
2343AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2344OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2345ADD_OF_PORTS([br0], [1], [2])
2346ADD_OF_PORTS([br1], [3])
2347
2348AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36
EJ
2349dummy@ovs-dummy: hit:0 missed:0
2350 flows: cur: 0, avg: 0, max: 0, life span: 0ms
dc54ef36
EJ
2351 br0: hit:0 missed:0
2352 br0 65534/100: (dummy)
2353 p1 1/1: (dummy)
2354 p2 2/2: (dummy)
2355 br1: hit:0 missed:0
2356 br1 65534/101: (dummy)
2357 p3 3/3: (dummy)
27022416
JP
2358])
2359OVS_VSWITCHD_STOP
2360AT_CLEANUP
2361
2362AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2363OVS_VSWITCHD_START([add-br br1 -- \
2364 set bridge br1 datapath-type=dummy fail-mode=secure])
2365ADD_OF_PORTS([br0], [1], [2])
2366ADD_OF_PORTS([br1], [3])
2367
323cc924
BP
2368AT_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)'])
2369AT_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)'])
2370AT_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
2371
2372AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
54bb0348
AZ
2373skb_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:0.0s, actions:userspace(pid=0,slow_path(controller))
2374skb_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:0.0s, actions:userspace(pid=0,slow_path(controller))
27022416
JP
2375])
2376
2377AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
54bb0348 2378skb_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:0.0s, actions:userspace(pid=0,slow_path(controller))
27022416
JP
2379])
2380
2381OVS_VSWITCHD_STOP
2382AT_CLEANUP
2383
2384AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2385OVS_VSWITCHD_START([add-br br1 -- \
2386 set bridge br1 datapath-type=dummy fail-mode=secure])
2387ADD_OF_PORTS([br0], [1], [2])
2388ADD_OF_PORTS([br1], [3])
2389
323cc924
BP
2390AT_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)'])
2391AT_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)'])
2392AT_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
2393
2394AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
54bb0348
AZ
2395skb_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:0.0s, actions:userspace(pid=0,slow_path(controller))
2396skb_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:0.0s, actions:userspace(pid=0,slow_path(controller))
27022416
JP
2397])
2398
2399AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
54bb0348 2400skb_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:0.0s, actions:userspace(pid=0,slow_path(controller))
27022416
JP
2401])
2402
2403AT_CHECK([ovs-appctl dpif/del-flows br0])
2404AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2405])
2406
2407AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
54bb0348 2408skb_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:0.0s, actions:userspace(pid=0,slow_path(controller))
27022416
JP
2409])
2410
2411OVS_VSWITCHD_STOP
2412AT_CLEANUP
0a740f48
EJ
2413
2414AT_SETUP([ofproto-dpif - patch ports])
2415OVS_VSWITCHD_START([add-br br1 \
2416-- set bridge br1 datapath-type=dummy fail-mode=secure \
2417-- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2418-- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2419
2420ADD_OF_PORTS([br0], [2])
2421ADD_OF_PORTS([br1], [3])
2422
9fc0165a
EJ
2423AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2424
0a740f48
EJ
2425AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2426AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2427
2428for i in $(seq 1 10); do
2429 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)'
2430done
2431
2432for i in $(seq 1 5); do
2433 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)'
2434done
2435
735d7efb
AZ
2436AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2437warped
2438])
2439
0a740f48 2440AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36
EJ
2441dummy@ovs-dummy: hit:13 missed:2
2442 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
dc54ef36
EJ
2443 br0: hit:9 missed:1
2444 br0 65534/100: (dummy)
2445 p2 2/2: (dummy)
2446 pbr0 1/none: (patch: peer=pbr1)
2447 br1: hit:4 missed:1
2448 br1 65534/101: (dummy)
2449 p3 3/3: (dummy)
2450 pbr1 1/none: (patch: peer=pbr0)
0a740f48
EJ
2451])
2452
2453AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
54bb0348 2454skb_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
2455]),
2456AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
54bb0348 2457skb_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
2458])
2459
2460AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2461OFPST_PORT reply (xid=0x4): 1 ports
2462 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2463 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2464])
2465
2466AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2467OFPST_PORT reply (xid=0x4): 1 ports
2468 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2469 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2470])
2471
2472OVS_VSWITCHD_STOP
2473AT_CLEANUP
655ab909
AZ
2474
2475AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2476OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2477ADD_OF_PORTS([br0], 1, 2)
2478
9fc0165a 2479AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
655ab909
AZ
2480AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2481
2482for i in $(seq 1 61); do
2483 ovs-appctl netdev-dummy/receive br0 '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)'
2484 ovs-appctl time/warp 10000
2485 ovs-appctl time/warp 50000
2486done
2487
2488AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2489])
2490
2d5e351a 2491AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
dc54ef36
EJ
2492dummy@ovs-dummy: hit:0 missed:61
2493 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
dc54ef36
EJ
2494 br0: hit:0 missed:61
2495 br0 65534/100: (dummy)
2496 p1 1/1: (dummy)
2497 p2 2/2: (dummy)
655ab909
AZ
2498])
2499
2500OVS_VSWITCHD_STOP
2501AT_CLEANUP
65e0be10
BP
2502
2503AT_SETUP([ofproto-dpif - port duration])
2504OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2505ADD_OF_PORTS([br0], 1, 2)
2506
31ef9f51 2507ovs-appctl time/stop
65e0be10
BP
2508ovs-appctl time/warp 10000
2509
2510AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
9f9b6465 2511AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
65e0be10
BP
2512[dnl
2513OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2514 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2515 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2516 duration=?s
2517 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2518 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2519 duration=?s
2520 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2521 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2522 duration=?s
2523])
2524OVS_VSWITCHD_STOP
2525AT_CLEANUP
bcd2633a
JP
2526
2527dnl ----------------------------------------------------------------------
2528AT_BANNER([ofproto-dpif -- megaflows])
2529
2530# Strips out uninteresting parts of megaflow output, as well as parts
2531# that vary from one run to another (e.g., timing and bond actions).
f74e7df7
JP
2532m4_define([STRIP_USED], [[sed '
2533 s/used:[0-9]*\.[0-9]*/used:0.0/
2534' | sort]])
bcd2633a
JP
2535m4_define([STRIP_XOUT], [[sed '
2536 s/used:[0-9]*\.[0-9]*/used:0.0/
2c0ea78f
GS
2537 s/actions:.*/actions: <del>/
2538 s/packets:[0-9]*/packets:0/
2539 s/bytes:[0-9]*/bytes:0/
bcd2633a
JP
2540' | sort]])
2541
2542AT_SETUP([ofproto-dpif megaflow - port classification])
2543OVS_VSWITCHD_START
2544ADD_OF_PORTS([br0], [1], [2])
2545AT_DATA([flows.txt], [dnl
2546table=0 in_port=1 actions=output(2)
2547])
2548AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2549AT_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)'])
2550AT_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
2551AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2552skb_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
2553])
2554OVS_VSWITCHD_STOP
2555AT_CLEANUP
2556
2557AT_SETUP([ofproto-dpif megaflow - L2 classification])
2558OVS_VSWITCHD_START
2559ADD_OF_PORTS([br0], [1], [2])
2560AT_DATA([flows.txt], [dnl
2561table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2562])
2563AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2564AT_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)'])
2565AT_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
2566AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2567skb_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>
2568skb_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
2569])
2570OVS_VSWITCHD_STOP
2571AT_CLEANUP
2572
2573AT_SETUP([ofproto-dpif megaflow - L3 classification])
2574OVS_VSWITCHD_START
2575ADD_OF_PORTS([br0], [1], [2])
2576AT_DATA([flows.txt], [dnl
2577table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2578])
2579AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2580AT_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)'])
2581AT_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
2582AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2583skb_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/0xff,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
2584skb_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:0.0s, actions: <del>
bcd2633a
JP
2585])
2586OVS_VSWITCHD_STOP
2587AT_CLEANUP
2588
2589AT_SETUP([ofproto-dpif megaflow - L4 classification])
2590OVS_VSWITCHD_START
2591ADD_OF_PORTS([br0], [1], [2])
2592AT_DATA([flows.txt], [dnl
2593table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2594])
2595AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2596AT_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)'])
2597AT_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
2598AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2599skb_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
2600])
2601OVS_VSWITCHD_STOP
2602AT_CLEANUP
2603
2604AT_SETUP([ofproto-dpif megaflow - normal])
2605OVS_VSWITCHD_START
2606ADD_OF_PORTS([br0], [1], [2])
2607AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2608AT_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)'])
2609AT_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
2610AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2611skb_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:0.0s, actions: <del>
2612skb_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:0.0s, actions: <del>
bcd2633a
JP
2613])
2614OVS_VSWITCHD_STOP
2615AT_CLEANUP
2616
2617AT_SETUP([ofproto-dpif megaflow - mpls])
2618OVS_VSWITCHD_START
2619ADD_OF_PORTS([br0], [1], [2])
2620AT_DATA([flows.txt], [dnl
2621table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2622table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2623])
2624AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2625AT_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)'])
2626AT_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)'])
2c0ea78f
GS
2627AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2628skb_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:0.0s, actions: <del>
2629skb_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:0.0s, actions: <del>
bcd2633a
JP
2630])
2631OVS_VSWITCHD_STOP
2632AT_CLEANUP
2633
2634AT_SETUP([ofproto-dpif megaflow - netflow])
2635OVS_VSWITCHD_START
2636ADD_OF_PORTS([br0], [1], [2])
2637
2638dnl NetFlow configuration disables wildcarding relevant fields
2639ON_EXIT([kill `cat test-netflow.pid`])
2640AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2641AT_CAPTURE_FILE([netflow.log])
2642NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2643ovs-vsctl \
2644 set Bridge br0 netflow=@nf -- \
2645 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2646 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2647
2648AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2649AT_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)'])
2650AT_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
2651AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2652skb_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:0.0s, actions: <del>
2653skb_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:0.0s, actions: <del>
bcd2633a
JP
2654])
2655OVS_VSWITCHD_STOP
2656AT_CLEANUP
2657
2658AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2659OVS_VSWITCHD_START(
2660 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2661 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2662 set interface p2 type=dummy ofport_request=2 -- \
2663 set interface p3 type=dummy ofport_request=3])
2664AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2665])
2666
2667AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2668AT_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)'])
2669AT_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
2670AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2671skb_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:0.0s, actions: <del>
2672skb_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:0.0s, actions: <del>
bcd2633a
JP
2673])
2674OVS_VSWITCHD_STOP
2675AT_CLEANUP
2676
2677AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2678OVS_VSWITCHD_START(
2679 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2680 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2681 set interface p2 type=dummy ofport_request=2 -- \
2682 set interface p3 type=dummy ofport_request=3])
2683AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2684])
2685
2686AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2687AT_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)'])
2688AT_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
2689AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2690skb_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:0.0s, actions: <del>
2691skb_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:0.0s, actions: <del>
bcd2633a
JP
2692])
2693OVS_VSWITCHD_STOP
2694AT_CLEANUP
2695
2696AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2697# Create bond0 on br0 with interfaces p0 and p1
2698# and bond1 on br1 with interfaces p2 and p3
2699# with p0 patched to p2 and p1 patched to p3.
2700OVS_VSWITCHD_START(
2701 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2702 other-config:lacp-time=fast \
2703 other-config:bond-rebalance-interval=0 -- \
2704 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2705 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2706 add-br br1 -- \
2707 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2708 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2709 fail-mode=secure -- \
2710 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2711 other-config:lacp-time=fast \
2712 other-config:bond-rebalance-interval=0 -- \
2713 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2714 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2715
2716AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2717])
2718ADD_OF_PORTS([br0], [7])
2719AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2720AT_CHECK([ovs-ofctl add-flow br1 action=normal])
31ef9f51 2721ovs-appctl time/stop
bcd2633a
JP
2722ovs-appctl time/warp 5000
2723AT_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)'])
2724AT_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)'])
2725
2c0ea78f
GS
2726AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2727skb_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:0.0s, actions: <del>
2728skb_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:0.0s, actions: <del>
bcd2633a
JP
2729])
2730OVS_VSWITCHD_STOP
2731AT_CLEANUP
2732
2733AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2734OVS_VSWITCHD_START
2735ADD_OF_PORTS([br0], [1], [2])
2736AT_DATA([flows.txt], [dnl
2737table=0 in_port=1,ip actions=resubmit(90)
2738table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2739])
2740AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2741AT_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)'])
2742AT_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
2743AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2744skb_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>
2745skb_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
2746])
2747OVS_VSWITCHD_STOP
2748AT_CLEANUP
2749
2750AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2751OVS_VSWITCHD_START
2752ADD_OF_PORTS([br0], [1], [2])
2753AT_DATA([flows.txt], [dnl
2754table=0 in_port=1,ip actions=resubmit(,1)
2755table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2756])
2757AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2758AT_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)'])
2759AT_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=
27601,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2c0ea78f
GS
2761AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2762skb_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>
2763skb_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
2764])
2765OVS_VSWITCHD_STOP
2766AT_CLEANUP
2767
2768AT_SETUP([ofproto-dpif megaflow - goto_table action])
2769OVS_VSWITCHD_START
2770ADD_OF_PORTS([br0], [1], [2])
2771AT_DATA([flows.txt], [dnl
2772table=0 in_port=1,ip actions=goto_table(1)
2773table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2774])
2775AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2776AT_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)'])
2777AT_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
2778AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2779skb_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>
2780skb_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
2781])
2782OVS_VSWITCHD_STOP
2783AT_CLEANUP
2784
2785AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2786OVS_VSWITCHD_START
2787ADD_OF_PORTS([br0], [1], [2], [3])
2788ovs-vsctl \
2789 set Bridge br0 mirrors=@m --\
2790 --id=@p3 get Port p3 --\
2791 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2792
2793AT_DATA([flows.txt], [dnl
2794in_port=1 actions=output:2
2795])
2796AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2797AT_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)'])
2798AT_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
2799AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2800skb_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
2801])
2802OVS_VSWITCHD_STOP
2803AT_CLEANUP
2804
2805AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2806OVS_VSWITCHD_START
2807ADD_OF_PORTS([br0], [1], [2], [3])
2808ovs-vsctl \
2809 set Bridge br0 mirrors=@m --\
2810 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2811 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2812
2813AT_DATA([flows.txt], [dnl
2814in_port=1 actions=output:2
2815])
2816AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2817AT_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))'])
2818AT_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
2819AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2820skb_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:0.0s, actions: <del>
2821skb_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:0.0s, actions: <del>
bcd2633a
JP
2822])
2823OVS_VSWITCHD_STOP
2824AT_CLEANUP
2825
2826AT_SETUP([ofproto-dpif megaflow - move action])
2827OVS_VSWITCHD_START
2828ADD_OF_PORTS([br0], [1], [2])
2829AT_DATA([flows.txt], [dnl
2830table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2831table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2832table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2833])
2834AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2835AT_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)'])
2836AT_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
2837AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2838skb_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:0.0s, actions: <del>
2839skb_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:0.0s, actions: <del>
bcd2633a
JP
2840])
2841OVS_VSWITCHD_STOP
2842AT_CLEANUP
2843
2844AT_SETUP([ofproto-dpif megaflow - push action])
2845OVS_VSWITCHD_START
2846ADD_OF_PORTS([br0], [1], [2])
2847AT_DATA([flows.txt], [dnl
2848table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2849])
2850AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2851AT_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)'])
2852AT_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
2853AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2854skb_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:0.0s, actions: <del>
2855skb_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:0.0s, actions: <del>
bcd2633a
JP
2856])
2857OVS_VSWITCHD_STOP
2858AT_CLEANUP
2859
2860AT_SETUP([ofproto-dpif megaflow - learning])
2861OVS_VSWITCHD_START
2862ADD_OF_PORTS([br0], [1], [2])
2863AT_DATA([flows.txt], [dnl
2864table=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
2865])
2866AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31ef9f51 2867ovs-appctl time/stop
956f2bf0
BP
2868# We send each packet twice because the first packet in each flow causes the
2869# flow table to change and thus revalidations, which (depending on timing)
2870# can keep a megaflow from being installed. The revalidations are done by
2871# the second iteration, allowing the flows to be installed.
2872for i in 1 2; do
2873 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)'])
2874 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)'])
2875 ovs-appctl time/warp 100
2876done
bcd2633a 2877dnl The original flow is missing due to a revalidation.
2c0ea78f
GS
2878AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2879skb_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>
2880skb_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
2881])
2882OVS_VSWITCHD_STOP
2883AT_CLEANUP
d4f4a9b2
JP
2884
2885AT_SETUP([ofproto-dpif megaflow - tunnels])
2886OVS_VSWITCHD_START(
2c0ea78f
GS
2887 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
2888AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
2889 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
2890AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
2891 ofport_request=3])
2892AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
2893 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
2894 ofport_request=4 options:key=flow])
d4f4a9b2
JP
2895AT_DATA([flows.txt], [dnl
2896in_port=1,actions=output(2)
2897in_port=3,actions=output(4)
2898])
2899AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2900dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2901dnl will cause the packet to be dropped.
2902AT_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)'])
2903AT_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)'])
2904AT_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)'])
2905AT_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)'])
2c0ea78f
GS
2906AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2907skb_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>
2908skb_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:0.0s, actions: <del>
2909skb_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:0.0s, actions: <del>
1dd35f8a
JP
2910])
2911OVS_VSWITCHD_STOP
2912AT_CLEANUP
2913
2914AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2915OVS_VSWITCHD_START
2916ADD_OF_PORTS([br0], [1], [2])
2917AT_DATA([flows.txt], [dnl
2918table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2919])
2920AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2921AT_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)'])
2922AT_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
2923AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_XOUT], [0], [dnl
2924skb_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/0xff,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions: <del>
2925skb_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:0.0s, actions: <del>
d4f4a9b2
JP
2926])
2927OVS_VSWITCHD_STOP
2928AT_CLEANUP
74cc3969 2929
f74e7df7
JP
2930AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2931OVS_VSWITCHD_START
2932ADD_OF_PORTS([br0], [1], [2])
2933AT_DATA([flows.txt], [dnl
2934table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2935])
2936AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2937AT_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)'])
2938AT_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)'])
2939dnl The megaflows do not match the same fields, since the first packet
2940dnl is essentially a no-op. (The new destination MAC is the same as the
2941dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2942dnl so that a packet that doesn't need its MAC address changed doesn't
2943dnl hide one that does. Since the first entry doesn't need to change,
2944dnl only the destination MAC address is matched (as decided by
2945dnl ofproto-dpif). The second entry actually updates the destination
2946dnl MAC, so both the source and destination MAC addresses are
2947dnl un-wildcarded, since the ODP commit functions update both the source
2948dnl and destination MAC addresses.
2c0ea78f
GS
2949AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2950skb_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:0.0s, actions:2
2951skb_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:0.0s, actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
f74e7df7
JP
2952])
2953OVS_VSWITCHD_STOP
2954AT_CLEANUP
2955
74cc3969
BP
2956AT_SETUP([ofproto-dpif - datapath port number change])
2957OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2958ADD_OF_PORTS([br0], 1)
2959
2960# Trace a flow that should output to p1.
2961AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2962 [0], [stdout])
2963AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
2964])
2965
2966# Change p1's port number to 5.
2967AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
2968
2969# Trace a flow that should output to p1 in its new location.
2970AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2971 [0], [stdout])
2972AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
2973])
2974OVS_VSWITCHD_STOP
2975AT_CLEANUP
2d344ba5
AW
2976
2977# Tests the bundling with various bfd and cfm configurations.
2978AT_SETUP([ofproto - bundle with variable bfd/cfm config])
2979OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
2980 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
2981 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
2982 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
2983 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
2984 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
2985 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
2986 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
2987 set Interface p0 cfm_mpid=1 -- \
2988 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
2989
2990ovs-appctl time/stop
2991# advance the clock to stablize everything.
2992for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2993# cfm/show should show 'recv' fault.
2994AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2995 fault: recv
2996])
2997# bfd/show should show 'up'.
2998AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2999 Local Session State: up
3000 Remote Session State: up
3001 Local Session State: up
3002 Remote Session State: up
3003])
3004# bond/show should show 'may-enable: true' for all slaves.
3005AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3006 may_enable: true
3007 may_enable: true
3008 may_enable: true
3009 may_enable: true
3010])
3011
3012# now disable the bfd on p1.
3013AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
3014# advance the clock to stablize everything.
3015for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3016# cfm/show should show 'recv' fault.
3017AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3018 fault: recv
3019])
3020# bfd/show should show 'down'.
3021AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3022 Local Session State: down
3023 Remote Session State: down
3024])
3025# bond/show should show 'may-enable: false' for p0.
3026AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3027 may_enable: false
3028 may_enable: true
3029 may_enable: true
3030 may_enable: true
3031])
3032
3033# now enable the bfd on p1 and disable bfd on p0.
3034AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
3035AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
3036# advance the clock to stablize everything.
3037for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3038# cfm/show should show 'recv' fault.
3039AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3040 fault: recv
3041])
3042# bfd/show should show 'down'.
3043AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3044 Local Session State: down
3045 Remote Session State: down
3046])
3047# bond/show should show 'may-enable: false' for p0 and p1.
3048AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3049 may_enable: false
3050 may_enable: true
3051 may_enable: false
3052 may_enable: true
3053])
3054
e441a806
AW
3055OVS_VSWITCHD_STOP
3056AT_CLEANUP
3057
3058AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3059OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3060
3061# enable bfd on p0.
3062AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3063# check log.
3064AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3065monitor thread created
3066])
3067# disable bfd on p0.
3068AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3069# check log.
3070AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3071monitor thread terminated
3072])
3073AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3074
3075# enable cfm on p0.
3076AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3077# check log.
3078AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3079monitor thread created
3080])
3081# disable cfm on p0.
3082AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3083# check log.
3084AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3085monitor thread terminated
3086])
3087AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3088
3089# enable both bfd and cfm on p0.
3090AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3091# check log.
3092AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3093monitor thread created
3094])
3095# disable bfd on p0.
3096AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3097# check log, there should not be the log of thread terminated.
3098AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3099])
3100# reenable bfd on p0.
3101AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3102# check log, should still be on log of thread created.
3103AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3104monitor thread created
3105])
3106# disable bfd and cfm together.
3107AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3108# check log.
3109AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3110monitor thread terminated
3111])
3112
3113OVS_VSWITCHD_STOP
3114AT_CLEANUP
3115
3116# this test helps avoid the deadlock between the main thread and monitor thread.
3117AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3118OVS_VSWITCHD_START
3119
3120for i in `seq 1 199`
3121do
3122 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])
3123done
3124
98cf638b
AW
3125OVS_VSWITCHD_STOP
3126AT_CLEANUP
98b07853
BP
3127\f
3128AT_BANNER([ofproto-dpif - flow translation resource limits])
3129
3130AT_SETUP([ofproto-dpif - infinite resubmit])
3131OVS_VSWITCHD_START
3132AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3133AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3134 [0], [stdout])
3135AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3136])
3137AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3138 [0], [1
3139])
3140OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3141AT_CLEANUP
3142
3143AT_SETUP([ofproto-dpif - exponential resubmit chain])
3144OVS_VSWITCHD_START
3145ADD_OF_PORTS([br0], 1)
3146(for i in `seq 1 64`; do
3147 j=`expr $i + 1`
3148 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3149 done
3150 echo "in_port=65, actions=local") > flows
3151 AT_CHECK([ovs-ofctl add-flows br0 flows])
3152AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3153AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3154])
3155OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3156AT_CLEANUP
3157
3158AT_SETUP([ofproto-dpif - too many output actions])
3159OVS_VSWITCHD_START
3160ADD_OF_PORTS([br0], 1)
3161(for i in `seq 1 12`; do
3162 j=`expr $i + 1`
3163 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3164 done
3165 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
542024c4 3166AT_CHECK([ovs-ofctl add-flows br0 flows])
98b07853 3167AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
0f032e95
BP
3168AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3169 [0], [1
98b07853 3170])
0f032e95 3171AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
542024c4 3172])
0f032e95 3173OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
98b07853
BP
3174AT_CLEANUP
3175
3176AT_SETUP([ofproto-dpif - stack too deep])
3177OVS_VSWITCHD_START
3178ADD_OF_PORTS([br0], 1)
3179(for i in `seq 1 12`; do
3180 j=`expr $i + 1`
3181 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3182 done
3183 push="push:NXM_NX_REG0[[]]"
3184 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3185 AT_CHECK([ovs-ofctl add-flows br0 flows])
3186AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3187AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3188])
3189OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
3190AT_CLEANUP