]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ofproto-dpif.at
ofproto-dpif: Store relevant fields for wildcarding in facet.
[mirror_ovs.git] / tests / ofproto-dpif.at
CommitLineData
29901626
BP
1AT_BANNER([ofproto-dpif])
2
3AT_SETUP([ofproto-dpif - resubmit])
023e1e0a 4OVS_VSWITCHD_START
f7b8e494
JP
5ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
6 [16], [17], [18], [19], [20], [21])
29901626
BP
7AT_DATA([flows.txt], [dnl
8table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
9table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
10table=0 in_port=3 priority=2000 icmp actions=output(20)
11table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
12table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
13table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
14])
15AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31a19d69 16AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
29901626
BP
17AT_CHECK([tail -1 stdout], [0],
18 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
19])
023e1e0a 20OVS_VSWITCHD_STOP
29901626 21AT_CLEANUP
58a89177 22
55599423
JR
23AT_SETUP([ofproto-dpif - goto table])
24OVS_VSWITCHD_START
25ADD_OF_PORTS([br0], [1], [10], [11])
26echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
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])
50aa28fd 65AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
58a89177 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])
50aa28fd 84AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
bd85dac1
AZ
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 94AT_DATA([flows.txt], [dnl
557323cd 95in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
f694937d
EJ
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[[]]
557323cd 102in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
f694937d
EJ
103])
104AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 105AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
f694937d 106AT_CHECK([tail -1 stdout], [0],
557323cd 107 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
f694937d 108])
023e1e0a 109OVS_VSWITCHD_STOP
f694937d 110AT_CLEANUP
8e9ce036 111
f0fd1a17
PS
112AT_SETUP([ofproto-dpif - dec_ttl])
113OVS_VSWITCHD_START
f7b8e494 114ADD_OF_PORTS([br0], [1], [2], [3], [4])
f0fd1a17
PS
115AT_DATA([flows.txt], [dnl
116table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
117table=1 in_port=1 action=dec_ttl,output:3
118])
119AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 120AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
6a7e895f 121AT_CHECK([tail -3 stdout], [0],
f0fd1a17 122 [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
123This flow is handled by the userspace slow path because it:
124 - Sends "packet-in" messages to the OpenFlow controller.
f0fd1a17 125])
50aa28fd 126AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=3,frag=no)'], [0], [stdout])
f0fd1a17
PS
127AT_CHECK([tail -1 stdout], [0],
128 [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
129])
50aa28fd 130AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
f0fd1a17
PS
131AT_CHECK([tail -1 stdout], [0],
132 [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
133])
134
982697a4 135AT_CAPTURE_FILE([ofctl_monitor.log])
77a922c7 136AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
50aa28fd 137AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
f0fd1a17
PS
138OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
139AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 140NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
3f78c3cc 141icmp,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
142])
143OVS_VSWITCHD_STOP
144AT_CLEANUP
145
146
77750738 147AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
e44768b7
JP
148OVS_VSWITCHD_START
149ADD_OF_PORTS([br0], [1], [2])
77750738 150
77750738
JP
151AT_CHECK([ovs-ofctl add-flow br0 action=normal])
152
153# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 154flow="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 155AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
72d64e33
EJ
156AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
1571
1582
159100
160])
77750738
JP
161
162OVS_VSWITCHD_STOP
163AT_CLEANUP
164
8b36f51e 165AT_SETUP([ofproto-dpif - DSCP])
8b36f51e 166OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
72d64e33 167ADD_OF_PORTS([br0], [9])
8b36f51e
EJ
168AT_DATA([flows.txt], [dnl
169actions=output:65534,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:65534
170])
171AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
172AT_CHECK([ovs-vsctl -- \
173 set Port p1 qos=@newqos --\
174 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
175 --id=@q1 create Queue dscp=1 --\
176 --id=@q2 create Queue dscp=2], [0], [ignore])
50aa28fd 177AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
8b36f51e
EJ
178AT_CHECK([tail -1 stdout], [0],
179 [Datapath actions: dnl
e44768b7 180100,dnl
1b567fb9
AA
181set(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
182set(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 1831,dnl
1b567fb9
AA
184set(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
185set(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 186set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
e44768b7 187100
8b36f51e
EJ
188])
189OVS_VSWITCHD_STOP
190AT_CLEANUP
191
fd19297b 192AT_SETUP([ofproto-dpif - output/flood flags])
f7b8e494
JP
193OVS_VSWITCHD_START
194ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
fd19297b
EJ
195
196AT_DATA([flows.txt], [dnl
a0fbe94a 197in_port=local actions=local,flood
fd19297b
EJ
198in_port=1 actions=flood
199in_port=2 actions=all
200in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
5bf93d67 201in_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
202])
203AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
204AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
205AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
206
50aa28fd 207AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
a0fbe94a
AR
208AT_CHECK([tail -1 stdout \
209| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
2101
2112
2123
2134
2147
215])
216
50aa28fd 217AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
fd19297b
EJ
218AT_CHECK([tail -1 stdout \
219| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
e44768b7 220100
fd19297b
EJ
2212
2223
2234
2247
225])
226
50aa28fd 227AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
fd19297b
EJ
228AT_CHECK([tail -1 stdout \
229| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
fd19297b 2301
e44768b7 231100
fd19297b
EJ
2323
2334
2346
2357
236])
237
50aa28fd 238AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
fd19297b 239AT_CHECK([tail -1 stdout], [0],
e44768b7 240 [Datapath actions: 100,1,2,4,6,7
fd19297b
EJ
241])
242
50aa28fd 243AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
fd19297b 244AT_CHECK([tail -1 stdout], [0],
1b567fb9 245 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
fd19297b
EJ
246])
247OVS_VSWITCHD_STOP
248AT_CLEANUP
249
15056dc8
EJ
250AT_SETUP([ofproto-dpif - controller])
251OVS_VSWITCHD_START([dnl
252 add-port br0 p1 -- set Interface p1 type=dummy
253])
254
255AT_CAPTURE_FILE([ofctl_monitor.log])
256AT_DATA([flows.txt], [dnl
257cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
54834960 258cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
15056dc8
EJ
259cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
260
54834960
EJ
261cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
262cookie=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)
263cookie=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)
264cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
265cookie=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)
266cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
267cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
b02475c5
SH
268cookie=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
269cookie=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
270cookie=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 271cookie=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
272cookie=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
273cookie=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
274cookie=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
275cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
276cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
277cookie=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
278])
279AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
280
281dnl Flow miss.
77a922c7 282AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
283
284for i in 1 2 3 ; do
285 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)'
286done
287
288OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
289AT_CHECK([cat ofctl_monitor.log], [0], [dnl
f0fd1a17 290OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
3f78c3cc 291tcp,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 292dnl
f0fd1a17 293OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
3f78c3cc 294tcp,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 295dnl
f0fd1a17 296OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
3f78c3cc 297tcp,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
298])
299
300dnl Singleton controller action.
77a922c7 301AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
302
303for i in 1 2 3 ; do
304 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)'
305done
306
307OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
308AT_CHECK([cat ofctl_monitor.log], [0], [dnl
309OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 310tcp,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
311dnl
312OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 313tcp,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
314dnl
315OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 316tcp,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
317])
318
319dnl Modified controller action.
77a922c7 320AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
321
322for i in 1 2 3 ; do
323 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)'
324done
325
326OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
327AT_CHECK([cat ofctl_monitor.log], [0], [dnl
328OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3f78c3cc 329tcp,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
330dnl
331OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3f78c3cc 332tcp,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
333dnl
334OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
3f78c3cc 335tcp,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
336])
337
b02475c5
SH
338dnl Modified MPLS controller action.
339AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
340
341for i in 1 2 3; do
342 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)'
343done
344
345OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
346AT_CHECK([cat ofctl_monitor.log], [0], [dnl
347NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 348mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
349dnl
350NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 351mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
352dnl
353NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 354mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
355])
356
357dnl Modified MPLS controller action.
358AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
359
360dnl 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)
361
362for i in 1 2 3; do
363 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)'
364done
365
366OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
367AT_CHECK([cat ofctl_monitor.log], [0], [dnl
368NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 369mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
b02475c5
SH
370dnl
371NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 372mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
b02475c5
SH
373dnl
374NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 375mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
b02475c5
SH
376])
377
378dnl Modified MPLS controller action.
379AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
380
381for i in 1 2 3; do
382 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))'
383done
384
385OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
386AT_CHECK([cat ofctl_monitor.log], [0], [dnl
387NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 388mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
389dnl
390NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 391mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
392dnl
393NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 394mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
b02475c5
SH
395])
396
b676167a
SH
397dnl Modified MPLS controller action.
398AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
399
400for i in 1 2 3; do
401 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)'
402done
403
404OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
405AT_CHECK([cat ofctl_monitor.log], [0], [dnl
406NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 407mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
b676167a
SH
408dnl
409NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 410mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
b676167a
SH
411dnl
412NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 413mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
b676167a
SH
414])
415
0f3f3c3d
SH
416dnl Modified MPLS controller action.
417AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
418
419for i in 1 2 3; do
420 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)'
421done
422
423OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
424AT_CHECK([cat ofctl_monitor.log], [0], [dnl
425NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 426mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
427dnl
428NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 429mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
430dnl
431NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 432mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
433])
434
435dnl Modified MPLS controller action.
436AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
437
438for i in 1 2 3; do
439 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)'
440done
441
442OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
443AT_CHECK([cat ofctl_monitor.log], [0], [dnl
444NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 445mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
446dnl
447NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 448mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
449dnl
450NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 451mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
0f3f3c3d
SH
452])
453
454dnl Modified MPLS controller action.
455AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
456
457for i in 1 2 3; do
458 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)'
459done
460
461OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
462AT_CHECK([cat ofctl_monitor.log], [0], [dnl
463NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 464mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
0f3f3c3d
SH
465dnl
466NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 467mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
0f3f3c3d
SH
468dnl
469NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 470mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
0f3f3c3d
SH
471])
472
b02475c5
SH
473dnl Modified MPLS actions.
474AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
475
476for i in 1 2 3; do
02830175 477 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:55:55:55:55:55,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=100,tc=7,ttl=64,bos=1)'
b02475c5
SH
478done
479
480OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
481AT_CHECK([cat ofctl_monitor.log], [0], [dnl
482NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 483mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
b02475c5
SH
484dnl
485NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 486mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
b02475c5
SH
487dnl
488NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
392c30ba 489mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
b02475c5
SH
490])
491
492dnl Modified MPLS ipv6 controller action.
493AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
494
495for i in 1 2 3; do
496 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)'
497done
498
499OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
500AT_CHECK([cat ofctl_monitor.log], [0], [dnl
501NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 502mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
b02475c5
SH
503dnl
504NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 505mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
b02475c5
SH
506dnl
507NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392c30ba 508mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
b02475c5
SH
509])
510
511
512dnl Modified MPLS pop action.
cff78c88
SH
513dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
514dnl 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)
515dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
516
b02475c5
SH
517AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
518
519for i in 1 2 3; do
cff78c88 520 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 521done
cff78c88
SH
522#for i in 2 3; do
523# 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)'
524#done
b02475c5
SH
525
526OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
527AT_CHECK([cat ofctl_monitor.log], [0], [dnl
cff78c88
SH
528NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
529tcp,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 530dnl
cff78c88
SH
531NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
532tcp,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 533dnl
cff78c88
SH
534NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
535tcp,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
536])
537
15056dc8 538dnl Checksum TCP.
77a922c7 539AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
540
541for i in 1 ; do
542 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)'
543done
544
545OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
546AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 547NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 548tcp,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 549dnl
42edbe39 550NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
3f78c3cc 551tcp,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 552dnl
42edbe39 553NXT_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 554tcp,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 555dnl
42edbe39 556NXT_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 557tcp,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 558dnl
42edbe39 559NXT_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 560tcp,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 561dnl
42edbe39 562NXT_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 563tcp,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 564dnl
42edbe39 565NXT_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 566tcp,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 567dnl
42edbe39 568NXT_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 569tcp,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 570dnl
42edbe39 571NXT_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 572tcp,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
573])
574
575dnl Checksum UDP.
77a922c7 576AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
577
578for i in 1 ; do
579 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'
580done
581
582OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
583AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 584NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
3f78c3cc 585udp,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 586dnl
42edbe39 587NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
3f78c3cc 588udp,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 589dnl
42edbe39 590NXT_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 591udp,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 592dnl
42edbe39 593NXT_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 594udp,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 595dnl
42edbe39 596NXT_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 597udp,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 598dnl
42edbe39 599NXT_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 600udp,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 601dnl
42edbe39 602NXT_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 603udp,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 604dnl
42edbe39 605NXT_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 606udp,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 607dnl
42edbe39 608NXT_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 609udp,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
610])
611
5c0243a9 612AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
ef0ce8ae
BP
613AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
614 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
615 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
616 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)
617 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)
618 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)
619 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)
620 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)
621 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
622 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
b02475c5
SH
623 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
624 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
625 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 626 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
627 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
628 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
629 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
392c30ba 630 cookie=0xb, n_packets=3, n_bytes=180, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
b02475c5 631 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 632 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
ef0ce8ae
BP
633 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
634NXST_FLOW reply:
15056dc8
EJ
635])
636
637OVS_VSWITCHD_STOP
8e9ce036 638AT_CLEANUP
04c956fc 639
ecac4ebf 640AT_SETUP([ofproto-dpif - VLAN handling])
04c956fc 641OVS_VSWITCHD_START(
023e1e0a
BP
642 [set Bridge br0 fail-mode=standalone -- \
643 add-port br0 p1 trunks=10,12 -- \
ecac4ebf 644 add-port br0 p2 tag=10 -- \
5e9ceccd
BP
645 add-port br0 p3 tag=12 \
646 other-config:priority-tags=true -- \
ecac4ebf
BP
647 add-port br0 p4 tag=12 -- \
648 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
649 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
650 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
5e9ceccd
BP
651 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
652 other-config:priority-tags=true -- \
ecac4ebf
BP
653 set Interface p1 type=dummy -- \
654 set Interface p2 type=dummy -- \
655 set Interface p3 type=dummy -- \
656 set Interface p4 type=dummy -- \
657 set Interface p5 type=dummy -- \
658 set Interface p6 type=dummy -- \
659 set Interface p7 type=dummy -- \
660 set Interface p8 type=dummy --])
04c956fc 661
247527db
BP
662dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
663dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
ecac4ebf 664dnl actions.
04c956fc 665for tuple in \
e44768b7
JP
666 "100 none 0 drop" \
667 "100 0 0 drop" \
668 "100 0 1 drop" \
669 "100 10 0 1,5,6,7,8,pop_vlan,2" \
670 "100 10 1 1,5,6,7,8,pop_vlan,2" \
671 "100 11 0 5,7" \
672 "100 11 1 5,7" \
673 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
674 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
247527db
BP
675 "1 none 0 drop" \
676 "1 0 0 drop" \
677 "1 0 1 drop" \
e44768b7
JP
678 "1 10 0 5,6,7,8,100,pop_vlan,2" \
679 "1 10 1 5,6,7,8,100,pop_vlan,2" \
247527db
BP
680 "1 11 0 drop" \
681 "1 11 1 drop" \
e44768b7
JP
682 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
683 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
684 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
685 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
686 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
247527db
BP
687 "2 10 0 drop" \
688 "2 10 1 drop" \
689 "2 11 0 drop" \
690 "2 11 1 drop" \
691 "2 12 0 drop" \
692 "2 12 1 drop" \
e44768b7
JP
693 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
694 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
695 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
696 "3 10 0 drop" \
697 "3 10 1 drop" \
698 "3 11 0 drop" \
699 "3 11 1 drop" \
700 "3 12 0 drop" \
701 "3 12 1 drop" \
e44768b7
JP
702 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
703 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
704 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
705 "4 10 0 drop" \
706 "4 10 1 drop" \
707 "4 11 0 drop" \
708 "4 11 1 drop" \
709 "4 12 0 drop" \
710 "4 12 1 drop" \
e44768b7
JP
711 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
712 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
713 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
714 "5 10 0 1,6,7,8,100,pop_vlan,2" \
715 "5 10 1 1,6,7,8,100,pop_vlan,2" \
716 "5 11 0 7,100" \
717 "5 11 1 7,100" \
718 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
719 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
720 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
721 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
722 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
723 "6 10 0 1,5,7,8,100,pop_vlan,2" \
724 "6 10 1 1,5,7,8,100,pop_vlan,2" \
247527db
BP
725 "6 11 0 drop" \
726 "6 11 1 drop" \
e44768b7
JP
727 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
728 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
729 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
730 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
731 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
732 "7 10 0 1,5,6,8,100,pop_vlan,2" \
733 "7 10 1 1,5,6,8,100,pop_vlan,2" \
734 "7 11 0 5,100" \
735 "7 11 1 5,100" \
736 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
737 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
738 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
739 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
740 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
741 "8 10 0 1,5,6,7,100,pop_vlan,2" \
742 "8 10 1 1,5,6,7,100,pop_vlan,2" \
247527db
BP
743 "8 11 0 drop" \
744 "8 11 1 drop" \
e44768b7
JP
745 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
746 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
04c956fc
BP
747do
748 set $tuple
749 in_port=$1
750 vlan=$2
ecac4ebf
BP
751 pcp=$3
752 expected=$4
04c956fc
BP
753
754 if test $vlan = none; then
247527db 755 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
04c956fc 756 else
247527db 757 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
758 fi
759
395e68ce
BP
760 echo "----------------------------------------------------------------------"
761 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
762
50aa28fd 763 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
ecac4ebf 764 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
04c956fc 765
247527db 766 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
becffb86 767 mv stdout expout
247527db 768 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
04c956fc
BP
769done
770
771OVS_VSWITCHD_STOP
772AT_CLEANUP
7257b535
BP
773
774AT_SETUP([ofproto-dpif - fragment handling])
023e1e0a 775OVS_VSWITCHD_START
72d64e33 776ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
7257b535
BP
777AT_DATA([flows.txt], [dnl
778priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
779priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
780priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
781priority=50 tcp ip_frag=no actions=output:4
782priority=50 tcp ip_frag=first actions=output:5
783priority=50 tcp ip_frag=later actions=output:6
784])
785AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
786
a61680c6 787base_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
788no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
789first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
790later_flow="$base_flow,frag=later)"
791
792 # mode no first later
793for tuple in \
794 'normal 1 5 6' \
795 'drop 1 drop drop' \
796 'nx-match 1 2 6'
797do
798 set $tuple
799 mode=$1
800 no=$2
801 first=$3
802 later=$4
803
804 AT_CHECK([ovs-ofctl set-frags br0 $mode])
805 for type in no first later; do
806 eval flow=\$${type}_flow exp_output=\$$type
7fd51d39 807 printf "\n%s\n" "----$mode $type-----"
50aa28fd 808 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
7fd51d39
BP
809 : > expout
810 if test $mode = drop && test $type != no; then
811 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
812 fi
813 echo "Datapath actions: $exp_output" >> expout
814 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
7257b535
BP
815 done
816done
023e1e0a 817OVS_VSWITCHD_STOP
7257b535 818AT_CLEANUP
848e8809
EJ
819
820AT_SETUP([ofproto-dpif - exit])
821OVS_VSWITCHD_START
f7b8e494 822ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
848e8809
EJ
823AT_DATA([flows.txt], [dnl
824in_port=1 actions=output:10,exit,output:11
825in_port=2 actions=output:12,resubmit:1,output:12
826in_port=3 actions=output:13,resubmit:2,output:14
827])
828AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 829AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
830AT_CHECK([tail -1 stdout], [0],
831 [Datapath actions: 10
832])
50aa28fd 833AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
834AT_CHECK([tail -1 stdout], [0],
835 [Datapath actions: 12,10
836])
50aa28fd 837AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
838AT_CHECK([tail -1 stdout], [0],
839 [Datapath actions: 13,12,10
840])
841OVS_VSWITCHD_STOP
842AT_CLEANUP
c06bba01
JP
843
844
845AT_SETUP([ofproto-dpif - mirroring, select_all])
432fca23
BP
846OVS_VSWITCHD_START
847ADD_OF_PORTS([br0], 1, 2, 3)
848ovs-vsctl \
c06bba01
JP
849 set Bridge br0 mirrors=@m --\
850 --id=@p3 get Port p3 --\
432fca23 851 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 852
c06bba01
JP
853AT_DATA([flows.txt], [dnl
854in_port=1 actions=output:2
855in_port=2 actions=output:1
856])
857AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
858
247527db 859flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 860AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 861AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 862 [Datapath actions: 2,3
c06bba01
JP
863])
864
247527db 865flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 866AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 867AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 868 [Datapath actions: 1,3
c06bba01
JP
869])
870
871OVS_VSWITCHD_STOP
872AT_CLEANUP
873
874
875AT_SETUP([ofproto-dpif - mirroring, select_src])
432fca23
BP
876OVS_VSWITCHD_START
877ADD_OF_PORTS([br0], 1, 2, 3)
878ovs-vsctl \
c06bba01
JP
879 set Bridge br0 mirrors=@m --\
880 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
432fca23 881 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
c06bba01 882
c06bba01
JP
883AT_DATA([flows.txt], [dnl
884in_port=1 actions=output:2
885in_port=2 actions=output:1
886])
887AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
888
247527db 889flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 890AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 891AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 892 [Datapath actions: 2,3
c06bba01
JP
893])
894
247527db 895flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 896AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 897AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 898 [Datapath actions: 1
c06bba01
JP
899])
900OVS_VSWITCHD_STOP
901AT_CLEANUP
902
33158a18 903AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
432fca23
BP
904OVS_VSWITCHD_START
905ADD_OF_PORTS([br0], 1, 2)
906ovs-vsctl \
33158a18
JP
907 set Bridge br0 mirrors=@m --\
908 --id=@p2 get Port p2 --\
432fca23 909 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
33158a18 910
33158a18
JP
911AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
912
913# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 914flow="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
915AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
916AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 917 [Datapath actions: 1,2
33158a18
JP
918])
919
920OVS_VSWITCHD_STOP
921AT_CLEANUP
922
c06bba01
JP
923
924AT_SETUP([ofproto-dpif - mirroring, select_dst])
432fca23
BP
925OVS_VSWITCHD_START
926ADD_OF_PORTS([br0], 1, 2, 3)
927ovs-vsctl \
c06bba01
JP
928 set Bridge br0 mirrors=@m --\
929 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 930 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
c06bba01 931
c06bba01
JP
932AT_DATA([flows.txt], [dnl
933in_port=1 actions=output:2
934in_port=2 actions=output:1
935])
936AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
937
247527db 938flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 939AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 940AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 941 [Datapath actions: 2,3
c06bba01
JP
942])
943
247527db 944flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 945AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 946AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 947 [Datapath actions: 1
c06bba01
JP
948])
949
950OVS_VSWITCHD_STOP
951AT_CLEANUP
952
953
954AT_SETUP([ofproto-dpif - mirroring, select_vlan])
432fca23
BP
955OVS_VSWITCHD_START
956ADD_OF_PORTS([br0], 1, 2, 3)
957ovs-vsctl \
c06bba01
JP
958 set Bridge br0 mirrors=@m --\
959 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 960 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
c06bba01 961
c06bba01
JP
962AT_DATA([flows.txt], [dnl
963in_port=1, actions=output:2
964])
965AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
966
247527db 967flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 968AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 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=10,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
50aa28fd 974AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 975AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 976 [Datapath actions: 2
c06bba01
JP
977])
978
247527db 979flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=11,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
50aa28fd 980AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 981AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 982 [Datapath actions: 2,3
c06bba01
JP
983])
984
985OVS_VSWITCHD_STOP
986AT_CLEANUP
987
988
989AT_SETUP([ofproto-dpif - mirroring, output_port])
432fca23
BP
990OVS_VSWITCHD_START
991ADD_OF_PORTS([br0], 1, 2, 3)
992ovs-vsctl \
c06bba01
JP
993 set Bridge br0 mirrors=@m --\
994 --id=@p3 get Port p3 --\
432fca23 995 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 996
c06bba01
JP
997AT_DATA([flows.txt], [dnl
998in_port=1 actions=mod_vlan_vid:17,output:2
999in_port=2 actions=output:1
1000])
1001AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1002
247527db 1003flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1004AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1005AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1006 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
c06bba01
JP
1007])
1008
247527db 1009flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1010AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 1011AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 1012 [Datapath actions: 1,3
c06bba01
JP
1013])
1014
1015OVS_VSWITCHD_STOP
1016AT_CLEANUP
1017
c06bba01 1018AT_SETUP([ofproto-dpif - mirroring, output_vlan])
432fca23
BP
1019OVS_VSWITCHD_START
1020ADD_OF_PORTS([br0], 1, 2)
1021ovs-vsctl \
c06bba01 1022 set Bridge br0 mirrors=@m --\
432fca23 1023 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
c06bba01 1024
c06bba01
JP
1025AT_DATA([flows.txt], [dnl
1026in_port=1 actions=output:2
1027in_port=2 actions=mod_vlan_vid:17,output:1
1028])
1029AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1030
247527db 1031flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1032AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
1033actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1034
e44768b7 1035expected="2,push_vlan(vid=12,pcp=0),1,2,100"
247527db 1036AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 1037mv stdout expout
247527db 1038AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01 1039
247527db 1040flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
50aa28fd 1041AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
1042actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1043
e44768b7 1044expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
247527db 1045AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 1046mv stdout expout
247527db 1047AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01
JP
1048
1049OVS_VSWITCHD_STOP
1050AT_CLEANUP
b44a10b7 1051
22bb3cbc
AW
1052# Two testcases below are for the ofproto/trace command
1053# The first one tests all correct syntax:
1054# ofproto/trace [dp_name] odp_flow [-generate|packet]
1055# ofproto/trace br_name br_flow [-generate|packet]
1056AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1057OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1058ADD_OF_PORTS([br0], 1, 2, 3)
1059
1060AT_DATA([flows.txt], [dnl
1061in_port=1 actions=output:2
1062in_port=2 actions=output:1
1063])
1064AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1065
1066odp_flow="in_port(1)"
1067br_flow="in_port=1"
1068# Test command: ofproto/trace odp_flow
1069AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1070AT_CHECK([tail -1 stdout], [0], [dnl
1071Datapath actions: 2
1072])
1073
1074# Test command: ofproto/trace dp_name odp_flow
1075AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1076AT_CHECK([tail -1 stdout], [0], [dnl
1077Datapath actions: 2
1078])
1079# Test commmand: ofproto/trace br_name br_flow
1080AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1081AT_CHECK([tail -1 stdout], [0], [dnl
1082Datapath actions: 2
1083])
1084
1085# Delete the inserted flows
1086AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1087AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1088
1089# This section beflow tests the [-generate] option
1090odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1091br_flow="arp,metadata=0,in_port=3,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=ff:ff:ff:ff:ff:ff"
1092
1093# Test command: ofproto/trace odp_flow
1094AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1095# Check for no MAC learning entry
1096AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1097 port VLAN MAC Age
1098])
1099
1100# Test command: ofproto/trace br_name br_flow
1101AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1102# Check for no MAC learning entry
1103AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1104 port VLAN MAC Age
1105])
1106
1107# Test command: ofproto/trace odp_flow -generate
1108AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1109# Check for the MAC learning entry
1110AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1111 port VLAN MAC Age
1112 3 0 50:54:00:00:00:05 ?
1113])
1114
1115# Test command: ofproto/trace dp_name odp_flow -generate
1116AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1117 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1118 -generate], [0], [stdout])
1119# Check for both MAC learning entries
1120AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1121 port VLAN MAC Age
1122 3 0 50:54:00:00:00:05 ?
1123 1 0 50:54:00:00:00:06 ?
1124])
1125
1126# Test command: ofproto/trace br_name br_flow -generate
1127AT_CHECK([ovs-appctl ofproto/trace br0 \
1128 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1129 -generate], [0], [stdout])
1130# Check for both MAC learning entries.
1131AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1132 port VLAN MAC Age
1133 3 0 50:54:00:00:00:05 ?
1134 1 0 50:54:00:00:00:06 ?
1135 2 0 50:54:00:00:00:07 ?
1136])
1137
1138# This section beflow tests the [packet] option
1139# The ovs-tcpundump of packets between port1 and port2
1140pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1141pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1142
1143# Construct the MAC learning table
1144AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1145 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1146 -generate], [0], [stdout])
1147
1148# Construct the MAC learning table
1149AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1150 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1151 -generate], [0], [stdout])
1152
1153# Test command: ofproto/trace odp_flow packet
1154AT_CHECK([ovs-appctl ofproto/trace \
1155 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1156AT_CHECK([tail -1 stdout], [0], [dnl
1157Datapath actions: 2
1158])
1159AT_CHECK([head -n 3 stdout], [0], [dnl
1160Bridge: br0
1161Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1162Flow: skb_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1163])
1164
1165# Test command: ofproto/trace dp_name odp_flow packet
1166AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1167 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1168AT_CHECK([tail -1 stdout], [0], [dnl
1169Datapath actions: 2
1170])
1171AT_CHECK([head -n 3 stdout], [0], [dnl
1172Bridge: br0
1173Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1174Flow: skb_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1175])
1176
1177# Test command: ofproto/trace br_name br_flow packet
1178AT_CHECK([ovs-appctl ofproto/trace br0 \
1179 "in_port=2,skb_priority=2,skb_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1180AT_CHECK([tail -1 stdout], [0], [dnl
1181Datapath actions: set(skb_mark(0)),1
1182])
1183AT_CHECK([head -n 2 stdout], [0], [dnl
1184Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1185Flow: skb_mark=0x1,skb_priority=0x2,arp,metadata=0,in_port=2,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1186])
1187
1188OVS_VSWITCHD_STOP
1189AT_CLEANUP
1190
1191# The second test tests the corner cases
1192AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1193OVS_VSWITCHD_START
1194ADD_OF_PORTS([br0], 1, 2)
1195
1196# Define flows
1197odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1198br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1199# Define options
1200generate="-generate"
1201pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1202
1203# Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1204m4_foreach(
1205[option],
1206[[],
1207["$generate"],
1208["$pkt"]],
1209[AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1210 [2], [], [stderr])
1211AT_CHECK([tail -2 stderr], [0], [dnl
1212Cannot find datapath of this name
1213ovs-appctl: ovs-vswitchd: server returned an error
1214])])
1215
1216# Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1217m4_foreach(
1218[option],
1219[[],
1220["$generate"],
1221["$pkt"]],
1222[AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1223 [2], [], [stderr])
1224AT_CHECK([tail -2 stderr], [0], [dnl
1225Cannot find datapath of this name
1226ovs-appctl: ovs-vswitchd: server returned an error
1227])])
1228
1229# Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1230m4_foreach(
1231[option],
1232[[],
1233["$generate"],
1234["$pkt"]],
1235[AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1236 [2], [], [stderr])
1237AT_CHECK([tail -2 stderr], [0], [dnl
1238Cannot find datapath of this name
1239ovs-appctl: ovs-vswitchd: server returned an error
1240])])
1241
1242# Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1243m4_foreach(
1244[option],
1245[[],
1246["$generate"],
1247["$pkt"]],
1248[AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1249 [2], [], [stderr])
1250AT_CHECK([tail -2 stderr], [0], [dnl
1251Cannot find datapath of this name
1252ovs-appctl: ovs-vswitchd: server returned an error
1253])])
1254
1255# Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1256m4_foreach(
1257[option],
1258[[],
1259["$generate"],
1260["$pkt"]],
1261[AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1262 [2], [], [stderr])
1263AT_CHECK([tail -2 stderr], [0], [dnl
1264Unknown bridge name
1265ovs-appctl: ovs-vswitchd: server returned an error
1266])])
1267
1268# Test incorrect command: ofproto/trace br_flow [-generate|packet]
1269m4_foreach(
1270[option],
1271[[],
1272["$generate"],
1273["$pkt"]],
1274[AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1275 [2], [], [stderr])
1276AT_CHECK([tail -2 stderr], [0], [dnl
1277Must specify bridge name
1278ovs-appctl: ovs-vswitchd: server returned an error
1279])])
1280
1281# Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1282AT_CHECK([ovs-appctl ofproto/trace \
1283 ovs-dummy "$odp_flow" garbage_option],
1284 [2], [stdout],[stderr])
1285AT_CHECK([tail -2 stderr], [0], [dnl
1286Trailing garbage in packet data
1287ovs-appctl: ovs-vswitchd: server returned an error
1288])
1289
1290# Test incorrect command: ofproto/trace with 4 arguments
1291AT_CHECK([ovs-appctl ofproto/trace \
1292 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1293AT_CHECK([tail -2 stderr], [0], [dnl
1294"ofproto/trace" command takes at most 3 arguments
1295ovs-appctl: ovs-vswitchd: server returned an error
1296])
1297
1298# Test incorrect command: ofproto/trace with 0 argument
1299AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1300AT_CHECK([tail -2 stderr], [0], [dnl
1301"ofproto/trace" command requires at least 1 arguments
1302ovs-appctl: ovs-vswitchd: server returned an error
1303])
1304
1305OVS_VSWITCHD_STOP
1306AT_CLEANUP
1307
b44a10b7
BP
1308m4_define([OFPROTO_TRACE],
1309 [flow="$2"
1310 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1311 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1312 expected="$4"
1313 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1314 [0], [stdout])
1315 mv stdout expout
1316 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1317 [0], [expout])])
1318
1319AT_SETUP([ofproto-dpif - MAC learning])
432fca23
BP
1320OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1321ADD_OF_PORTS([br0], 1, 2, 3)
b44a10b7 1322
b44a10b7
BP
1323arp='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)'
1324
1325# Trace an ARP packet arriving on p3, to create a MAC learning entry.
1326OFPROTO_TRACE(
50aa28fd 1327 [ovs-dummy],
247527db 1328 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1329 [-generate],
e44768b7 1330 [1,2,100])
b44a10b7
BP
1331
1332# Check for the MAC learning entry.
83664f72 1333AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1334 port VLAN MAC Age
247527db 1335 3 0 50:54:00:00:00:05 ?
b44a10b7
BP
1336])
1337
1338# Trace a packet arrival destined for the learned MAC.
1339# (This will also learn a MAC.)
1340OFPROTO_TRACE(
50aa28fd 1341 [ovs-dummy],
247527db 1342 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
b44a10b7 1343 [-generate],
247527db 1344 [3])
b44a10b7
BP
1345
1346# Check for both MAC learning entries.
83664f72 1347AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1348 port VLAN MAC Age
247527db
BP
1349 3 0 50:54:00:00:00:05 ?
1350 1 0 50:54:00:00:00:06 ?
b44a10b7
BP
1351])
1352
1353# Trace a packet arrival that updates the first learned MAC entry.
1354OFPROTO_TRACE(
50aa28fd 1355 [ovs-dummy],
247527db 1356 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1357 [-generate],
e44768b7 1358 [1,3,100])
b44a10b7
BP
1359
1360# Check that the MAC learning entry was updated.
83664f72 1361AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1362 port VLAN MAC Age
247527db
BP
1363 1 0 50:54:00:00:00:06 ?
1364 2 0 50:54:00:00:00:05 ?
b44a10b7
BP
1365])
1366
1367# Add another bridge.
1368AT_CHECK(
1369 [ovs-vsctl \
1370 -- add-br br1 \
1371 -- set bridge br1 datapath-type=dummy \
1372 -- add-port br1 p4 -- set interface p4 type=dummy \
1373 -- add-port br1 p5 -- set interface p5 type=dummy])
b44a10b7
BP
1374
1375# Trace some packet arrivals in br1 to create MAC learning entries there too.
1376OFPROTO_TRACE(
50aa28fd 1377 [ovs-dummy],
247527db 1378 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1379 [-generate],
e44768b7 1380 [5,101])
b44a10b7 1381OFPROTO_TRACE(
50aa28fd 1382 [ovs-dummy],
247527db 1383 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 1384 [-generate],
e44768b7 1385 [4,101])
b44a10b7
BP
1386
1387# Check that the MAC learning entries were added.
83664f72 1388AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1389 port VLAN MAC Age
247527db
BP
1390 4 0 50:54:00:00:00:06 ?
1391 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
1392])
1393
1394# Delete port p1 and see that its MAC learning entry disappeared, and
1395# that the MAC learning entry for the same MAC was also deleted from br1.
1396AT_CHECK([ovs-vsctl del-port p1])
83664f72 1397AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1398 port VLAN MAC Age
247527db 1399 2 0 50:54:00:00:00:05 ?
b44a10b7 1400])
83664f72 1401AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 1402 port VLAN MAC Age
247527db 1403 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
1404])
1405
1406OVS_VSWITCHD_STOP
1407AT_CLEANUP
17f7f7e0 1408
c4069512
BP
1409AT_SETUP([ofproto-dpif - MAC table overflow])
1410OVS_VSWITCHD_START(
1411 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1412 add-port br0 p1 -- set Interface p1 type=dummy -- \
1413 add-port br0 p2 -- set Interface p2 type=dummy -- \
1414 add-port br0 p3 -- set Interface p3 type=dummy])
1415
1416arp='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)'
1417
1418AT_CHECK([ovs-appctl time/stop])
1419
1420# Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1421for i in 0 1 2 3 4 5 6 7 8 9; do
1422 OFPROTO_TRACE(
50aa28fd 1423 [ovs-dummy],
c4069512
BP
1424 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1425 [-generate],
1426 [1,2,100])
1427 ovs-appctl time/warp 1000
1428done
1429
1430# Check for the MAC learning entries.
1431AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1432 [0], [dnl
1433 3 0 50:54:00:00:00:00
1434 3 0 50:54:00:00:00:01
1435 3 0 50:54:00:00:00:02
1436 3 0 50:54:00:00:00:03
1437 3 0 50:54:00:00:00:04
1438 3 0 50:54:00:00:00:05
1439 3 0 50:54:00:00:00:06
1440 3 0 50:54:00:00:00:07
1441 3 0 50:54:00:00:00:08
1442 3 0 50:54:00:00:00:09
1443 port VLAN MAC Age
1444])
1445
1446# Trace another ARP packet on another MAC.
1447OFPROTO_TRACE(
50aa28fd 1448 [ovs-dummy],
c4069512
BP
1449 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1450 [-generate],
1451 [1,2,100])
1452
1453# Check that the new one chased the oldest one out of the table.
1454AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1455 [0], [dnl
1456 3 0 50:54:00:00:00:01 ?
1457 3 0 50:54:00:00:00:02 ?
1458 3 0 50:54:00:00:00:03 ?
1459 3 0 50:54:00:00:00:04 ?
1460 3 0 50:54:00:00:00:05 ?
1461 3 0 50:54:00:00:00:06 ?
1462 3 0 50:54:00:00:00:07 ?
1463 3 0 50:54:00:00:00:08 ?
1464 3 0 50:54:00:00:00:09 ?
1465 3 0 50:54:00:00:00:10 ?
1466 port VLAN MAC Age
1467])
1468OVS_VSWITCHD_STOP
1469AT_CLEANUP
1470
8073dd31
NM
1471dnl Test that sFlow samples packets correctly.
1472AT_SETUP([ofproto-dpif - sFlow packet sampling])
8073dd31
NM
1473OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1474
798e1352 1475ON_EXIT([kill `cat test-sflow.pid`])
1e04fcc8
BP
1476AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1477AT_CAPTURE_FILE([sflow.log])
1478SFLOW_PORT=`parse_listening_port < test-sflow.log`
1479
8073dd31
NM
1480ovs-appctl time/stop
1481
1482ADD_OF_PORTS([br0], 1, 2)
1483ovs-vsctl \
1484 set Interface br0 options:ifindex=1002 -- \
1485 set Interface p1 options:ifindex=1004 -- \
1486 set Interface p2 options:ifindex=1003 -- \
1487 set Bridge br0 sflow=@sf -- \
1488 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1489 header=128 sampling=1 polling=1
8073dd31
NM
1490
1491dnl open with ARP packets to seed the bridge-learning. The output
1492dnl ifIndex numbers should be reported predictably after that.
1493dnl Since we set sampling=1 we should see all of these packets
1494dnl reported. Sorting the output by data-source and seqNo makes
1495dnl it deterministic. Ensuring that we send at least two packets
1496dnl into each port means we get to check the seq nos are
1497dnl incrementing correctly.
1498
1499ovs-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)'
1500ovs-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)'
1501ovs-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)'
1502ovs-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)'
1503ovs-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)'
1504
1505dnl sleep long enough to get more than one counter sample
1506dnl from each datasource so we can check sequence numbers
1507for i in `seq 1 30`; do
1508 ovs-appctl time/warp 100
1509done
1510OVS_VSWITCHD_STOP
1511ovs-appctl -t test-sflow exit
1512
1513AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1514 /g']], [0], [dnl
1515HEADER
1516 dgramSeqNo=1
743cea45 1517 ds=127.0.0.1>2:1000
8073dd31
NM
1518 fsSeqNo=1
1519 in_vlan=0
1520 in_priority=0
1521 out_vlan=0
1522 out_priority=0
1523 meanSkip=1
1524 samplePool=1
1525 dropEvents=0
743cea45 1526 in_ifindex=1004
8073dd31
NM
1527 in_format=0
1528 out_ifindex=2
1529 out_format=2
1530 hdr_prot=1
1531 pkt_len=64
1532 stripped=4
1533 hdr_len=60
743cea45 1534 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-05-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-05-C0-A8-00-02-00-00-00-00-00-00-C0-A8-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
8073dd31
NM
1535HEADER
1536 dgramSeqNo=1
743cea45 1537 ds=127.0.0.1>2:1000
8073dd31
NM
1538 fsSeqNo=2
1539 in_vlan=0
1540 in_priority=0
1541 out_vlan=0
1542 out_priority=0
1543 meanSkip=1
1544 samplePool=2
1545 dropEvents=0
1546 in_ifindex=1003
1547 in_format=0
743cea45
NM
1548 out_ifindex=2
1549 out_format=2
8073dd31
NM
1550 hdr_prot=1
1551 pkt_len=64
1552 stripped=4
1553 hdr_len=60
743cea45 1554 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-07-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-07-C0-A8-00-01-00-00-00-00-00-00-C0-A8-00-02-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
8073dd31
NM
1555HEADER
1556 dgramSeqNo=1
743cea45 1557 ds=127.0.0.1>2:1000
8073dd31
NM
1558 fsSeqNo=3
1559 in_vlan=0
1560 in_priority=0
1561 out_vlan=0
1562 out_priority=0
1563 meanSkip=1
1564 samplePool=3
1565 dropEvents=0
743cea45 1566 in_ifindex=1004
8073dd31 1567 in_format=0
743cea45 1568 out_ifindex=1003
8073dd31
NM
1569 out_format=0
1570 hdr_prot=1
1571 pkt_len=64
1572 stripped=4
1573 hdr_len=60
743cea45 1574 hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-01-C0-A8-00-02-08-00-F7-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
8073dd31
NM
1575HEADER
1576 dgramSeqNo=1
743cea45
NM
1577 ds=127.0.0.1>2:1000
1578 fsSeqNo=4
8073dd31
NM
1579 in_vlan=0
1580 in_priority=0
1581 out_vlan=0
1582 out_priority=0
1583 meanSkip=1
743cea45 1584 samplePool=4
8073dd31 1585 dropEvents=0
743cea45 1586 in_ifindex=1003
8073dd31 1587 in_format=0
743cea45
NM
1588 out_ifindex=1004
1589 out_format=0
8073dd31
NM
1590 hdr_prot=1
1591 pkt_len=64
1592 stripped=4
1593 hdr_len=60
743cea45 1594 hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-02-C0-A8-00-01-00-00-FF-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
8073dd31
NM
1595HEADER
1596 dgramSeqNo=1
743cea45
NM
1597 ds=127.0.0.1>2:1000
1598 fsSeqNo=5
8073dd31
NM
1599 in_vlan=0
1600 in_priority=0
1601 out_vlan=0
1602 out_priority=0
1603 meanSkip=1
743cea45 1604 samplePool=5
8073dd31 1605 dropEvents=0
743cea45 1606 in_ifindex=1003
8073dd31 1607 in_format=0
743cea45 1608 out_ifindex=1004
8073dd31
NM
1609 out_format=0
1610 hdr_prot=1
1611 pkt_len=64
1612 stripped=4
1613 hdr_len=60
743cea45 1614 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
8073dd31
NM
1615])
1616
1617AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1618 /g']], [0], [dnl
1619IFCOUNTERS
1620 dgramSeqNo=2
1621 ds=127.0.0.1>0:1002
1622 csSeqNo=1
1623 ifindex=1002
1624 type=6
1625 ifspeed=100000000
1626 direction=0
1627 status=3
1628 in_octets=0
1629 in_unicasts=0
1630 in_multicasts=0
1631 in_broadcasts=4294967295
1632 in_discards=0
1633 in_errors=0
1634 in_unknownprotos=4294967295
1635 out_octets=120
1636 out_unicasts=2
1637 out_multicasts=4294967295
1638 out_broadcasts=4294967295
1639 out_discards=0
1640 out_errors=0
1641 promiscuous=0
1642IFCOUNTERS
1643 dgramSeqNo=2
1644 ds=127.0.0.1>0:1003
1645 csSeqNo=1
1646 ifindex=1003
1647 type=6
1648 ifspeed=100000000
1649 direction=0
1650 status=0
1651 in_octets=98
1652 in_unicasts=3
1653 in_multicasts=0
1654 in_broadcasts=4294967295
1655 in_discards=0
1656 in_errors=0
1657 in_unknownprotos=4294967295
1658 out_octets=120
1659 out_unicasts=2
1660 out_multicasts=4294967295
1661 out_broadcasts=4294967295
1662 out_discards=0
1663 out_errors=0
1664 promiscuous=0
1665IFCOUNTERS
1666 dgramSeqNo=2
1667 ds=127.0.0.1>0:1004
1668 csSeqNo=1
1669 ifindex=1004
1670 type=6
1671 ifspeed=100000000
1672 direction=0
1673 status=0
1674 in_octets=84
1675 in_unicasts=2
1676 in_multicasts=0
1677 in_broadcasts=4294967295
1678 in_discards=0
1679 in_errors=0
1680 in_unknownprotos=4294967295
1681 out_octets=180
1682 out_unicasts=3
1683 out_multicasts=4294967295
1684 out_broadcasts=4294967295
1685 out_discards=0
1686 out_errors=0
1687 promiscuous=0
1688IFCOUNTERS
1689 dgramSeqNo=3
1690 ds=127.0.0.1>0:1002
1691 csSeqNo=2
1692 ifindex=1002
1693 type=6
1694 ifspeed=100000000
1695 direction=0
1696 status=3
1697 in_octets=0
1698 in_unicasts=0
1699 in_multicasts=0
1700 in_broadcasts=4294967295
1701 in_discards=0
1702 in_errors=0
1703 in_unknownprotos=4294967295
1704 out_octets=120
1705 out_unicasts=2
1706 out_multicasts=4294967295
1707 out_broadcasts=4294967295
1708 out_discards=0
1709 out_errors=0
1710 promiscuous=0
1711IFCOUNTERS
1712 dgramSeqNo=3
1713 ds=127.0.0.1>0:1003
1714 csSeqNo=2
1715 ifindex=1003
1716 type=6
1717 ifspeed=100000000
1718 direction=0
1719 status=0
1720 in_octets=98
1721 in_unicasts=3
1722 in_multicasts=0
1723 in_broadcasts=4294967295
1724 in_discards=0
1725 in_errors=0
1726 in_unknownprotos=4294967295
1727 out_octets=120
1728 out_unicasts=2
1729 out_multicasts=4294967295
1730 out_broadcasts=4294967295
1731 out_discards=0
1732 out_errors=0
1733 promiscuous=0
1734IFCOUNTERS
1735 dgramSeqNo=3
1736 ds=127.0.0.1>0:1004
1737 csSeqNo=2
1738 ifindex=1004
1739 type=6
1740 ifspeed=100000000
1741 direction=0
1742 status=0
1743 in_octets=84
1744 in_unicasts=2
1745 in_multicasts=0
1746 in_broadcasts=4294967295
1747 in_discards=0
1748 in_errors=0
1749 in_unknownprotos=4294967295
1750 out_octets=180
1751 out_unicasts=3
1752 out_multicasts=4294967295
1753 out_broadcasts=4294967295
1754 out_discards=0
1755 out_errors=0
1756 promiscuous=0
1757])
1758AT_CLEANUP
1759
1760
1761
17f7f7e0
BP
1762dnl Test that basic NetFlow reports flow statistics correctly:
1763dnl - The initial packet of a flow are correctly accounted.
1764dnl - Later packets within a flow are correctly accounted.
1765dnl - Flow actions changing (in this case, due to MAC learning)
1766dnl cause a record to be sent.
1767AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1768
432fca23
BP
1769OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1770ADD_OF_PORTS([br0], 1, 2)
1e04fcc8
BP
1771
1772ON_EXIT([kill `cat test-netflow.pid`])
1773AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1774AT_CAPTURE_FILE([netflow.log])
1775NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1776
432fca23 1777ovs-vsctl \
17f7f7e0
BP
1778 set Bridge br0 netflow=@nf -- \
1779 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
432fca23 1780 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
17f7f7e0 1781
17f7f7e0
BP
1782for delay in 1000 30000; do
1783 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)'
1784 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)'
1785
1786 ovs-appctl time/warp $delay
1787done
1788
d441e1b3 1789sleep 1
17f7f7e0
BP
1790OVS_VSWITCHD_STOP
1791ovs-appctl -t test-netflow exit
1792
1793AT_CHECK([[sed -e 's/, uptime [0-9]*//
1794s/, now [0-9.]*//
65ba8e9c 1795s/time \([0-9]*\)\.\.\.\1$/time <moment>/
17f7f7e0 1796s/time [0-9]*\.\.\.[0-9]*/time <range>/
52440c19
BP
1797' netflow.log | sort]], [0],
1798 [
1799header: v5, seq 0, engine 2,1
17f7f7e0 1800header: v5, seq 1, engine 2,1
52440c19
BP
1801seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1802seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1803seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
17f7f7e0
BP
1804])
1805AT_CLEANUP
1806
1807dnl Test that basic NetFlow reports active expirations correctly.
1808AT_SETUP([ofproto-dpif - NetFlow active expiration])
1809
432fca23
BP
1810OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1811ADD_OF_PORTS([br0], 1, 2)
1e04fcc8
BP
1812
1813ON_EXIT([kill `cat test-netflow.pid`])
1814AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1815AT_CAPTURE_FILE([netflow.log])
1816NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1817
432fca23 1818ovs-vsctl \
17f7f7e0
BP
1819 set Bridge br0 netflow=@nf -- \
1820 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
432fca23 1821 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
17f7f7e0 1822
f802352d 1823AT_CHECK([ovs-appctl time/stop])
17f7f7e0
BP
1824n=1
1825while test $n -le 60; do
1826 n=`expr $n + 1`
1827
1828 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)'
1829 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)'
1830
1831 ovs-appctl time/warp 1000
1832done
1833
1834ovs-appctl time/warp 10000
1835
d441e1b3 1836sleep 1
17f7f7e0
BP
1837OVS_VSWITCHD_STOP
1838ovs-appctl -t test-netflow exit
1839
1840# Count the number of reported packets:
1841# - From source to destination before MAC learning kicks in (just one).
1842# - From source to destination after that.
1843# - From destination to source.
1844n_learn=0
1845n_in=0
1846n_out=0
1847n_other=0
1848n_recs=0
1849none=0
1850while read line; do
1851 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1852 case $pkts in
1853 [[0-9]]*) ;;
1854 *) continue ;;
1855 esac
1856
1857 case $line in
52440c19 1858 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
17f7f7e0
BP
1859 counter=n_learn
1860 ;;
52440c19 1861 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
17f7f7e0
BP
1862 counter=n_in
1863 ;;
52440c19 1864 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
17f7f7e0
BP
1865 counter=n_out
1866 ;;
1867 *)
1868 counter=n_other
1869 ;;
1870 esac
1871 eval $counter=\`expr \$$counter + \$pkts\`
1872 n_recs=`expr $n_recs + 1`
1873done < netflow.log
1874
1875# There should be exactly 1 MAC learning packet,
1876# exactly 59 other packets in that direction,
1877# and exactly 60 packets in the other direction.
1878AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1879])
1880
1881# There should be 1 expiration for MAC learning,
1882# at least 5 active and a final expiration in one direction,
1883# and at least 5 active and a final expiration in the other direction.
1884echo $n_recs
1885AT_CHECK([test $n_recs -ge 13])
1886
1887AT_CLEANUP
f27f2134
BP
1888
1889AT_SETUP([idle_age and hard_age increase over time])
1890OVS_VSWITCHD_START
1891
1892# get_ages DURATION HARD IDLE
1893#
1894# Fetch the flow duration, hard age, and idle age into the variables
1895# whose names are given as arguments. Rounds DURATION down to the
1896# nearest integer. If hard_age doesn't appear in the output, sets
1897# HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1898# to 0.
1899get_ages () {
1900 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1901
1902 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1903 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1904 AS_VAR_COPY([$1], [duration])
1905
1906 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1907 if test X"$hard" = X; then
1908 hard=none
1909 else
1910 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1911 fi
1912 AS_VAR_COPY([$2], [hard])
1913
1914 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1915 if test X"$idle" = X; then
1916 idle=0
1917 else
1918 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1919 fi
1920 AS_VAR_COPY([$3], [idle])
1921}
1922
1923# Add a flow and get its initial hard and idle age.
1924AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1925get_ages duration1 hard1 idle1
1926
1927# Warp time forward by 10 seconds, then modify the flow's actions.
1928ovs-appctl time/warp 10000
1929get_ages duration2 hard2 idle2
1930AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1931
1932# Warp time forward by 10 seconds.
1933ovs-appctl time/warp 10000
1934get_ages duration3 hard3 idle3
1935
1936# Warp time forward 10 more seconds, then pass some packets through the flow,
1937# then warp forward a few more times because idle times are only updated
1938# occasionally.
1939ovs-appctl time/warp 10000
1940ovs-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)'
1941ovs-appctl time/warp 1000
1942ovs-appctl time/warp 1000
1943ovs-appctl time/warp 1000
1944get_ages duration4 hard4 idle4
1945
1946printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1947printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1948printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1949
1950# Duration should increase steadily over time.
1951AT_CHECK([test $duration1 -lt $duration2])
1952AT_CHECK([test $duration2 -lt $duration3])
1953AT_CHECK([test $duration3 -lt $duration4])
1954
1955# Hard age should be "none" initially because it's the same as flow_duration,
1956# then it should increase.
1957AT_CHECK([test $hard1 = none])
1958AT_CHECK([test $hard2 = none])
1959AT_CHECK([test $hard3 != none])
1960AT_CHECK([test $hard4 != none])
1961AT_CHECK([test $hard3 -lt $hard4])
1962
1963# Idle age should increase from 1 to 2 to 3, then decrease.
1964AT_CHECK([test $idle1 -lt $idle2])
1965AT_CHECK([test $idle2 -lt $idle3])
1966AT_CHECK([test $idle3 -gt $idle4])
1967
1968# Check some invariant relationships.
1969AT_CHECK([test $duration1 = $idle1])
1970AT_CHECK([test $duration2 = $idle2])
1971AT_CHECK([test $duration3 = $idle3])
1972AT_CHECK([test $idle3 -gt $hard3])
1973AT_CHECK([test $idle4 -lt $hard4])
1974AT_CHECK([test $hard4 -lt $duration4])
1975
1976OVS_VSWITCHD_STOP
1977AT_CLEANUP
0e553d9c
BP
1978
1979AT_SETUP([ofproto-dpif - fin_timeout])
1980OVS_VSWITCHD_START
1981AT_DATA([flows.txt], [dnl
1982in_port=1 actions=output:2
1983in_port=2 actions=mod_vlan_vid:17,output:1
1984])
1985AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1986AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1987[NXST_FLOW reply:
1988 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1989])
1990# Check that a TCP SYN packet does not change the timeout. (Because
1991# flow stats updates are mainly what implements the fin_timeout
1992# feature, we warp forward a couple of times to ensure that flow stats
1993# run before re-checking the flow table.)
323cc924 1994AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
0e553d9c
BP
1995AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1996warped
1997])
1998AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1999[NXST_FLOW reply:
2000 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2001])
2002# Check that a TCP FIN packet does change the timeout.
323cc924 2003AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
0e553d9c
BP
2004AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2005warped
2006])
2007AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2008[NXST_FLOW reply:
2009 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2010])
2011OVS_VSWITCHD_STOP
2012AT_CLEANUP
27022416
JP
2013
2014AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2015OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2016ADD_OF_PORTS([br0], [1], [2])
2017ADD_OF_PORTS([br1], [3])
2018
2019AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2020dummy@br0
2021dummy@br1
2022])
2023OVS_VSWITCHD_STOP
2024AT_CLEANUP
2025
2026AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2027OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2028ADD_OF_PORTS([br0], [1], [2])
2029ADD_OF_PORTS([br1], [3])
2030
2031AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36
EJ
2032dummy@ovs-dummy: hit:0 missed:0
2033 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2034 overall avg: add rate: 0.000/min, del rate: 0.000/min
2035 br0: hit:0 missed:0
2036 br0 65534/100: (dummy)
2037 p1 1/1: (dummy)
2038 p2 2/2: (dummy)
2039 br1: hit:0 missed:0
2040 br1 65534/101: (dummy)
2041 p3 3/3: (dummy)
27022416
JP
2042])
2043OVS_VSWITCHD_STOP
2044AT_CLEANUP
2045
2046AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2047OVS_VSWITCHD_START([add-br br1 -- \
2048 set bridge br1 datapath-type=dummy fail-mode=secure])
2049ADD_OF_PORTS([br0], [1], [2])
2050ADD_OF_PORTS([br1], [3])
2051
323cc924
BP
2052AT_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)'])
2053AT_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)'])
2054AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
27022416
JP
2055
2056AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
f2245da3
JP
2057in_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))
2058in_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
2059])
2060
2061AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
f2245da3 2062in_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
2063])
2064
2065OVS_VSWITCHD_STOP
2066AT_CLEANUP
2067
2068AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2069OVS_VSWITCHD_START([add-br br1 -- \
2070 set bridge br1 datapath-type=dummy fail-mode=secure])
2071ADD_OF_PORTS([br0], [1], [2])
2072ADD_OF_PORTS([br1], [3])
2073
323cc924
BP
2074AT_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)'])
2075AT_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)'])
2076AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
27022416
JP
2077
2078AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
f2245da3
JP
2079in_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))
2080in_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
2081])
2082
2083AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
f2245da3 2084in_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
2085])
2086
2087AT_CHECK([ovs-appctl dpif/del-flows br0])
2088AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2089])
2090
2091AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
f2245da3 2092in_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
2093])
2094
2095OVS_VSWITCHD_STOP
2096AT_CLEANUP
0a740f48
EJ
2097
2098AT_SETUP([ofproto-dpif - patch ports])
2099OVS_VSWITCHD_START([add-br br1 \
2100-- set bridge br1 datapath-type=dummy fail-mode=secure \
2101-- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2102-- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2103
2104ADD_OF_PORTS([br0], [2])
2105ADD_OF_PORTS([br1], [3])
2106
9fc0165a
EJ
2107AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2108
0a740f48
EJ
2109AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2110AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2111
2112for i in $(seq 1 10); do
2113 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)'
2114done
2115
2116for i in $(seq 1 5); do
2117 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)'
2118done
2119
735d7efb
AZ
2120AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2121warped
2122])
2123
0a740f48 2124AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36
EJ
2125dummy@ovs-dummy: hit:13 missed:2
2126 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2127 overall avg: add rate: 0.000/min, del rate: 0.000/min
2128 br0: hit:9 missed:1
2129 br0 65534/100: (dummy)
2130 p2 2/2: (dummy)
2131 pbr0 1/none: (patch: peer=pbr1)
2132 br1: hit:4 missed:1
2133 br1 65534/101: (dummy)
2134 p3 3/3: (dummy)
2135 pbr1 1/none: (patch: peer=pbr0)
0a740f48
EJ
2136])
2137
2138AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2139in_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
2140]),
2141AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2142in_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
2143])
2144
2145AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2146OFPST_PORT reply (xid=0x4): 1 ports
2147 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2148 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2149])
2150
2151AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2152OFPST_PORT reply (xid=0x4): 1 ports
2153 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2154 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2155])
2156
2157OVS_VSWITCHD_STOP
2158AT_CLEANUP
655ab909
AZ
2159
2160AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2161OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2162ADD_OF_PORTS([br0], 1, 2)
2163
9fc0165a 2164AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
655ab909
AZ
2165AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2166
2167for i in $(seq 1 61); do
2168 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)'
2169 ovs-appctl time/warp 10000
2170 ovs-appctl time/warp 50000
2171done
2172
2173AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2174])
2175
2d5e351a 2176AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
dc54ef36
EJ
2177dummy@ovs-dummy: hit:0 missed:61
2178 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2179 hourly avg: add rate: 0.641/min, del rate: 0.641/min
2180 overall avg: add rate: 1.000/min, del rate: 1.000/min
2181 br0: hit:0 missed:61
2182 br0 65534/100: (dummy)
2183 p1 1/1: (dummy)
2184 p2 2/2: (dummy)
655ab909
AZ
2185])
2186
2187OVS_VSWITCHD_STOP
2188AT_CLEANUP
65e0be10
BP
2189
2190AT_SETUP([ofproto-dpif - port duration])
2191OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2192ADD_OF_PORTS([br0], 1, 2)
2193
2194ovs-appctl time/warp 10000
2195
2196AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
9f9b6465 2197AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
65e0be10
BP
2198[dnl
2199OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2200 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2201 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2202 duration=?s
2203 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2204 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2205 duration=?s
2206 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2207 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2208 duration=?s
2209])
2210OVS_VSWITCHD_STOP
2211AT_CLEANUP
bcd2633a
JP
2212
2213dnl ----------------------------------------------------------------------
2214AT_BANNER([ofproto-dpif -- megaflows])
2215
2216# Strips out uninteresting parts of megaflow output, as well as parts
2217# that vary from one run to another (e.g., timing and bond actions).
2218m4_define([STRIP_XOUT], [[sed '
2219 s/used:[0-9]*\.[0-9]*/used:0.0/
2220 s/Datapath actions:.*/Datapath actions: <del>/
2221' | sort]])
2222
2223AT_SETUP([ofproto-dpif megaflow - port classification])
2224OVS_VSWITCHD_START
2225ADD_OF_PORTS([br0], [1], [2])
2226AT_DATA([flows.txt], [dnl
2227table=0 in_port=1 actions=output(2)
2228])
2229AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2230AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2231AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2232AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2233in_port=1, n_subfacets:2, used:0.0s, Datapath actions: <del>
2234])
2235OVS_VSWITCHD_STOP
2236AT_CLEANUP
2237
2238AT_SETUP([ofproto-dpif megaflow - L2 classification])
2239OVS_VSWITCHD_START
2240ADD_OF_PORTS([br0], [1], [2])
2241AT_DATA([flows.txt], [dnl
2242table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2243])
2244AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2245AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2246AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2247AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2248in_port=1,dl_src=50:54:00:00:00:09, n_subfacets:1, used:0.0s, Datapath actions: <del>
2249in_port=1,dl_src=50:54:00:00:00:0b, n_subfacets:1, used:0.0s, Datapath actions: <del>
2250])
2251OVS_VSWITCHD_STOP
2252AT_CLEANUP
2253
2254AT_SETUP([ofproto-dpif megaflow - L3 classification])
2255OVS_VSWITCHD_START
2256ADD_OF_PORTS([br0], [1], [2])
2257AT_DATA([flows.txt], [dnl
2258table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2259])
2260AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2261AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2262AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2263AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2264icmp,in_port=1,nw_src=10.0.0.2, n_subfacets:1, used:0.0s, Datapath actions: <del>
2265icmp,in_port=1,nw_src=10.0.0.4, n_subfacets:1, used:0.0s, Datapath actions: <del>
2266])
2267OVS_VSWITCHD_STOP
2268AT_CLEANUP
2269
2270AT_SETUP([ofproto-dpif megaflow - L4 classification])
2271OVS_VSWITCHD_START
2272ADD_OF_PORTS([br0], [1], [2])
2273AT_DATA([flows.txt], [dnl
2274table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2275])
2276AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2277AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2278AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2279AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2280icmp,in_port=1,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2281])
2282OVS_VSWITCHD_STOP
2283AT_CLEANUP
2284
2285AT_SETUP([ofproto-dpif megaflow - normal])
2286OVS_VSWITCHD_START
2287ADD_OF_PORTS([br0], [1], [2])
2288AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2289AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2290AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2291AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2292ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a, n_subfacets:1, used:0.0s, Datapath actions: <del>
2293ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c, n_subfacets:1, used:0.0s, Datapath actions: <del>
2294])
2295OVS_VSWITCHD_STOP
2296AT_CLEANUP
2297
2298AT_SETUP([ofproto-dpif megaflow - mpls])
2299OVS_VSWITCHD_START
2300ADD_OF_PORTS([br0], [1], [2])
2301AT_DATA([flows.txt], [dnl
2302table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2303table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2304])
2305AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2306AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
2307AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
2308AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2309mpls,in_port=1,dl_src=50:54:00:00:00:09,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1, n_subfacets:1, used:0.0s, Datapath actions: <del>
2310mpls,in_port=1,dl_src=50:54:00:00:00:0b,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1, n_subfacets:1, used:0.0s, Datapath actions: <del>
2311])
2312OVS_VSWITCHD_STOP
2313AT_CLEANUP
2314
2315AT_SETUP([ofproto-dpif megaflow - netflow])
2316OVS_VSWITCHD_START
2317ADD_OF_PORTS([br0], [1], [2])
2318
2319dnl NetFlow configuration disables wildcarding relevant fields
2320ON_EXIT([kill `cat test-netflow.pid`])
2321AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2322AT_CAPTURE_FILE([netflow.log])
2323NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2324ovs-vsctl \
2325 set Bridge br0 netflow=@nf -- \
2326 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2327 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2328
2329AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2330AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2331AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2332AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2333icmp,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2334icmp,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2335])
2336OVS_VSWITCHD_STOP
2337AT_CLEANUP
2338
2339AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2340OVS_VSWITCHD_START(
2341 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2342 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2343 set interface p2 type=dummy ofport_request=2 -- \
2344 set interface p3 type=dummy ofport_request=3])
2345AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2346])
2347
2348AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2349AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2350AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2351AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2352ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a, n_subfacets:1, used:0.0s, Datapath actions: <del>
2353ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c, n_subfacets:1, used:0.0s, Datapath actions: <del>
2354])
2355OVS_VSWITCHD_STOP
2356AT_CLEANUP
2357
2358AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2359OVS_VSWITCHD_START(
2360 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2361 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2362 set interface p2 type=dummy ofport_request=2 -- \
2363 set interface p3 type=dummy ofport_request=3])
2364AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2365])
2366
2367AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2368AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2369AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2370AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2371ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a, n_subfacets:1, used:0.0s, Datapath actions: <del>
2372ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c, n_subfacets:1, used:0.0s, Datapath actions: <del>
2373])
2374OVS_VSWITCHD_STOP
2375AT_CLEANUP
2376
2377AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2378# Create bond0 on br0 with interfaces p0 and p1
2379# and bond1 on br1 with interfaces p2 and p3
2380# with p0 patched to p2 and p1 patched to p3.
2381OVS_VSWITCHD_START(
2382 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2383 other-config:lacp-time=fast \
2384 other-config:bond-rebalance-interval=0 -- \
2385 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2386 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2387 add-br br1 -- \
2388 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2389 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2390 fail-mode=secure -- \
2391 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2392 other-config:lacp-time=fast \
2393 other-config:bond-rebalance-interval=0 -- \
2394 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2395 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2396
2397AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2398])
2399ADD_OF_PORTS([br0], [7])
2400AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2401AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2402ovs-appctl time/warp 5000
2403AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2404AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2405
2406AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2407icmp,in_port=7,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2408icmp,in_port=7,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2409])
2410OVS_VSWITCHD_STOP
2411AT_CLEANUP
2412
2413AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2414OVS_VSWITCHD_START
2415ADD_OF_PORTS([br0], [1], [2])
2416AT_DATA([flows.txt], [dnl
2417table=0 in_port=1,ip actions=resubmit(90)
2418table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2419])
2420AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2421AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2422AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2423AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2424ip,in_port=1,dl_src=50:54:00:00:00:09, n_subfacets:1, used:0.0s, Datapath actions: <del>
2425ip,in_port=1,dl_src=50:54:00:00:00:0b, n_subfacets:1, used:0.0s, Datapath actions: <del>
2426])
2427OVS_VSWITCHD_STOP
2428AT_CLEANUP
2429
2430AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2431OVS_VSWITCHD_START
2432ADD_OF_PORTS([br0], [1], [2])
2433AT_DATA([flows.txt], [dnl
2434table=0 in_port=1,ip actions=resubmit(,1)
2435table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2436])
2437AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2438AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2439AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=
24401,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2441AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2442ip,in_port=1,dl_src=50:54:00:00:00:09, n_subfacets:1, used:0.0s, Datapath actions: <del>
2443ip,in_port=1,dl_src=50:54:00:00:00:0b, n_subfacets:1, used:0.0s, Datapath actions: <del>
2444])
2445OVS_VSWITCHD_STOP
2446AT_CLEANUP
2447
2448AT_SETUP([ofproto-dpif megaflow - goto_table action])
2449OVS_VSWITCHD_START
2450ADD_OF_PORTS([br0], [1], [2])
2451AT_DATA([flows.txt], [dnl
2452table=0 in_port=1,ip actions=goto_table(1)
2453table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2454])
2455AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2456AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2457AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2458AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2459ip,in_port=1,dl_src=50:54:00:00:00:09, n_subfacets:1, used:0.0s, Datapath actions: <del>
2460ip,in_port=1,dl_src=50:54:00:00:00:0b, n_subfacets:1, used:0.0s, Datapath actions: <del>
2461])
2462OVS_VSWITCHD_STOP
2463AT_CLEANUP
2464
2465AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2466OVS_VSWITCHD_START
2467ADD_OF_PORTS([br0], [1], [2], [3])
2468ovs-vsctl \
2469 set Bridge br0 mirrors=@m --\
2470 --id=@p3 get Port p3 --\
2471 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2472
2473AT_DATA([flows.txt], [dnl
2474in_port=1 actions=output:2
2475])
2476AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2477AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2478AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2479AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2480in_port=1, n_subfacets:2, used:0.0s, Datapath actions: <del>
2481])
2482OVS_VSWITCHD_STOP
2483AT_CLEANUP
2484
2485AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2486OVS_VSWITCHD_START
2487ADD_OF_PORTS([br0], [1], [2], [3])
2488ovs-vsctl \
2489 set Bridge br0 mirrors=@m --\
2490 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2491 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2492
2493AT_DATA([flows.txt], [dnl
2494in_port=1 actions=output:2
2495])
2496AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2497AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=11,pcp=7),encap(eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0))'])
2498AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2499AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2500in_port=1,dl_vlan=11, n_subfacets:1, used:0.0s, Datapath actions: <del>
2501in_port=1,vlan_tci=0x0000/0x1fff, n_subfacets:1, used:0.0s, Datapath actions: <del>
2502])
2503OVS_VSWITCHD_STOP
2504AT_CLEANUP
2505
2506AT_SETUP([ofproto-dpif megaflow - move action])
2507OVS_VSWITCHD_START
2508ADD_OF_PORTS([br0], [1], [2])
2509AT_DATA([flows.txt], [dnl
2510table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2511table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2512table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2513])
2514AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2515AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2516AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2517AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2518ip,in_port=1,nw_src=10.0.0.2, n_subfacets:1, used:0.0s, Datapath actions: <del>
2519ip,in_port=1,nw_src=10.0.0.4, n_subfacets:1, used:0.0s, Datapath actions: <del>
2520])
2521OVS_VSWITCHD_STOP
2522AT_CLEANUP
2523
2524AT_SETUP([ofproto-dpif megaflow - push action])
2525OVS_VSWITCHD_START
2526ADD_OF_PORTS([br0], [1], [2])
2527AT_DATA([flows.txt], [dnl
2528table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2529])
2530AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2531AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2532AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2533AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2534ip,in_port=1,nw_src=10.0.0.2, n_subfacets:1, used:0.0s, Datapath actions: <del>
2535ip,in_port=1,nw_src=10.0.0.4, n_subfacets:1, used:0.0s, Datapath actions: <del>
2536])
2537OVS_VSWITCHD_STOP
2538AT_CLEANUP
2539
2540AT_SETUP([ofproto-dpif megaflow - learning])
2541OVS_VSWITCHD_START
2542ADD_OF_PORTS([br0], [1], [2])
2543AT_DATA([flows.txt], [dnl
2544table=0 in_port=1 actions=load:2->NXM_NX_REG0[[0..15]],learn(table=1,priority=65535,NXM_OF_ETH_SRC[[]],NXM_OF_VLAN_TCI[[0..11]],output:NXM_NX_REG0[[0..15]]),output:2
2545])
2546AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2547AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2548AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2549dnl The original flow is missing due to a revalidation.
2550AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2551in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:09, n_subfacets:1, used:0.0s, Datapath actions: <del>
2552in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:0b, n_subfacets:1, used:0.0s, Datapath actions: <del>
2553])
2554OVS_VSWITCHD_STOP
2555AT_CLEANUP