]> git.proxmox.com Git - ovs.git/blame - tests/ofproto-dpif.at
ovsdb: Remove prototypes for unimplemented functions.
[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
17f7f7e0
BP
1209dnl Test that basic NetFlow reports flow statistics correctly:
1210dnl - The initial packet of a flow are correctly accounted.
1211dnl - Later packets within a flow are correctly accounted.
1212dnl - Flow actions changing (in this case, due to MAC learning)
1213dnl cause a record to be sent.
1214AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1215
37b694e7
BP
1216AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1217NETFLOW_PORT=`cat stdout`
17f7f7e0 1218
432fca23
BP
1219OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1220ADD_OF_PORTS([br0], 1, 2)
1221ovs-vsctl \
17f7f7e0
BP
1222 set Bridge br0 netflow=@nf -- \
1223 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
432fca23 1224 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
17f7f7e0 1225
0bb1b692 1226ON_EXIT([kill `cat test-netflow.pid`])
4ba3d447
BP
1227AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])
1228AT_CAPTURE_FILE([netflow.log])
17f7f7e0
BP
1229
1230for delay in 1000 30000; do
1231 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)'
1232 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)'
1233
1234 ovs-appctl time/warp $delay
1235done
1236
d441e1b3 1237sleep 1
17f7f7e0
BP
1238OVS_VSWITCHD_STOP
1239ovs-appctl -t test-netflow exit
1240
1241AT_CHECK([[sed -e 's/, uptime [0-9]*//
1242s/, now [0-9.]*//
65ba8e9c 1243s/time \([0-9]*\)\.\.\.\1$/time <moment>/
17f7f7e0 1244s/time [0-9]*\.\.\.[0-9]*/time <range>/
52440c19
BP
1245' netflow.log | sort]], [0],
1246 [
1247header: v5, seq 0, engine 2,1
17f7f7e0 1248header: v5, seq 1, engine 2,1
52440c19
BP
1249seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1250seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1251seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
17f7f7e0
BP
1252])
1253AT_CLEANUP
1254
1255dnl Test that basic NetFlow reports active expirations correctly.
1256AT_SETUP([ofproto-dpif - NetFlow active expiration])
1257
37b694e7
BP
1258AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1259NETFLOW_PORT=`cat stdout`
17f7f7e0 1260
432fca23
BP
1261OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1262ADD_OF_PORTS([br0], 1, 2)
1263ovs-vsctl \
17f7f7e0
BP
1264 set Bridge br0 netflow=@nf -- \
1265 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
432fca23 1266 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
17f7f7e0 1267
3d6c7773 1268ON_EXIT([kill `cat test-netflow.pid`])
77a922c7 1269AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
17f7f7e0 1270
f802352d 1271AT_CHECK([ovs-appctl time/stop])
17f7f7e0
BP
1272n=1
1273while test $n -le 60; do
1274 n=`expr $n + 1`
1275
1276 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)'
1277 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)'
1278
1279 ovs-appctl time/warp 1000
1280done
1281
1282ovs-appctl time/warp 10000
1283
d441e1b3 1284sleep 1
17f7f7e0
BP
1285OVS_VSWITCHD_STOP
1286ovs-appctl -t test-netflow exit
1287
1288# Count the number of reported packets:
1289# - From source to destination before MAC learning kicks in (just one).
1290# - From source to destination after that.
1291# - From destination to source.
1292n_learn=0
1293n_in=0
1294n_out=0
1295n_other=0
1296n_recs=0
1297none=0
1298while read line; do
1299 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1300 case $pkts in
1301 [[0-9]]*) ;;
1302 *) continue ;;
1303 esac
1304
1305 case $line in
52440c19 1306 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
17f7f7e0
BP
1307 counter=n_learn
1308 ;;
52440c19 1309 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
17f7f7e0
BP
1310 counter=n_in
1311 ;;
52440c19 1312 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
17f7f7e0
BP
1313 counter=n_out
1314 ;;
1315 *)
1316 counter=n_other
1317 ;;
1318 esac
1319 eval $counter=\`expr \$$counter + \$pkts\`
1320 n_recs=`expr $n_recs + 1`
1321done < netflow.log
1322
1323# There should be exactly 1 MAC learning packet,
1324# exactly 59 other packets in that direction,
1325# and exactly 60 packets in the other direction.
1326AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1327])
1328
1329# There should be 1 expiration for MAC learning,
1330# at least 5 active and a final expiration in one direction,
1331# and at least 5 active and a final expiration in the other direction.
1332echo $n_recs
1333AT_CHECK([test $n_recs -ge 13])
1334
1335AT_CLEANUP
f27f2134
BP
1336
1337AT_SETUP([idle_age and hard_age increase over time])
1338OVS_VSWITCHD_START
1339
1340# get_ages DURATION HARD IDLE
1341#
1342# Fetch the flow duration, hard age, and idle age into the variables
1343# whose names are given as arguments. Rounds DURATION down to the
1344# nearest integer. If hard_age doesn't appear in the output, sets
1345# HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1346# to 0.
1347get_ages () {
1348 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1349
1350 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1351 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1352 AS_VAR_COPY([$1], [duration])
1353
1354 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1355 if test X"$hard" = X; then
1356 hard=none
1357 else
1358 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1359 fi
1360 AS_VAR_COPY([$2], [hard])
1361
1362 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1363 if test X"$idle" = X; then
1364 idle=0
1365 else
1366 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1367 fi
1368 AS_VAR_COPY([$3], [idle])
1369}
1370
1371# Add a flow and get its initial hard and idle age.
1372AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1373get_ages duration1 hard1 idle1
1374
1375# Warp time forward by 10 seconds, then modify the flow's actions.
1376ovs-appctl time/warp 10000
1377get_ages duration2 hard2 idle2
1378AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1379
1380# Warp time forward by 10 seconds.
1381ovs-appctl time/warp 10000
1382get_ages duration3 hard3 idle3
1383
1384# Warp time forward 10 more seconds, then pass some packets through the flow,
1385# then warp forward a few more times because idle times are only updated
1386# occasionally.
1387ovs-appctl time/warp 10000
1388ovs-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)'
1389ovs-appctl time/warp 1000
1390ovs-appctl time/warp 1000
1391ovs-appctl time/warp 1000
1392get_ages duration4 hard4 idle4
1393
1394printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1395printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1396printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1397
1398# Duration should increase steadily over time.
1399AT_CHECK([test $duration1 -lt $duration2])
1400AT_CHECK([test $duration2 -lt $duration3])
1401AT_CHECK([test $duration3 -lt $duration4])
1402
1403# Hard age should be "none" initially because it's the same as flow_duration,
1404# then it should increase.
1405AT_CHECK([test $hard1 = none])
1406AT_CHECK([test $hard2 = none])
1407AT_CHECK([test $hard3 != none])
1408AT_CHECK([test $hard4 != none])
1409AT_CHECK([test $hard3 -lt $hard4])
1410
1411# Idle age should increase from 1 to 2 to 3, then decrease.
1412AT_CHECK([test $idle1 -lt $idle2])
1413AT_CHECK([test $idle2 -lt $idle3])
1414AT_CHECK([test $idle3 -gt $idle4])
1415
1416# Check some invariant relationships.
1417AT_CHECK([test $duration1 = $idle1])
1418AT_CHECK([test $duration2 = $idle2])
1419AT_CHECK([test $duration3 = $idle3])
1420AT_CHECK([test $idle3 -gt $hard3])
1421AT_CHECK([test $idle4 -lt $hard4])
1422AT_CHECK([test $hard4 -lt $duration4])
1423
1424OVS_VSWITCHD_STOP
1425AT_CLEANUP
0e553d9c
BP
1426
1427AT_SETUP([ofproto-dpif - fin_timeout])
1428OVS_VSWITCHD_START
1429AT_DATA([flows.txt], [dnl
1430in_port=1 actions=output:2
1431in_port=2 actions=mod_vlan_vid:17,output:1
1432])
1433AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1434AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1435[NXST_FLOW reply:
1436 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1437])
1438# Check that a TCP SYN packet does not change the timeout. (Because
1439# flow stats updates are mainly what implements the fin_timeout
1440# feature, we warp forward a couple of times to ensure that flow stats
1441# run before re-checking the flow table.)
1442AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1443])
1444AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1445warped
1446])
1447AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1448[NXST_FLOW reply:
1449 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1450])
1451# Check that a TCP FIN packet does change the timeout.
1452AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1453])
1454AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1455warped
1456])
1457AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1458[NXST_FLOW reply:
1459 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1460])
1461OVS_VSWITCHD_STOP
1462AT_CLEANUP
27022416
JP
1463
1464AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1465OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1466ADD_OF_PORTS([br0], [1], [2])
1467ADD_OF_PORTS([br1], [3])
1468
1469AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1470dummy@br0
1471dummy@br1
1472])
1473OVS_VSWITCHD_STOP
1474AT_CLEANUP
1475
1476AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1477OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1478ADD_OF_PORTS([br0], [1], [2])
1479ADD_OF_PORTS([br1], [3])
1480
1481AT_CHECK([ovs-appctl dpif/show], [0], [dnl
acf60855 1482br0 (dummy@ovs-dummy):
735d7efb 1483 lookups: hit:0 missed:0
27022416
JP
1484 flows: 0
1485 br0 65534/100: (dummy)
1486 p1 1/1: (dummy)
1487 p2 2/2: (dummy)
acf60855 1488br1 (dummy@ovs-dummy):
735d7efb 1489 lookups: hit:0 missed:0
27022416
JP
1490 flows: 0
1491 br1 65534/101: (dummy)
1492 p3 3/3: (dummy)
1493])
1494
1495AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
acf60855 1496br0 (dummy@ovs-dummy):
735d7efb 1497 lookups: hit:0 missed:0
27022416
JP
1498 flows: 0
1499 br0 65534/100: (dummy)
1500 p1 1/1: (dummy)
1501 p2 2/2: (dummy)
1502])
1503OVS_VSWITCHD_STOP
1504AT_CLEANUP
1505
1506AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1507OVS_VSWITCHD_START([add-br br1 -- \
1508 set bridge br1 datapath-type=dummy fail-mode=secure])
1509ADD_OF_PORTS([br0], [1], [2])
1510ADD_OF_PORTS([br1], [3])
1511
1512AT_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
1513])
1514AT_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
1515])
1516AT_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
1517])
1518
1519AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
f2245da3
JP
1520in_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))
1521in_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
1522])
1523
1524AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
f2245da3 1525in_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
1526])
1527
1528OVS_VSWITCHD_STOP
1529AT_CLEANUP
1530
1531AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1532OVS_VSWITCHD_START([add-br br1 -- \
1533 set bridge br1 datapath-type=dummy fail-mode=secure])
1534ADD_OF_PORTS([br0], [1], [2])
1535ADD_OF_PORTS([br1], [3])
1536
1537AT_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
1538])
1539AT_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
1540])
1541AT_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
1542])
1543
1544AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
f2245da3
JP
1545in_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))
1546in_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
1547])
1548
1549AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
f2245da3 1550in_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
1551])
1552
1553AT_CHECK([ovs-appctl dpif/del-flows br0])
1554AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1555])
1556
1557AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
f2245da3 1558in_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
1559])
1560
1561OVS_VSWITCHD_STOP
1562AT_CLEANUP
0a740f48
EJ
1563
1564AT_SETUP([ofproto-dpif - patch ports])
1565OVS_VSWITCHD_START([add-br br1 \
1566-- set bridge br1 datapath-type=dummy fail-mode=secure \
1567-- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
1568-- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
1569
1570ADD_OF_PORTS([br0], [2])
1571ADD_OF_PORTS([br1], [3])
1572
1573AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1574AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1575
1576for i in $(seq 1 10); do
1577 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)'
1578done
1579
1580for i in $(seq 1 5); do
1581 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)'
1582done
1583
735d7efb
AZ
1584AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1585warped
1586])
1587
0a740f48
EJ
1588AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1589br0 (dummy@ovs-dummy):
735d7efb 1590 lookups: hit:9 missed:1
0a740f48
EJ
1591 flows: 1
1592 br0 65534/100: (dummy)
1593 p2 2/2: (dummy)
1594 pbr0 1/none: (patch: peer=pbr1)
1595br1 (dummy@ovs-dummy):
735d7efb 1596 lookups: hit:4 missed:1
0a740f48
EJ
1597 flows: 1
1598 br1 65534/101: (dummy)
1599 p3 3/3: (dummy)
1600 pbr1 1/none: (patch: peer=pbr0)
1601])
1602
1603AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1604in_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
1605]),
1606AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1607in_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
1608])
1609
1610AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1611OFPST_PORT reply (xid=0x4): 1 ports
1612 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
1613 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
1614])
1615
1616AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
1617OFPST_PORT reply (xid=0x4): 1 ports
1618 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
1619 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
1620])
1621
1622OVS_VSWITCHD_STOP
1623AT_CLEANUP