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