]> git.proxmox.com Git - ovs.git/blame - tests/ofproto-dpif.at
FAQ: Describe how to connect bridges with patch ports.
[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
27for i in `seq 1 252`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
28echo "table=253 actions=output(11)" >> flows.txt
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
58a89177 37AT_SETUP([ofproto-dpif - registers])
023e1e0a 38OVS_VSWITCHD_START
f7b8e494 39ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
58a89177
EJ
40AT_DATA([flows.txt], [dnl
41in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
42in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
e9358af6
EJ
43in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
44in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
45
58a89177
EJ
46in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
47in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
48in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
49in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
50in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
51in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
52in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
53in_port=9,reg0=0xdeadbeef actions=output:20
54in_port=10,reg1=0xdeadbeef actions=output:21
55in_port=11,reg2=0xeef22dea actions=output:22
e9358af6
EJ
56
57dnl Sanilty check all registers
58in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
59in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
60in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
61in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
bd85dac1 62
58a89177
EJ
63])
64AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 65AT_CHECK([ovs-appctl ofproto/trace br0 '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 66AT_CHECK([tail -1 stdout], [0],
e9358af6 67 [Datapath actions: 20,21,22,33
58a89177 68])
023e1e0a 69OVS_VSWITCHD_STOP
58a89177 70AT_CLEANUP
f694937d 71
bd85dac1
AZ
72AT_SETUP([ofproto-dpif - push-pop])
73OVS_VSWITCHD_START
74ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
75AT_DATA([flows.txt], [dnl
76in_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
77in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
78in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
79in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
80in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
81
82])
83AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
84AT_CHECK([ovs-appctl ofproto/trace br0 '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])
85AT_CHECK([tail -1 stdout], [0],
86 [Datapath actions: 33,22,21,20
87])
88OVS_VSWITCHD_STOP
89AT_CLEANUP
90
f694937d 91AT_SETUP([ofproto-dpif - output])
023e1e0a 92OVS_VSWITCHD_START
f7b8e494 93ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
f694937d
EJ
94AT_DATA([flows.txt], [dnl
95in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
96in_port=2 actions=output:9
97in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
98in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
99in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
100in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
101in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
102])
103AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 104AT_CHECK([ovs-appctl ofproto/trace 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=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
f694937d
EJ
105AT_CHECK([tail -1 stdout], [0],
106 [Datapath actions: 9,55,10,55,66,11,77,88
107])
023e1e0a 108OVS_VSWITCHD_STOP
f694937d 109AT_CLEANUP
8e9ce036 110
f0fd1a17
PS
111AT_SETUP([ofproto-dpif - dec_ttl])
112OVS_VSWITCHD_START
f7b8e494 113ADD_OF_PORTS([br0], [1], [2], [3], [4])
f0fd1a17
PS
114AT_DATA([flows.txt], [dnl
115table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
116table=1 in_port=1 action=dec_ttl,output:3
117])
118AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
119AT_CHECK([ovs-appctl ofproto/trace 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=2,frag=no)' -generate], [0], [stdout])
6a7e895f 120AT_CHECK([tail -3 stdout], [0],
f0fd1a17 121 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
6a7e895f
BP
122This flow is handled by the userspace slow path because it:
123 - Sends "packet-in" messages to the OpenFlow controller.
f0fd1a17
PS
124])
125AT_CHECK([ovs-appctl ofproto/trace 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=3,frag=no)'], [0], [stdout])
126AT_CHECK([tail -1 stdout], [0],
127 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),3,4
128])
129AT_CHECK([ovs-appctl ofproto/trace br0 '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])
130AT_CHECK([tail -1 stdout], [0],
131 [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
132])
133
982697a4 134AT_CAPTURE_FILE([ofctl_monitor.log])
77a922c7 135AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
f0fd1a17
PS
136AT_CHECK([ovs-appctl ofproto/trace 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=2,frag=no)' -generate], [0], [stdout])
137OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
138AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 139NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
3f78c3cc 140icmp,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=1,icmp_type=0,icmp_code=0
f0fd1a17
PS
141])
142OVS_VSWITCHD_STOP
143AT_CLEANUP
144
145
77750738 146AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
e44768b7
JP
147OVS_VSWITCHD_START
148ADD_OF_PORTS([br0], [1], [2])
77750738 149
77750738
JP
150AT_CHECK([ovs-ofctl add-flow br0 action=normal])
151
152# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 153flow="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 154AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
72d64e33
EJ
155AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
1561
1572
158100
159])
77750738
JP
160
161OVS_VSWITCHD_STOP
162AT_CLEANUP
163
8b36f51e 164AT_SETUP([ofproto-dpif - DSCP])
8b36f51e 165OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
72d64e33 166ADD_OF_PORTS([br0], [9])
8b36f51e
EJ
167AT_DATA([flows.txt], [dnl
168actions=output:65534,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:65534
169])
170AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
171AT_CHECK([ovs-vsctl -- \
172 set Port p1 qos=@newqos --\
173 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
174 --id=@q1 create Queue dscp=1 --\
175 --id=@q2 create Queue dscp=2], [0], [ignore])
176AT_CHECK([ovs-appctl ofproto/trace br0 '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])
177AT_CHECK([tail -1 stdout], [0],
178 [Datapath actions: dnl
e44768b7 179100,dnl
1b567fb9
AA
180set(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
181set(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 1821,dnl
1b567fb9
AA
183set(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
184set(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 185set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
e44768b7 186100
8b36f51e
EJ
187])
188OVS_VSWITCHD_STOP
189AT_CLEANUP
190
fd19297b 191AT_SETUP([ofproto-dpif - output/flood flags])
f7b8e494
JP
192OVS_VSWITCHD_START
193ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
fd19297b
EJ
194
195AT_DATA([flows.txt], [dnl
a0fbe94a 196in_port=local actions=local,flood
fd19297b
EJ
197in_port=1 actions=flood
198in_port=2 actions=all
199in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
5bf93d67 200in_port=4 actions=enqueue:65534:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
fd19297b
EJ
201])
202AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
203AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
204AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
205
e44768b7 206AT_CHECK([ovs-appctl ofproto/trace br0 '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
207AT_CHECK([tail -1 stdout \
208| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
2091
2102
2113
2124
2137
214])
215
fd19297b
EJ
216AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
217AT_CHECK([tail -1 stdout \
218| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
e44768b7 219100
fd19297b
EJ
2202
2213
2224
2237
224])
225
226AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
227AT_CHECK([tail -1 stdout \
228| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
fd19297b 2291
e44768b7 230100
fd19297b
EJ
2313
2324
2336
2347
235])
236
237AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
238AT_CHECK([tail -1 stdout], [0],
e44768b7 239 [Datapath actions: 100,1,2,4,6,7
fd19297b
EJ
240])
241
242AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
243AT_CHECK([tail -1 stdout], [0],
1b567fb9 244 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
fd19297b
EJ
245])
246OVS_VSWITCHD_STOP
247AT_CLEANUP
248
15056dc8
EJ
249AT_SETUP([ofproto-dpif - controller])
250OVS_VSWITCHD_START([dnl
251 add-port br0 p1 -- set Interface p1 type=dummy
252])
253
254AT_CAPTURE_FILE([ofctl_monitor.log])
255AT_DATA([flows.txt], [dnl
256cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
54834960 257cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
15056dc8
EJ
258cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
259
54834960
EJ
260cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
261cookie=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)
262cookie=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)
263cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
264cookie=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)
265cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
266cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
b02475c5
SH
267cookie=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
268cookie=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
269cookie=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 270cookie=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
271cookie=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
272cookie=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
273cookie=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
274cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
275cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
276cookie=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
15056dc8
EJ
277])
278AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
279
280dnl Flow miss.
77a922c7 281AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
282
283for i in 1 2 3 ; do
284 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)'
285done
286
287OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
288AT_CHECK([cat ofctl_monitor.log], [0], [dnl
f0fd1a17 289OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
3f78c3cc 290tcp,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_csum:0
15056dc8 291dnl
f0fd1a17 292OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
3f78c3cc 293tcp,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_csum:0
15056dc8 294dnl
f0fd1a17 295OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
3f78c3cc 296tcp,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_csum:0
15056dc8
EJ
297])
298
299dnl Singleton controller action.
77a922c7 300AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
301
302for i in 1 2 3 ; do
303 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)'
304done
305
306OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
307AT_CHECK([cat ofctl_monitor.log], [0], [dnl
308OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 309tcp,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_csum:0
15056dc8
EJ
310dnl
311OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 312tcp,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_csum:0
15056dc8
EJ
313dnl
314OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 315tcp,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_csum:0
15056dc8
EJ
316])
317
318dnl Modified controller action.
77a922c7 319AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
320
321for i in 1 2 3 ; do
322 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)'
323done
324
325OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
326AT_CHECK([cat ofctl_monitor.log], [0], [dnl
327OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3f78c3cc 328tcp,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_csum:0
15056dc8
EJ
329dnl
330OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3f78c3cc 331tcp,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_csum:0
15056dc8
EJ
332dnl
333OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3f78c3cc 334tcp,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_csum:0
15056dc8
EJ
335])
336
b02475c5
SH
337dnl Modified MPLS controller action.
338AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
339
340for i in 1 2 3; do
341 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=6,tos=0,ttl=64,frag=no)'
342done
343
344OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
345AT_CHECK([cat ofctl_monitor.log], [0], [dnl
346NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
347mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07
348dnl
349NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
350mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07
351dnl
352NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
353mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07
354])
355
356dnl Modified MPLS controller action.
357AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
358
359dnl 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)
360
361for i in 1 2 3; do
362 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)'
363done
364
365OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
366AT_CHECK([cat ofctl_monitor.log], [0], [dnl
367NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
368mpls(label:10,tc:3,ttl:64,bos:0),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07
369dnl
370NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
371mpls(label:10,tc:3,ttl:64,bos:0),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07
372dnl
373NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
374mpls(label:10,tc:3,ttl:64,bos:0),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07
375])
376
377dnl Modified MPLS controller action.
378AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
379
380for i in 1 2 3; do
381 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=6,tos=0,ttl=64,frag=no))'
382done
383
384OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
385AT_CHECK([cat ofctl_monitor.log], [0], [dnl
386NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
387mpls(label:10,tc:3,ttl:64,bos:1),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
388dnl
389NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
390mpls(label:10,tc:3,ttl:64,bos:1),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
391dnl
392NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
393mpls(label:10,tc:3,ttl:64,bos:1),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
394])
395
b676167a
SH
396dnl Modified MPLS controller action.
397AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
398
399for i in 1 2 3; do
400 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=6,tos=0,ttl=64,frag=no)'
401done
402
403OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
404AT_CHECK([cat ofctl_monitor.log], [0], [dnl
405NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
406mpls(label:10,tc:3,ttl:63,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07
407dnl
408NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
409mpls(label:10,tc:3,ttl:63,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07
410dnl
411NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
412mpls(label:10,tc:3,ttl:63,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07
413])
414
0f3f3c3d
SH
415dnl Modified MPLS controller action.
416AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
417
418for i in 1 2 3; do
419 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=6,tos=0,ttl=64,frag=no)'
420done
421
422OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
423AT_CHECK([cat ofctl_monitor.log], [0], [dnl
424NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
425mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07
426dnl
427NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
428mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07
429dnl
430NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
431mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07
432])
433
434dnl Modified MPLS controller action.
435AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
436
437for i in 1 2 3; do
438 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=6,tos=0,ttl=64,frag=no)'
439done
440
441OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
442AT_CHECK([cat ofctl_monitor.log], [0], [dnl
443NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
444mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07
445dnl
446NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
447mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07
448dnl
449NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
450mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07
451])
452
453dnl Modified MPLS controller action.
454AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
455
456for i in 1 2 3; do
457 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=6,tos=0,ttl=64,frag=no)'
458done
459
460OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
461AT_CHECK([cat ofctl_monitor.log], [0], [dnl
462NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
463mpls(label:10,tc:3,ttl:9,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07
464dnl
465NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
466mpls(label:10,tc:3,ttl:9,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07
467dnl
468NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
469mpls(label:10,tc:3,ttl:9,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07
470])
471
b02475c5
SH
472dnl Modified MPLS actions.
473AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
474
475for i in 1 2 3; do
476 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),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
477done
478
479OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
480AT_CHECK([cat ofctl_monitor.log], [0], [dnl
481NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
482mpls(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07
483dnl
484NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
485mpls(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07
486dnl
487NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
488mpls(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07
489])
490
491dnl Modified MPLS ipv6 controller action.
492AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
493
494for i in 1 2 3; do
495 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)'
496done
497
498OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
499AT_CHECK([cat ofctl_monitor.log], [0], [dnl
500NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
501mplsm(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07
502dnl
503NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
504mplsm(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07
505dnl
506NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
507mplsm(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07
508])
509
510
511dnl Modified MPLS pop action.
cff78c88
SH
512dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
513dnl 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)
514dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
515
b02475c5
SH
516AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
517
518for i in 1 2 3; do
cff78c88 519 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 520done
cff78c88
SH
521#for i in 2 3; do
522# 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)'
523#done
b02475c5
SH
524
525OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
526AT_CHECK([cat ofctl_monitor.log], [0], [dnl
cff78c88
SH
527NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
528tcp,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_csum:7744
b02475c5 529dnl
cff78c88
SH
530NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
531tcp,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_csum:7744
b02475c5 532dnl
cff78c88
SH
533NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
534tcp,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_csum:7744
b02475c5
SH
535])
536
15056dc8 537dnl Checksum TCP.
77a922c7 538AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
539
540for i in 1 ; do
541 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)'
542done
543
544OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
545AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 546NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 547tcp,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_csum:0
15056dc8 548dnl
42edbe39 549NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
3f78c3cc 550tcp,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_csum:0
15056dc8 551dnl
42edbe39 552NXT_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 553tcp,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_csum:0
15056dc8 554dnl
42edbe39 555NXT_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 556tcp,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_csum:0
15056dc8 557dnl
42edbe39 558NXT_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 559tcp,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_csum:1a03
15056dc8 560dnl
42edbe39 561NXT_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 562tcp,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_csum:3205
15056dc8 563dnl
42edbe39 564NXT_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 565tcp,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_csum:31b8
15056dc8 566dnl
42edbe39 567NXT_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 568tcp,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_csum:316d
15056dc8 569dnl
42edbe39 570NXT_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 571tcp,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_csum:316d
15056dc8
EJ
572])
573
574dnl Checksum UDP.
77a922c7 575AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
576
577for i in 1 ; do
578 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'
579done
580
581OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
582AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 583NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 584udp,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 585dnl
42edbe39 586NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
3f78c3cc 587udp,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 588dnl
42edbe39 589NXT_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 590udp,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 591dnl
42edbe39 592NXT_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 593udp,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 594dnl
42edbe39 595NXT_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 596udp,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 597dnl
42edbe39 598NXT_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 599udp,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 600dnl
42edbe39 601NXT_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 602udp,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 603dnl
42edbe39 604NXT_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 605udp,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 606dnl
42edbe39 607NXT_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 608udp,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
609])
610
5c0243a9 611AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
ef0ce8ae
BP
612AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
613 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
614 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
615 cookie=0x3, table=1, n_packets=2, n_bytes=120, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
616 cookie=0x4, table=2, n_packets=2, n_bytes=120, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
617 cookie=0x5, table=3, n_packets=2, n_bytes=120, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
618 cookie=0x6, table=4, n_packets=2, n_bytes=120, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
619 cookie=0x7, table=5, n_packets=2, n_bytes=120, 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)
620 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
621 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
b02475c5
SH
622 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
623 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
624 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 625 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
626 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
627 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
628 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
b02475c5
SH
629 cookie=0xb, n_packets=3, n_bytes=180, dl_src=50:55:55:55:55:55,dl_type=0x8847 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
630 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
cff78c88 631 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
ef0ce8ae
BP
632 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
633NXST_FLOW reply:
15056dc8
EJ
634])
635
636OVS_VSWITCHD_STOP
8e9ce036 637AT_CLEANUP
04c956fc 638
ecac4ebf 639AT_SETUP([ofproto-dpif - VLAN handling])
04c956fc 640OVS_VSWITCHD_START(
023e1e0a
BP
641 [set Bridge br0 fail-mode=standalone -- \
642 add-port br0 p1 trunks=10,12 -- \
ecac4ebf 643 add-port br0 p2 tag=10 -- \
5e9ceccd
BP
644 add-port br0 p3 tag=12 \
645 other-config:priority-tags=true -- \
ecac4ebf
BP
646 add-port br0 p4 tag=12 -- \
647 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
648 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
649 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
5e9ceccd
BP
650 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
651 other-config:priority-tags=true -- \
ecac4ebf
BP
652 set Interface p1 type=dummy -- \
653 set Interface p2 type=dummy -- \
654 set Interface p3 type=dummy -- \
655 set Interface p4 type=dummy -- \
656 set Interface p5 type=dummy -- \
657 set Interface p6 type=dummy -- \
658 set Interface p7 type=dummy -- \
659 set Interface p8 type=dummy --])
04c956fc 660
247527db
BP
661dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
662dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
ecac4ebf 663dnl actions.
04c956fc 664for tuple in \
e44768b7
JP
665 "100 none 0 drop" \
666 "100 0 0 drop" \
667 "100 0 1 drop" \
668 "100 10 0 1,5,6,7,8,pop_vlan,2" \
669 "100 10 1 1,5,6,7,8,pop_vlan,2" \
670 "100 11 0 5,7" \
671 "100 11 1 5,7" \
672 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
673 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
247527db
BP
674 "1 none 0 drop" \
675 "1 0 0 drop" \
676 "1 0 1 drop" \
e44768b7
JP
677 "1 10 0 5,6,7,8,100,pop_vlan,2" \
678 "1 10 1 5,6,7,8,100,pop_vlan,2" \
247527db
BP
679 "1 11 0 drop" \
680 "1 11 1 drop" \
e44768b7
JP
681 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
682 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
683 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
684 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
685 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
247527db
BP
686 "2 10 0 drop" \
687 "2 10 1 drop" \
688 "2 11 0 drop" \
689 "2 11 1 drop" \
690 "2 12 0 drop" \
691 "2 12 1 drop" \
e44768b7
JP
692 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
693 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
694 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
695 "3 10 0 drop" \
696 "3 10 1 drop" \
697 "3 11 0 drop" \
698 "3 11 1 drop" \
699 "3 12 0 drop" \
700 "3 12 1 drop" \
e44768b7
JP
701 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
702 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
703 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
704 "4 10 0 drop" \
705 "4 10 1 drop" \
706 "4 11 0 drop" \
707 "4 11 1 drop" \
708 "4 12 0 drop" \
709 "4 12 1 drop" \
e44768b7
JP
710 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
711 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
712 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
713 "5 10 0 1,6,7,8,100,pop_vlan,2" \
714 "5 10 1 1,6,7,8,100,pop_vlan,2" \
715 "5 11 0 7,100" \
716 "5 11 1 7,100" \
717 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
718 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
719 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
720 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
721 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
722 "6 10 0 1,5,7,8,100,pop_vlan,2" \
723 "6 10 1 1,5,7,8,100,pop_vlan,2" \
247527db
BP
724 "6 11 0 drop" \
725 "6 11 1 drop" \
e44768b7
JP
726 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
727 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
728 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
729 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
730 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
731 "7 10 0 1,5,6,8,100,pop_vlan,2" \
732 "7 10 1 1,5,6,8,100,pop_vlan,2" \
733 "7 11 0 5,100" \
734 "7 11 1 5,100" \
735 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
736 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
737 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
738 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
739 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
740 "8 10 0 1,5,6,7,100,pop_vlan,2" \
741 "8 10 1 1,5,6,7,100,pop_vlan,2" \
247527db
BP
742 "8 11 0 drop" \
743 "8 11 1 drop" \
e44768b7
JP
744 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
745 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
04c956fc
BP
746do
747 set $tuple
748 in_port=$1
749 vlan=$2
ecac4ebf
BP
750 pcp=$3
751 expected=$4
04c956fc
BP
752
753 if test $vlan = none; then
247527db 754 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
04c956fc 755 else
247527db 756 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
757 fi
758
395e68ce
BP
759 echo "----------------------------------------------------------------------"
760 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
761
ecac4ebf
BP
762 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
763 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
04c956fc 764
247527db 765 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
becffb86 766 mv stdout expout
247527db 767 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
04c956fc
BP
768done
769
770OVS_VSWITCHD_STOP
771AT_CLEANUP
7257b535
BP
772
773AT_SETUP([ofproto-dpif - fragment handling])
023e1e0a 774OVS_VSWITCHD_START
72d64e33 775ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
7257b535
BP
776AT_DATA([flows.txt], [dnl
777priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
778priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
779priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
780priority=50 tcp ip_frag=no actions=output:4
781priority=50 tcp ip_frag=first actions=output:5
782priority=50 tcp ip_frag=later actions=output:6
783])
784AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
785
a61680c6 786base_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
787no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
788first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
789later_flow="$base_flow,frag=later)"
790
791 # mode no first later
792for tuple in \
793 'normal 1 5 6' \
794 'drop 1 drop drop' \
795 'nx-match 1 2 6'
796do
797 set $tuple
798 mode=$1
799 no=$2
800 first=$3
801 later=$4
802
803 AT_CHECK([ovs-ofctl set-frags br0 $mode])
804 for type in no first later; do
805 eval flow=\$${type}_flow exp_output=\$$type
023e1e0a 806 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
7257b535
BP
807 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
808])
809 done
810done
023e1e0a 811OVS_VSWITCHD_STOP
7257b535 812AT_CLEANUP
848e8809
EJ
813
814AT_SETUP([ofproto-dpif - exit])
815OVS_VSWITCHD_START
f7b8e494 816ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
848e8809
EJ
817AT_DATA([flows.txt], [dnl
818in_port=1 actions=output:10,exit,output:11
819in_port=2 actions=output:12,resubmit:1,output:12
820in_port=3 actions=output:13,resubmit:2,output:14
821])
822AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 823AT_CHECK([ovs-appctl ofproto/trace 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=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
824AT_CHECK([tail -1 stdout], [0],
825 [Datapath actions: 10
826])
a61680c6 827AT_CHECK([ovs-appctl ofproto/trace br0 '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
828AT_CHECK([tail -1 stdout], [0],
829 [Datapath actions: 12,10
830])
a61680c6 831AT_CHECK([ovs-appctl ofproto/trace br0 '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
832AT_CHECK([tail -1 stdout], [0],
833 [Datapath actions: 13,12,10
834])
835OVS_VSWITCHD_STOP
836AT_CLEANUP
c06bba01
JP
837
838
839AT_SETUP([ofproto-dpif - mirroring, select_all])
432fca23
BP
840OVS_VSWITCHD_START
841ADD_OF_PORTS([br0], 1, 2, 3)
842ovs-vsctl \
c06bba01
JP
843 set Bridge br0 mirrors=@m --\
844 --id=@p3 get Port p3 --\
432fca23 845 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 846
c06bba01
JP
847AT_DATA([flows.txt], [dnl
848in_port=1 actions=output:2
849in_port=2 actions=output:1
850])
851AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
852
247527db 853flow="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)"
c06bba01
JP
854AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
855AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 856 [Datapath actions: 2,3
c06bba01
JP
857])
858
247527db 859flow="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)"
c06bba01
JP
860AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
861AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 862 [Datapath actions: 1,3
c06bba01
JP
863])
864
865OVS_VSWITCHD_STOP
866AT_CLEANUP
867
868
869AT_SETUP([ofproto-dpif - mirroring, select_src])
432fca23
BP
870OVS_VSWITCHD_START
871ADD_OF_PORTS([br0], 1, 2, 3)
872ovs-vsctl \
c06bba01
JP
873 set Bridge br0 mirrors=@m --\
874 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
432fca23 875 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
c06bba01 876
c06bba01
JP
877AT_DATA([flows.txt], [dnl
878in_port=1 actions=output:2
879in_port=2 actions=output:1
880])
881AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
882
247527db 883flow="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)"
c06bba01
JP
884AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
885AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 886 [Datapath actions: 2,3
c06bba01
JP
887])
888
247527db 889flow="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)"
c06bba01
JP
890AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
891AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 892 [Datapath actions: 1
c06bba01
JP
893])
894OVS_VSWITCHD_STOP
895AT_CLEANUP
896
33158a18 897AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
432fca23
BP
898OVS_VSWITCHD_START
899ADD_OF_PORTS([br0], 1, 2)
900ovs-vsctl \
33158a18
JP
901 set Bridge br0 mirrors=@m --\
902 --id=@p2 get Port p2 --\
432fca23 903 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
33158a18 904
33158a18
JP
905AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
906
907# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 908flow="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
909AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
910AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 911 [Datapath actions: 1,2
33158a18
JP
912])
913
914OVS_VSWITCHD_STOP
915AT_CLEANUP
916
c06bba01
JP
917
918AT_SETUP([ofproto-dpif - mirroring, select_dst])
432fca23
BP
919OVS_VSWITCHD_START
920ADD_OF_PORTS([br0], 1, 2, 3)
921ovs-vsctl \
c06bba01
JP
922 set Bridge br0 mirrors=@m --\
923 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 924 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
c06bba01 925
c06bba01
JP
926AT_DATA([flows.txt], [dnl
927in_port=1 actions=output:2
928in_port=2 actions=output:1
929])
930AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
931
247527db 932flow="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)"
c06bba01
JP
933AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
934AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 935 [Datapath actions: 2,3
c06bba01
JP
936])
937
247527db 938flow="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)"
c06bba01
JP
939AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
940AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 941 [Datapath actions: 1
c06bba01
JP
942])
943
944OVS_VSWITCHD_STOP
945AT_CLEANUP
946
947
948AT_SETUP([ofproto-dpif - mirroring, select_vlan])
432fca23
BP
949OVS_VSWITCHD_START
950ADD_OF_PORTS([br0], 1, 2, 3)
951ovs-vsctl \
c06bba01
JP
952 set Bridge br0 mirrors=@m --\
953 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 954 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
c06bba01 955
c06bba01
JP
956AT_DATA([flows.txt], [dnl
957in_port=1, actions=output:2
958])
959AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
960
247527db 961flow="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)"
c06bba01
JP
962AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
963AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 964 [Datapath actions: 2
c06bba01
JP
965])
966
247527db 967flow="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))"
c06bba01
JP
968AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
969AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 970 [Datapath actions: 2
c06bba01
JP
971])
972
247527db 973flow="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))"
c06bba01
JP
974AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
975AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 976 [Datapath actions: 2,3
c06bba01
JP
977])
978
979OVS_VSWITCHD_STOP
980AT_CLEANUP
981
982
983AT_SETUP([ofproto-dpif - mirroring, output_port])
432fca23
BP
984OVS_VSWITCHD_START
985ADD_OF_PORTS([br0], 1, 2, 3)
986ovs-vsctl \
c06bba01
JP
987 set Bridge br0 mirrors=@m --\
988 --id=@p3 get Port p3 --\
432fca23 989 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 990
c06bba01
JP
991AT_DATA([flows.txt], [dnl
992in_port=1 actions=mod_vlan_vid:17,output:2
993in_port=2 actions=output:1
994])
995AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
996
247527db 997flow="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)"
c06bba01
JP
998AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
999AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1000 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
c06bba01
JP
1001])
1002
247527db 1003flow="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)"
c06bba01
JP
1004AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1005AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1006 [Datapath actions: 1,3
c06bba01
JP
1007])
1008
1009OVS_VSWITCHD_STOP
1010AT_CLEANUP
1011
c06bba01 1012AT_SETUP([ofproto-dpif - mirroring, output_vlan])
432fca23
BP
1013OVS_VSWITCHD_START
1014ADD_OF_PORTS([br0], 1, 2)
1015ovs-vsctl \
c06bba01 1016 set Bridge br0 mirrors=@m --\
432fca23 1017 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
c06bba01 1018
c06bba01
JP
1019AT_DATA([flows.txt], [dnl
1020in_port=1 actions=output:2
1021in_port=2 actions=mod_vlan_vid:17,output:1
1022])
1023AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1024
247527db 1025flow="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)"
c06bba01
JP
1026AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1027actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1028
e44768b7 1029expected="2,push_vlan(vid=12,pcp=0),1,2,100"
247527db 1030AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 1031mv stdout expout
247527db 1032AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01 1033
247527db 1034flow="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)"
c06bba01
JP
1035AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1036actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1037
e44768b7 1038expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
247527db 1039AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 1040mv stdout expout
247527db 1041AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01
JP
1042
1043OVS_VSWITCHD_STOP
1044AT_CLEANUP
b44a10b7
BP
1045
1046m4_define([OFPROTO_TRACE],
1047 [flow="$2"
1048 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1049 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1050 expected="$4"
1051 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1052 [0], [stdout])
1053 mv stdout expout
1054 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1055 [0], [expout])])
1056
1057AT_SETUP([ofproto-dpif - MAC learning])
432fca23
BP
1058OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1059ADD_OF_PORTS([br0], 1, 2, 3)
b44a10b7 1060
b44a10b7
BP
1061arp='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)'
1062
1063# Trace an ARP packet arriving on p3, to create a MAC learning entry.
1064OFPROTO_TRACE(
1065 [br0],
247527db 1066 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1067 [-generate],
e44768b7 1068 [1,2,100])
b44a10b7
BP
1069
1070# Check for the MAC learning entry.
83664f72 1071AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1072 port VLAN MAC Age
247527db 1073 3 0 50:54:00:00:00:05 ?
b44a10b7
BP
1074])
1075
1076# Trace a packet arrival destined for the learned MAC.
1077# (This will also learn a MAC.)
1078OFPROTO_TRACE(
1079 [br0],
247527db 1080 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
b44a10b7 1081 [-generate],
247527db 1082 [3])
b44a10b7
BP
1083
1084# Check for both MAC learning entries.
83664f72 1085AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1086 port VLAN MAC Age
247527db
BP
1087 3 0 50:54:00:00:00:05 ?
1088 1 0 50:54:00:00:00:06 ?
b44a10b7
BP
1089])
1090
1091# Trace a packet arrival that updates the first learned MAC entry.
1092OFPROTO_TRACE(
1093 [br0],
247527db 1094 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1095 [-generate],
e44768b7 1096 [1,3,100])
b44a10b7
BP
1097
1098# Check that the MAC learning entry was updated.
83664f72 1099AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1100 port VLAN MAC Age
247527db
BP
1101 1 0 50:54:00:00:00:06 ?
1102 2 0 50:54:00:00:00:05 ?
b44a10b7
BP
1103])
1104
1105# Add another bridge.
1106AT_CHECK(
1107 [ovs-vsctl \
1108 -- add-br br1 \
1109 -- set bridge br1 datapath-type=dummy \
1110 -- add-port br1 p4 -- set interface p4 type=dummy \
1111 -- add-port br1 p5 -- set interface p5 type=dummy])
b44a10b7
BP
1112
1113# Trace some packet arrivals in br1 to create MAC learning entries there too.
1114OFPROTO_TRACE(
1115 [br1],
247527db 1116 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1117 [-generate],
e44768b7 1118 [5,101])
b44a10b7
BP
1119OFPROTO_TRACE(
1120 [br1],
247527db 1121 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1122 [-generate],
e44768b7 1123 [4,101])
b44a10b7
BP
1124
1125# Check that the MAC learning entries were added.
83664f72 1126AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1127 port VLAN MAC Age
247527db
BP
1128 4 0 50:54:00:00:00:06 ?
1129 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
1130])
1131
1132# Delete port p1 and see that its MAC learning entry disappeared, and
1133# that the MAC learning entry for the same MAC was also deleted from br1.
1134AT_CHECK([ovs-vsctl del-port p1])
83664f72 1135AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1136 port VLAN MAC Age
247527db 1137 2 0 50:54:00:00:00:05 ?
b44a10b7 1138])
83664f72 1139AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1140 port VLAN MAC Age
247527db 1141 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
1142])
1143
1144OVS_VSWITCHD_STOP
1145AT_CLEANUP
17f7f7e0 1146
c4069512
BP
1147AT_SETUP([ofproto-dpif - MAC table overflow])
1148OVS_VSWITCHD_START(
1149 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1150 add-port br0 p1 -- set Interface p1 type=dummy -- \
1151 add-port br0 p2 -- set Interface p2 type=dummy -- \
1152 add-port br0 p3 -- set Interface p3 type=dummy])
1153
1154arp='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)'
1155
1156AT_CHECK([ovs-appctl time/stop])
1157
1158# Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1159for i in 0 1 2 3 4 5 6 7 8 9; do
1160 OFPROTO_TRACE(
1161 [br0],
1162 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1163 [-generate],
1164 [1,2,100])
1165 ovs-appctl time/warp 1000
1166done
1167
1168# Check for the MAC learning entries.
1169AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1170 [0], [dnl
1171 3 0 50:54:00:00:00:00
1172 3 0 50:54:00:00:00:01
1173 3 0 50:54:00:00:00:02
1174 3 0 50:54:00:00:00:03
1175 3 0 50:54:00:00:00:04
1176 3 0 50:54:00:00:00:05
1177 3 0 50:54:00:00:00:06
1178 3 0 50:54:00:00:00:07
1179 3 0 50:54:00:00:00:08
1180 3 0 50:54:00:00:00:09
1181 port VLAN MAC Age
1182])
1183
1184# Trace another ARP packet on another MAC.
1185OFPROTO_TRACE(
1186 [br0],
1187 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1188 [-generate],
1189 [1,2,100])
1190
1191# Check that the new one chased the oldest one out of the table.
1192AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1193 [0], [dnl
1194 3 0 50:54:00:00:00:01 ?
1195 3 0 50:54:00:00:00:02 ?
1196 3 0 50:54:00:00:00:03 ?
1197 3 0 50:54:00:00:00:04 ?
1198 3 0 50:54:00:00:00:05 ?
1199 3 0 50:54:00:00:00:06 ?
1200 3 0 50:54:00:00:00:07 ?
1201 3 0 50:54:00:00:00:08 ?
1202 3 0 50:54:00:00:00:09 ?
1203 3 0 50:54:00:00:00:10 ?
1204 port VLAN MAC Age
1205])
1206OVS_VSWITCHD_STOP
1207AT_CLEANUP
1208
8073dd31
NM
1209dnl Test that sFlow samples packets correctly.
1210AT_SETUP([ofproto-dpif - sFlow packet sampling])
8073dd31
NM
1211OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1212
798e1352 1213ON_EXIT([kill `cat test-sflow.pid`])
1e04fcc8
BP
1214AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1215AT_CAPTURE_FILE([sflow.log])
1216SFLOW_PORT=`parse_listening_port < test-sflow.log`
1217
8073dd31
NM
1218ovs-appctl time/stop
1219
1220ADD_OF_PORTS([br0], 1, 2)
1221ovs-vsctl \
1222 set Interface br0 options:ifindex=1002 -- \
1223 set Interface p1 options:ifindex=1004 -- \
1224 set Interface p2 options:ifindex=1003 -- \
1225 set Bridge br0 sflow=@sf -- \
1226 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1227 header=128 sampling=1 polling=1
8073dd31
NM
1228
1229dnl open with ARP packets to seed the bridge-learning. The output
1230dnl ifIndex numbers should be reported predictably after that.
1231dnl Since we set sampling=1 we should see all of these packets
1232dnl reported. Sorting the output by data-source and seqNo makes
1233dnl it deterministic. Ensuring that we send at least two packets
1234dnl into each port means we get to check the seq nos are
1235dnl incrementing correctly.
1236
1237ovs-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)'
1238ovs-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)'
1239ovs-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)'
1240ovs-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)'
1241ovs-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)'
1242
1243dnl sleep long enough to get more than one counter sample
1244dnl from each datasource so we can check sequence numbers
1245for i in `seq 1 30`; do
1246 ovs-appctl time/warp 100
1247done
1248OVS_VSWITCHD_STOP
1249ovs-appctl -t test-sflow exit
1250
1251AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1252 /g']], [0], [dnl
1253HEADER
1254 dgramSeqNo=1
1255 ds=127.0.0.1>0:1003
1256 fsSeqNo=1
1257 in_vlan=0
1258 in_priority=0
1259 out_vlan=0
1260 out_priority=0
1261 meanSkip=1
1262 samplePool=1
1263 dropEvents=0
1264 in_ifindex=1003
1265 in_format=0
1266 out_ifindex=2
1267 out_format=2
1268 hdr_prot=1
1269 pkt_len=64
1270 stripped=4
1271 hdr_len=60
1272 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
1273HEADER
1274 dgramSeqNo=1
1275 ds=127.0.0.1>0:1003
1276 fsSeqNo=2
1277 in_vlan=0
1278 in_priority=0
1279 out_vlan=0
1280 out_priority=0
1281 meanSkip=1
1282 samplePool=2
1283 dropEvents=0
1284 in_ifindex=1003
1285 in_format=0
1286 out_ifindex=1004
1287 out_format=0
1288 hdr_prot=1
1289 pkt_len=64
1290 stripped=4
1291 hdr_len=60
1292 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
1293HEADER
1294 dgramSeqNo=1
1295 ds=127.0.0.1>0:1003
1296 fsSeqNo=3
1297 in_vlan=0
1298 in_priority=0
1299 out_vlan=0
1300 out_priority=0
1301 meanSkip=1
1302 samplePool=3
1303 dropEvents=0
1304 in_ifindex=1003
1305 in_format=0
1306 out_ifindex=1004
1307 out_format=0
1308 hdr_prot=1
1309 pkt_len=64
1310 stripped=4
1311 hdr_len=60
1312 hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1313HEADER
1314 dgramSeqNo=1
1315 ds=127.0.0.1>0:1004
1316 fsSeqNo=1
1317 in_vlan=0
1318 in_priority=0
1319 out_vlan=0
1320 out_priority=0
1321 meanSkip=1
1322 samplePool=1
1323 dropEvents=0
1324 in_ifindex=1004
1325 in_format=0
1326 out_ifindex=2
1327 out_format=2
1328 hdr_prot=1
1329 pkt_len=64
1330 stripped=4
1331 hdr_len=60
1332 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
1333HEADER
1334 dgramSeqNo=1
1335 ds=127.0.0.1>0:1004
1336 fsSeqNo=2
1337 in_vlan=0
1338 in_priority=0
1339 out_vlan=0
1340 out_priority=0
1341 meanSkip=1
1342 samplePool=2
1343 dropEvents=0
1344 in_ifindex=1004
1345 in_format=0
1346 out_ifindex=1003
1347 out_format=0
1348 hdr_prot=1
1349 pkt_len=64
1350 stripped=4
1351 hdr_len=60
1352 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
1353])
1354
1355AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1356 /g']], [0], [dnl
1357IFCOUNTERS
1358 dgramSeqNo=2
1359 ds=127.0.0.1>0:1002
1360 csSeqNo=1
1361 ifindex=1002
1362 type=6
1363 ifspeed=100000000
1364 direction=0
1365 status=3
1366 in_octets=0
1367 in_unicasts=0
1368 in_multicasts=0
1369 in_broadcasts=4294967295
1370 in_discards=0
1371 in_errors=0
1372 in_unknownprotos=4294967295
1373 out_octets=120
1374 out_unicasts=2
1375 out_multicasts=4294967295
1376 out_broadcasts=4294967295
1377 out_discards=0
1378 out_errors=0
1379 promiscuous=0
1380IFCOUNTERS
1381 dgramSeqNo=2
1382 ds=127.0.0.1>0:1003
1383 csSeqNo=1
1384 ifindex=1003
1385 type=6
1386 ifspeed=100000000
1387 direction=0
1388 status=0
1389 in_octets=98
1390 in_unicasts=3
1391 in_multicasts=0
1392 in_broadcasts=4294967295
1393 in_discards=0
1394 in_errors=0
1395 in_unknownprotos=4294967295
1396 out_octets=120
1397 out_unicasts=2
1398 out_multicasts=4294967295
1399 out_broadcasts=4294967295
1400 out_discards=0
1401 out_errors=0
1402 promiscuous=0
1403IFCOUNTERS
1404 dgramSeqNo=2
1405 ds=127.0.0.1>0:1004
1406 csSeqNo=1
1407 ifindex=1004
1408 type=6
1409 ifspeed=100000000
1410 direction=0
1411 status=0
1412 in_octets=84
1413 in_unicasts=2
1414 in_multicasts=0
1415 in_broadcasts=4294967295
1416 in_discards=0
1417 in_errors=0
1418 in_unknownprotos=4294967295
1419 out_octets=180
1420 out_unicasts=3
1421 out_multicasts=4294967295
1422 out_broadcasts=4294967295
1423 out_discards=0
1424 out_errors=0
1425 promiscuous=0
1426IFCOUNTERS
1427 dgramSeqNo=3
1428 ds=127.0.0.1>0:1002
1429 csSeqNo=2
1430 ifindex=1002
1431 type=6
1432 ifspeed=100000000
1433 direction=0
1434 status=3
1435 in_octets=0
1436 in_unicasts=0
1437 in_multicasts=0
1438 in_broadcasts=4294967295
1439 in_discards=0
1440 in_errors=0
1441 in_unknownprotos=4294967295
1442 out_octets=120
1443 out_unicasts=2
1444 out_multicasts=4294967295
1445 out_broadcasts=4294967295
1446 out_discards=0
1447 out_errors=0
1448 promiscuous=0
1449IFCOUNTERS
1450 dgramSeqNo=3
1451 ds=127.0.0.1>0:1003
1452 csSeqNo=2
1453 ifindex=1003
1454 type=6
1455 ifspeed=100000000
1456 direction=0
1457 status=0
1458 in_octets=98
1459 in_unicasts=3
1460 in_multicasts=0
1461 in_broadcasts=4294967295
1462 in_discards=0
1463 in_errors=0
1464 in_unknownprotos=4294967295
1465 out_octets=120
1466 out_unicasts=2
1467 out_multicasts=4294967295
1468 out_broadcasts=4294967295
1469 out_discards=0
1470 out_errors=0
1471 promiscuous=0
1472IFCOUNTERS
1473 dgramSeqNo=3
1474 ds=127.0.0.1>0:1004
1475 csSeqNo=2
1476 ifindex=1004
1477 type=6
1478 ifspeed=100000000
1479 direction=0
1480 status=0
1481 in_octets=84
1482 in_unicasts=2
1483 in_multicasts=0
1484 in_broadcasts=4294967295
1485 in_discards=0
1486 in_errors=0
1487 in_unknownprotos=4294967295
1488 out_octets=180
1489 out_unicasts=3
1490 out_multicasts=4294967295
1491 out_broadcasts=4294967295
1492 out_discards=0
1493 out_errors=0
1494 promiscuous=0
1495])
1496AT_CLEANUP
1497
1498
1499
17f7f7e0
BP
1500dnl Test that basic NetFlow reports flow statistics correctly:
1501dnl - The initial packet of a flow are correctly accounted.
1502dnl - Later packets within a flow are correctly accounted.
1503dnl - Flow actions changing (in this case, due to MAC learning)
1504dnl cause a record to be sent.
1505AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1506
432fca23
BP
1507OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1508ADD_OF_PORTS([br0], 1, 2)
1e04fcc8
BP
1509
1510ON_EXIT([kill `cat test-netflow.pid`])
1511AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1512AT_CAPTURE_FILE([netflow.log])
1513NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1514
432fca23 1515ovs-vsctl \
17f7f7e0
BP
1516 set Bridge br0 netflow=@nf -- \
1517 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
432fca23 1518 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
17f7f7e0 1519
17f7f7e0
BP
1520for delay in 1000 30000; do
1521 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)'
1522 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)'
1523
1524 ovs-appctl time/warp $delay
1525done
1526
d441e1b3 1527sleep 1
17f7f7e0
BP
1528OVS_VSWITCHD_STOP
1529ovs-appctl -t test-netflow exit
1530
1531AT_CHECK([[sed -e 's/, uptime [0-9]*//
1532s/, now [0-9.]*//
65ba8e9c 1533s/time \([0-9]*\)\.\.\.\1$/time <moment>/
17f7f7e0 1534s/time [0-9]*\.\.\.[0-9]*/time <range>/
52440c19
BP
1535' netflow.log | sort]], [0],
1536 [
1537header: v5, seq 0, engine 2,1
17f7f7e0 1538header: v5, seq 1, engine 2,1
52440c19
BP
1539seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1540seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1541seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
17f7f7e0
BP
1542])
1543AT_CLEANUP
1544
1545dnl Test that basic NetFlow reports active expirations correctly.
1546AT_SETUP([ofproto-dpif - NetFlow active expiration])
1547
432fca23
BP
1548OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1549ADD_OF_PORTS([br0], 1, 2)
1e04fcc8
BP
1550
1551ON_EXIT([kill `cat test-netflow.pid`])
1552AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1553AT_CAPTURE_FILE([netflow.log])
1554NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1555
432fca23 1556ovs-vsctl \
17f7f7e0
BP
1557 set Bridge br0 netflow=@nf -- \
1558 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
432fca23 1559 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
17f7f7e0 1560
f802352d 1561AT_CHECK([ovs-appctl time/stop])
17f7f7e0
BP
1562n=1
1563while test $n -le 60; do
1564 n=`expr $n + 1`
1565
1566 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)'
1567 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)'
1568
1569 ovs-appctl time/warp 1000
1570done
1571
1572ovs-appctl time/warp 10000
1573
d441e1b3 1574sleep 1
17f7f7e0
BP
1575OVS_VSWITCHD_STOP
1576ovs-appctl -t test-netflow exit
1577
1578# Count the number of reported packets:
1579# - From source to destination before MAC learning kicks in (just one).
1580# - From source to destination after that.
1581# - From destination to source.
1582n_learn=0
1583n_in=0
1584n_out=0
1585n_other=0
1586n_recs=0
1587none=0
1588while read line; do
1589 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1590 case $pkts in
1591 [[0-9]]*) ;;
1592 *) continue ;;
1593 esac
1594
1595 case $line in
52440c19 1596 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
17f7f7e0
BP
1597 counter=n_learn
1598 ;;
52440c19 1599 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
17f7f7e0
BP
1600 counter=n_in
1601 ;;
52440c19 1602 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
17f7f7e0
BP
1603 counter=n_out
1604 ;;
1605 *)
1606 counter=n_other
1607 ;;
1608 esac
1609 eval $counter=\`expr \$$counter + \$pkts\`
1610 n_recs=`expr $n_recs + 1`
1611done < netflow.log
1612
1613# There should be exactly 1 MAC learning packet,
1614# exactly 59 other packets in that direction,
1615# and exactly 60 packets in the other direction.
1616AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1617])
1618
1619# There should be 1 expiration for MAC learning,
1620# at least 5 active and a final expiration in one direction,
1621# and at least 5 active and a final expiration in the other direction.
1622echo $n_recs
1623AT_CHECK([test $n_recs -ge 13])
1624
1625AT_CLEANUP
f27f2134
BP
1626
1627AT_SETUP([idle_age and hard_age increase over time])
1628OVS_VSWITCHD_START
1629
1630# get_ages DURATION HARD IDLE
1631#
1632# Fetch the flow duration, hard age, and idle age into the variables
1633# whose names are given as arguments. Rounds DURATION down to the
1634# nearest integer. If hard_age doesn't appear in the output, sets
1635# HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1636# to 0.
1637get_ages () {
1638 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1639
1640 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1641 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1642 AS_VAR_COPY([$1], [duration])
1643
1644 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1645 if test X"$hard" = X; then
1646 hard=none
1647 else
1648 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1649 fi
1650 AS_VAR_COPY([$2], [hard])
1651
1652 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1653 if test X"$idle" = X; then
1654 idle=0
1655 else
1656 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1657 fi
1658 AS_VAR_COPY([$3], [idle])
1659}
1660
1661# Add a flow and get its initial hard and idle age.
1662AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1663get_ages duration1 hard1 idle1
1664
1665# Warp time forward by 10 seconds, then modify the flow's actions.
1666ovs-appctl time/warp 10000
1667get_ages duration2 hard2 idle2
1668AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1669
1670# Warp time forward by 10 seconds.
1671ovs-appctl time/warp 10000
1672get_ages duration3 hard3 idle3
1673
1674# Warp time forward 10 more seconds, then pass some packets through the flow,
1675# then warp forward a few more times because idle times are only updated
1676# occasionally.
1677ovs-appctl time/warp 10000
1678ovs-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)'
1679ovs-appctl time/warp 1000
1680ovs-appctl time/warp 1000
1681ovs-appctl time/warp 1000
1682get_ages duration4 hard4 idle4
1683
1684printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1685printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1686printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1687
1688# Duration should increase steadily over time.
1689AT_CHECK([test $duration1 -lt $duration2])
1690AT_CHECK([test $duration2 -lt $duration3])
1691AT_CHECK([test $duration3 -lt $duration4])
1692
1693# Hard age should be "none" initially because it's the same as flow_duration,
1694# then it should increase.
1695AT_CHECK([test $hard1 = none])
1696AT_CHECK([test $hard2 = none])
1697AT_CHECK([test $hard3 != none])
1698AT_CHECK([test $hard4 != none])
1699AT_CHECK([test $hard3 -lt $hard4])
1700
1701# Idle age should increase from 1 to 2 to 3, then decrease.
1702AT_CHECK([test $idle1 -lt $idle2])
1703AT_CHECK([test $idle2 -lt $idle3])
1704AT_CHECK([test $idle3 -gt $idle4])
1705
1706# Check some invariant relationships.
1707AT_CHECK([test $duration1 = $idle1])
1708AT_CHECK([test $duration2 = $idle2])
1709AT_CHECK([test $duration3 = $idle3])
1710AT_CHECK([test $idle3 -gt $hard3])
1711AT_CHECK([test $idle4 -lt $hard4])
1712AT_CHECK([test $hard4 -lt $duration4])
1713
1714OVS_VSWITCHD_STOP
1715AT_CLEANUP
0e553d9c
BP
1716
1717AT_SETUP([ofproto-dpif - fin_timeout])
1718OVS_VSWITCHD_START
1719AT_DATA([flows.txt], [dnl
1720in_port=1 actions=output:2
1721in_port=2 actions=mod_vlan_vid:17,output:1
1722])
1723AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1724AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1725[NXST_FLOW reply:
1726 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1727])
1728# Check that a TCP SYN packet does not change the timeout. (Because
1729# flow stats updates are mainly what implements the fin_timeout
1730# feature, we warp forward a couple of times to ensure that flow stats
1731# run before re-checking the flow table.)
1732AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1733])
1734AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1735warped
1736])
1737AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1738[NXST_FLOW reply:
1739 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1740])
1741# Check that a TCP FIN packet does change the timeout.
1742AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1743])
1744AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1745warped
1746])
1747AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1748[NXST_FLOW reply:
1749 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1750])
1751OVS_VSWITCHD_STOP
1752AT_CLEANUP
27022416
JP
1753
1754AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1755OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1756ADD_OF_PORTS([br0], [1], [2])
1757ADD_OF_PORTS([br1], [3])
1758
1759AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1760dummy@br0
1761dummy@br1
1762])
1763OVS_VSWITCHD_STOP
1764AT_CLEANUP
1765
1766AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1767OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1768ADD_OF_PORTS([br0], [1], [2])
1769ADD_OF_PORTS([br1], [3])
1770
1771AT_CHECK([ovs-appctl dpif/show], [0], [dnl
acf60855 1772br0 (dummy@ovs-dummy):
735d7efb 1773 lookups: hit:0 missed:0
655ab909
AZ
1774 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1775 overall avg: add rate: 0.000/min, del rate: 0.000/min
27022416
JP
1776 br0 65534/100: (dummy)
1777 p1 1/1: (dummy)
1778 p2 2/2: (dummy)
acf60855 1779br1 (dummy@ovs-dummy):
735d7efb 1780 lookups: hit:0 missed:0
655ab909
AZ
1781 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1782 overall avg: add rate: 0.000/min, del rate: 0.000/min
27022416
JP
1783 br1 65534/101: (dummy)
1784 p3 3/3: (dummy)
1785])
1786
1787AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
acf60855 1788br0 (dummy@ovs-dummy):
735d7efb 1789 lookups: hit:0 missed:0
655ab909
AZ
1790 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1791 overall avg: add rate: 0.000/min, del rate: 0.000/min
27022416
JP
1792 br0 65534/100: (dummy)
1793 p1 1/1: (dummy)
1794 p2 2/2: (dummy)
1795])
1796OVS_VSWITCHD_STOP
1797AT_CLEANUP
1798
1799AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1800OVS_VSWITCHD_START([add-br br1 -- \
1801 set bridge br1 datapath-type=dummy fail-mode=secure])
1802ADD_OF_PORTS([br0], [1], [2])
1803ADD_OF_PORTS([br1], [3])
1804
1805AT_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)'], [0], [success
1806])
1807AT_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)'], [0], [success
1808])
1809AT_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)'], [0], [success
1810])
1811
1812AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
f2245da3
JP
1813in_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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1814in_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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
27022416
JP
1815])
1816
1817AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
f2245da3 1818in_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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
27022416
JP
1819])
1820
1821OVS_VSWITCHD_STOP
1822AT_CLEANUP
1823
1824AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1825OVS_VSWITCHD_START([add-br br1 -- \
1826 set bridge br1 datapath-type=dummy fail-mode=secure])
1827ADD_OF_PORTS([br0], [1], [2])
1828ADD_OF_PORTS([br1], [3])
1829
1830AT_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)'], [0], [success
1831])
1832AT_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)'], [0], [success
1833])
1834AT_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)'], [0], [success
1835])
1836
1837AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
f2245da3
JP
1838in_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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1839in_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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
27022416
JP
1840])
1841
1842AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
f2245da3 1843in_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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
27022416
JP
1844])
1845
1846AT_CHECK([ovs-appctl dpif/del-flows br0])
1847AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1848])
1849
1850AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
f2245da3 1851in_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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
27022416
JP
1852])
1853
1854OVS_VSWITCHD_STOP
1855AT_CLEANUP
0a740f48
EJ
1856
1857AT_SETUP([ofproto-dpif - patch ports])
1858OVS_VSWITCHD_START([add-br br1 \
1859-- set bridge br1 datapath-type=dummy fail-mode=secure \
1860-- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
1861-- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
1862
1863ADD_OF_PORTS([br0], [2])
1864ADD_OF_PORTS([br1], [3])
1865
1866AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1867AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1868
1869for i in $(seq 1 10); do
1870 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)'
1871done
1872
1873for i in $(seq 1 5); do
1874 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)'
1875done
1876
735d7efb
AZ
1877AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1878warped
1879])
1880
0a740f48
EJ
1881AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1882br0 (dummy@ovs-dummy):
735d7efb 1883 lookups: hit:9 missed:1
655ab909
AZ
1884 flows: cur: 1, avg: 1.000, max: 1, life span: 0(ms)
1885 overall avg: add rate: 0.000/min, del rate: 0.000/min
0a740f48
EJ
1886 br0 65534/100: (dummy)
1887 p2 2/2: (dummy)
1888 pbr0 1/none: (patch: peer=pbr1)
1889br1 (dummy@ovs-dummy):
735d7efb 1890 lookups: hit:4 missed:1
655ab909
AZ
1891 flows: cur: 1, avg: 1.000, max: 1, life span: 0(ms)
1892 overall avg: add rate: 0.000/min, del rate: 0.000/min
0a740f48
EJ
1893 br1 65534/101: (dummy)
1894 p3 3/3: (dummy)
1895 pbr1 1/none: (patch: peer=pbr0)
1896])
1897
1898AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1899in_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), packets:9, bytes:540, used:0.0s, actions:101,3,2
1900]),
1901AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1902in_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), packets:4, bytes:240, used:0.0s, actions:100,2,3
1903])
1904
1905AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1906OFPST_PORT reply (xid=0x4): 1 ports
1907 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
1908 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
1909])
1910
1911AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
1912OFPST_PORT reply (xid=0x4): 1 ports
1913 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
1914 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
1915])
1916
1917OVS_VSWITCHD_STOP
1918AT_CLEANUP
655ab909
AZ
1919
1920AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
1921OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
1922ADD_OF_PORTS([br0], 1, 2)
1923
1924AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1925
1926for i in $(seq 1 61); do
1927 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)'
1928 ovs-appctl time/warp 10000
1929 ovs-appctl time/warp 50000
1930done
1931
1932AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
1933])
1934
2d5e351a 1935AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
655ab909
AZ
1936br0 (dummy@ovs-dummy):
1937 lookups: hit:0 missed:61
2d5e351a 1938 flows: cur: 0, avg: 1.000, max: 1, life span: 10000(ms)
3af56aef
AZ
1939 hourly avg: add rate: 0.641/min, del rate: 0.641/min
1940 overall avg: add rate: 1.000/min, del rate: 1.000/min
655ab909
AZ
1941 br0 65534/100: (dummy)
1942 p1 1/1: (dummy)
1943 p2 2/2: (dummy)
1944])
1945
1946OVS_VSWITCHD_STOP
1947AT_CLEANUP