]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ofproto-dpif.at
ovs-ofctl: Fix indentation in manpage.
[mirror_ovs.git] / tests / ofproto-dpif.at
CommitLineData
29901626
BP
1AT_BANNER([ofproto-dpif])
2
3AT_SETUP([ofproto-dpif - resubmit])
023e1e0a 4OVS_VSWITCHD_START
29901626
BP
5AT_DATA([flows.txt], [dnl
6table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
7table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
8table=0 in_port=3 priority=2000 icmp actions=output(20)
9table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
10table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
11table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
12])
13AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31a19d69 14AT_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
15AT_CHECK([tail -1 stdout], [0],
16 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
17])
023e1e0a 18OVS_VSWITCHD_STOP
29901626 19AT_CLEANUP
58a89177
EJ
20
21AT_SETUP([ofproto-dpif - registers])
023e1e0a 22OVS_VSWITCHD_START
58a89177
EJ
23AT_DATA([flows.txt], [dnl
24in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
25in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
e9358af6
EJ
26in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
27in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
28
58a89177
EJ
29in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
30in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
31in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
32in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
33in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
34in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
35in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
36in_port=9,reg0=0xdeadbeef actions=output:20
37in_port=10,reg1=0xdeadbeef actions=output:21
38in_port=11,reg2=0xeef22dea actions=output:22
e9358af6
EJ
39
40dnl Sanilty check all registers
41in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
42in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
43in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
44in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
58a89177
EJ
45])
46AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 47AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
58a89177 48AT_CHECK([tail -1 stdout], [0],
e9358af6 49 [Datapath actions: 20,21,22,33
58a89177 50])
023e1e0a 51OVS_VSWITCHD_STOP
58a89177 52AT_CLEANUP
f694937d
EJ
53
54AT_SETUP([ofproto-dpif - output])
023e1e0a 55OVS_VSWITCHD_START
f694937d
EJ
56AT_DATA([flows.txt], [dnl
57in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
58in_port=2 actions=output:9
59in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
60in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
61in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
62in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
63in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
64])
65AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 66AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
f694937d
EJ
67AT_CHECK([tail -1 stdout], [0],
68 [Datapath actions: 9,55,10,55,66,11,77,88
69])
023e1e0a 70OVS_VSWITCHD_STOP
f694937d 71AT_CLEANUP
8e9ce036 72
f0fd1a17
PS
73AT_SETUP([ofproto-dpif - dec_ttl])
74OVS_VSWITCHD_START
75AT_DATA([flows.txt], [dnl
76table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
77table=1 in_port=1 action=dec_ttl,output:3
78])
79AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
80AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
6a7e895f 81AT_CHECK([tail -3 stdout], [0],
f0fd1a17 82 [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
83This flow is handled by the userspace slow path because it:
84 - Sends "packet-in" messages to the OpenFlow controller.
f0fd1a17
PS
85])
86AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=3,frag=no)'], [0], [stdout])
87AT_CHECK([tail -1 stdout], [0],
88 [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
89])
90AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
91AT_CHECK([tail -1 stdout], [0],
92 [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
93])
94
982697a4 95AT_CAPTURE_FILE([ofctl_monitor.log])
77a922c7 96AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
f0fd1a17
PS
97AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
98OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
99AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 100NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
969fc56c 101priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(50:54:00:00:00:05->50:54:00:00:00:07) type:0800 proto:1 tos:0 ttl:1 ip(192.168.0.1->192.168.0.2)
f0fd1a17
PS
102])
103OVS_VSWITCHD_STOP
104AT_CLEANUP
105
106
77750738
JP
107AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
108OVS_VSWITCHD_START(
109 [add-port br0 p1 -- set Interface p1 type=dummy --\
110 add-port br0 p2 -- set Interface p2 type=dummy])
111
77750738
JP
112AT_CHECK([ovs-ofctl add-flow br0 action=normal])
113
114# "in_port" defaults to OFPP_NONE if it's not specified.
115flow="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)"
116AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
117actual=`tail -1 stdout | sed 's/Datapath actions: //'`
118
247527db
BP
119expected="0,1,2"
120AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
77750738 121mv stdout expout
247527db 122AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
77750738
JP
123
124OVS_VSWITCHD_STOP
125AT_CLEANUP
126
8b36f51e 127AT_SETUP([ofproto-dpif - DSCP])
8b36f51e
EJ
128OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
129AT_DATA([flows.txt], [dnl
130actions=output:65534,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:65534
131])
132AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
133AT_CHECK([ovs-vsctl -- \
134 set Port p1 qos=@newqos --\
135 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
136 --id=@q1 create Queue dscp=1 --\
137 --id=@q2 create Queue dscp=2], [0], [ignore])
138AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
139AT_CHECK([tail -1 stdout], [0],
140 [Datapath actions: dnl
1410,dnl
142set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(priority(1)),1,dnl
143set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(priority(2)),1,dnl
1441,dnl
145set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(priority(1)),1,dnl
146set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(priority(0)),1,dnl
147set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
1480
149])
150OVS_VSWITCHD_STOP
151AT_CLEANUP
152
fd19297b 153AT_SETUP([ofproto-dpif - output/flood flags])
fd19297b
EJ
154OVS_VSWITCHD_START([dnl
155 add-port br0 p1 -- set Interface p1 type=dummy --\
156 add-port br0 p2 -- set Interface p2 type=dummy --\
157 add-port br0 p3 -- set Interface p3 type=dummy --\
158 add-port br0 p4 -- set Interface p4 type=dummy --\
159 add-port br0 p5 -- set Interface p5 type=dummy --\
160 add-port br0 p6 -- set Interface p6 type=dummy --\
161 add-port br0 p7 -- set Interface p7 type=dummy ])
162
163AT_DATA([flows.txt], [dnl
a0fbe94a 164in_port=local actions=local,flood
fd19297b
EJ
165in_port=1 actions=flood
166in_port=2 actions=all
167in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
5bf93d67 168in_port=4 actions=enqueue:65534:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
fd19297b
EJ
169])
170AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
171AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
172AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
173
a0fbe94a
AR
174AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(0),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
175AT_CHECK([tail -1 stdout \
176| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
1771
1782
1793
1804
1817
182])
183
fd19297b
EJ
184AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
185AT_CHECK([tail -1 stdout \
186| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
1870
1882
1893
1904
1917
192])
193
194AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
195AT_CHECK([tail -1 stdout \
196| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
1970
1981
1993
2004
2016
2027
203])
204
205AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
206AT_CHECK([tail -1 stdout], [0],
207 [Datapath actions: 0,1,2,4,6,7
208])
209
210AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
211AT_CHECK([tail -1 stdout], [0],
5bf93d67 212 [Datapath actions: set(priority(1)),0,1,2,set(priority(2)),3,set(priority(1)),6,7
fd19297b
EJ
213])
214OVS_VSWITCHD_STOP
215AT_CLEANUP
216
8e9ce036 217AT_SETUP([ofproto-dpif - set_tunnel])
023e1e0a 218OVS_VSWITCHD_START
8e9ce036
EJ
219AT_DATA([flows.txt], [dnl
220in_port=90 actions=resubmit:1,resubmit:2,resubmit:3,resubmit:4,resubmit:5
221in_port=1 actions=set_tunnel:1,output:1
222in_port=2 actions=set_tunnel:1,output:2
223in_port=3 actions=set_tunnel:2,set_tunnel:3,output:3
224in_port=4 actions=set_tunnel:4,set_tunnel:3,output:4
225in_port=5 actions=set_tunnel:5
226])
227AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 228AT_CHECK([ovs-appctl ofproto/trace br0 'tun_id(0x1),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])
8e9ce036 229AT_CHECK([tail -1 stdout], [0],
4edb9ae9 230 [Datapath actions: set(tun_id(0x1)),1,2,set(tun_id(0x3)),3,4
8e9ce036 231])
023e1e0a 232OVS_VSWITCHD_STOP
15056dc8
EJ
233AT_CLEANUP
234
235AT_SETUP([ofproto-dpif - controller])
236OVS_VSWITCHD_START([dnl
237 add-port br0 p1 -- set Interface p1 type=dummy
238])
239
240AT_CAPTURE_FILE([ofctl_monitor.log])
241AT_DATA([flows.txt], [dnl
242cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
54834960 243cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
15056dc8
EJ
244cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
245
54834960
EJ
246cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
247cookie=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)
248cookie=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)
249cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
250cookie=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)
251cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
252cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
15056dc8
EJ
253])
254AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
255
256dnl Flow miss.
77a922c7 257AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
258
259for i in 1 2 3 ; do
260 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)'
261done
262
263OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
264AT_CHECK([cat ofctl_monitor.log], [0], [dnl
f0fd1a17 265OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
969fc56c 266priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(50:54:00:00:00:05->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->9) tcp_csum:0
15056dc8 267dnl
f0fd1a17 268OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
969fc56c 269priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(50:54:00:00:00:05->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->9) tcp_csum:0
15056dc8 270dnl
f0fd1a17 271OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
969fc56c 272priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(50:54:00:00:00:05->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->9) tcp_csum:0
15056dc8
EJ
273])
274
275dnl Singleton controller action.
77a922c7 276AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
277
278for i in 1 2 3 ; do
279 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)'
280done
281
282OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
283AT_CHECK([cat ofctl_monitor.log], [0], [dnl
284OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
969fc56c 285priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(10:11:11:11:11:11->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
15056dc8
EJ
286dnl
287OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
969fc56c 288priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(10:11:11:11:11:11->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
15056dc8
EJ
289dnl
290OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
969fc56c 291priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(10:11:11:11:11:11->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
15056dc8
EJ
292])
293
294dnl Modified controller action.
77a922c7 295AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
296
297for i in 1 2 3 ; do
298 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)'
299done
300
301OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
302AT_CHECK([cat ofctl_monitor.log], [0], [dnl
303OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
969fc56c 304priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:15,pcp:0) mac(30:33:33:33:33:33->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
15056dc8
EJ
305dnl
306OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
969fc56c 307priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:15,pcp:0) mac(30:33:33:33:33:33->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
15056dc8
EJ
308dnl
309OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
969fc56c 310priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:15,pcp:0) mac(30:33:33:33:33:33->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
15056dc8
EJ
311])
312
313dnl Checksum TCP.
77a922c7 314AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
315
316for i in 1 ; do
317 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)'
318done
319
320OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
321AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 322NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
969fc56c 323priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0
15056dc8 324dnl
42edbe39 325NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
969fc56c 326priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0
15056dc8 327dnl
42edbe39 328NXT_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)
969fc56c 329priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0
15056dc8 330dnl
42edbe39 331NXT_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)
969fc56c 332priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0
15056dc8 333dnl
42edbe39 334NXT_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)
969fc56c 335priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->192.168.0.2) port(8->11) tcp_csum:1a03
15056dc8 336dnl
42edbe39 337NXT_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)
969fc56c 338priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(8->11) tcp_csum:3205
15056dc8 339dnl
42edbe39 340NXT_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)
969fc56c 341priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->11) tcp_csum:31b8
15056dc8 342dnl
42edbe39 343NXT_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)
969fc56c 344priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) tcp_csum:316d
15056dc8 345dnl
42edbe39 346NXT_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)
969fc56c 347priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) tcp_csum:316d
15056dc8
EJ
348])
349
350dnl Checksum UDP.
77a922c7 351AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
352
353for i in 1 ; do
354 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'
355done
356
357OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
358AT_CHECK([cat ofctl_monitor.log], [0], [dnl
42edbe39 359NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
969fc56c 360priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234
15056dc8 361dnl
42edbe39 362NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
969fc56c 363priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234
15056dc8 364dnl
42edbe39 365NXT_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)
969fc56c 366priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->50:54:00:00:00:07) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234
15056dc8 367dnl
42edbe39 368NXT_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)
969fc56c 369priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234
15056dc8 370dnl
42edbe39 371NXT_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)
969fc56c 372priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->192.168.0.2) port(8->11) udp_csum:2c37
15056dc8 373dnl
42edbe39 374NXT_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)
969fc56c 375priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(8->11) udp_csum:4439
15056dc8 376dnl
42edbe39 377NXT_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)
969fc56c 378priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->11) udp_csum:43ec
15056dc8 379dnl
42edbe39 380NXT_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)
969fc56c 381priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) udp_csum:43a1
15056dc8 382dnl
42edbe39 383NXT_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)
969fc56c 384priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) udp_csum:43a1
15056dc8
EJ
385])
386
ef0ce8ae
BP
387AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
388 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
389 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
390 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)
391 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)
392 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)
393 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)
394 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)
395 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
396 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
397 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
398NXST_FLOW reply:
15056dc8
EJ
399])
400
401OVS_VSWITCHD_STOP
8e9ce036 402AT_CLEANUP
04c956fc 403
ecac4ebf 404AT_SETUP([ofproto-dpif - VLAN handling])
04c956fc 405OVS_VSWITCHD_START(
023e1e0a
BP
406 [set Bridge br0 fail-mode=standalone -- \
407 add-port br0 p1 trunks=10,12 -- \
ecac4ebf 408 add-port br0 p2 tag=10 -- \
5e9ceccd
BP
409 add-port br0 p3 tag=12 \
410 other-config:priority-tags=true -- \
ecac4ebf
BP
411 add-port br0 p4 tag=12 -- \
412 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
413 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
414 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
5e9ceccd
BP
415 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
416 other-config:priority-tags=true -- \
ecac4ebf
BP
417 set Interface p1 type=dummy -- \
418 set Interface p2 type=dummy -- \
419 set Interface p3 type=dummy -- \
420 set Interface p4 type=dummy -- \
421 set Interface p5 type=dummy -- \
422 set Interface p6 type=dummy -- \
423 set Interface p7 type=dummy -- \
424 set Interface p8 type=dummy --])
04c956fc 425
247527db
BP
426dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
427dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
ecac4ebf 428dnl actions.
04c956fc 429for tuple in \
247527db
BP
430 "0 none 0 drop" \
431 "0 0 0 drop" \
432 "0 0 1 drop" \
433 "0 10 0 1,5,6,7,8,pop_vlan,2" \
434 "0 10 1 1,5,6,7,8,pop_vlan,2" \
435 "0 11 0 5,7" \
436 "0 11 1 5,7" \
437 "0 12 0 1,5,6,pop_vlan,3,4,7,8" \
438 "0 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
439 "1 none 0 drop" \
440 "1 0 0 drop" \
441 "1 0 1 drop" \
442 "1 10 0 0,5,6,7,8,pop_vlan,2" \
443 "1 10 1 0,5,6,7,8,pop_vlan,2" \
444 "1 11 0 drop" \
445 "1 11 1 drop" \
446 "1 12 0 0,5,6,pop_vlan,3,4,7,8" \
447 "1 12 1 0,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
448 "2 none 0 push_vlan(vid=10,pcp=0),0,1,5,6,7,8" \
449 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),0,1,5,6,7,8" \
450 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),0,1,5,6,7,8" \
451 "2 10 0 drop" \
452 "2 10 1 drop" \
453 "2 11 0 drop" \
454 "2 11 1 drop" \
455 "2 12 0 drop" \
456 "2 12 1 drop" \
457 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
458 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
459 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),0,1,5,6" \
460 "3 10 0 drop" \
461 "3 10 1 drop" \
462 "3 11 0 drop" \
463 "3 11 1 drop" \
464 "3 12 0 drop" \
465 "3 12 1 drop" \
466 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
467 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
468 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),0,1,5,6" \
469 "4 10 0 drop" \
470 "4 10 1 drop" \
471 "4 11 0 drop" \
472 "4 11 1 drop" \
473 "4 12 0 drop" \
474 "4 12 1 drop" \
475 "5 none 0 2,push_vlan(vid=10,pcp=0),0,1,6,7,8" \
476 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),0,1,6,7,8" \
477 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),0,1,6,7,8" \
478 "5 10 0 0,1,6,7,8,pop_vlan,2" \
479 "5 10 1 0,1,6,7,8,pop_vlan,2" \
480 "5 11 0 0,7" \
481 "5 11 1 0,7" \
482 "5 12 0 0,1,6,pop_vlan,3,4,7,8" \
483 "5 12 1 0,1,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
484 "6 none 0 2,push_vlan(vid=10,pcp=0),0,1,5,7,8" \
485 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),0,1,5,7,8" \
486 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),0,1,5,7,8" \
487 "6 10 0 0,1,5,7,8,pop_vlan,2" \
488 "6 10 1 0,1,5,7,8,pop_vlan,2" \
489 "6 11 0 drop" \
490 "6 11 1 drop" \
491 "6 12 0 0,1,5,pop_vlan,3,4,7,8" \
492 "6 12 1 0,1,5,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
493 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
494 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
495 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),0,1,5,6" \
496 "7 10 0 0,1,5,6,8,pop_vlan,2" \
497 "7 10 1 0,1,5,6,8,pop_vlan,2" \
498 "7 11 0 0,5" \
499 "7 11 1 0,5" \
500 "7 12 0 0,1,5,6,pop_vlan,3,4,8" \
501 "7 12 1 0,1,5,6,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
502 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),0,1,5,6" \
503 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),0,1,5,6" \
504 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),0,1,5,6" \
505 "8 10 0 0,1,5,6,7,pop_vlan,2" \
506 "8 10 1 0,1,5,6,7,pop_vlan,2" \
507 "8 11 0 drop" \
508 "8 11 1 drop" \
509 "8 12 0 0,1,5,6,pop_vlan,3,4,7" \
510 "8 12 1 0,1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
04c956fc
BP
511do
512 set $tuple
513 in_port=$1
514 vlan=$2
ecac4ebf
BP
515 pcp=$3
516 expected=$4
04c956fc
BP
517
518 if test $vlan = none; then
247527db 519 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
04c956fc 520 else
247527db 521 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
522 fi
523
395e68ce
BP
524 echo "----------------------------------------------------------------------"
525 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
526
ecac4ebf
BP
527 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
528 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
04c956fc 529
247527db 530 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
becffb86 531 mv stdout expout
247527db 532 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
04c956fc
BP
533done
534
535OVS_VSWITCHD_STOP
536AT_CLEANUP
7257b535
BP
537
538AT_SETUP([ofproto-dpif - fragment handling])
023e1e0a 539OVS_VSWITCHD_START
7257b535
BP
540AT_DATA([flows.txt], [dnl
541priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
542priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
543priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
544priority=50 tcp ip_frag=no actions=output:4
545priority=50 tcp ip_frag=first actions=output:5
546priority=50 tcp ip_frag=later actions=output:6
547])
548AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
549
a61680c6 550base_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
551no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
552first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
553later_flow="$base_flow,frag=later)"
554
555 # mode no first later
556for tuple in \
557 'normal 1 5 6' \
558 'drop 1 drop drop' \
559 'nx-match 1 2 6'
560do
561 set $tuple
562 mode=$1
563 no=$2
564 first=$3
565 later=$4
566
567 AT_CHECK([ovs-ofctl set-frags br0 $mode])
568 for type in no first later; do
569 eval flow=\$${type}_flow exp_output=\$$type
023e1e0a 570 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
7257b535
BP
571 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
572])
573 done
574done
023e1e0a 575OVS_VSWITCHD_STOP
7257b535 576AT_CLEANUP
848e8809
EJ
577
578AT_SETUP([ofproto-dpif - exit])
579OVS_VSWITCHD_START
580AT_DATA([flows.txt], [dnl
581in_port=1 actions=output:10,exit,output:11
582in_port=2 actions=output:12,resubmit:1,output:12
583in_port=3 actions=output:13,resubmit:2,output:14
584])
585AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
a61680c6 586AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
587AT_CHECK([tail -1 stdout], [0],
588 [Datapath actions: 10
589])
a61680c6 590AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
591AT_CHECK([tail -1 stdout], [0],
592 [Datapath actions: 12,10
593])
a61680c6 594AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
848e8809
EJ
595AT_CHECK([tail -1 stdout], [0],
596 [Datapath actions: 13,12,10
597])
598OVS_VSWITCHD_STOP
599AT_CLEANUP
c06bba01
JP
600
601
602AT_SETUP([ofproto-dpif - mirroring, select_all])
9da5b93a
BP
603OVS_VSWITCHD_START(
604 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
605 add-port br0 p2 -- set Interface p2 type=dummy --\
606 add-port br0 p3 -- set Interface p3 type=dummy --\
607 set Bridge br0 mirrors=@m --\
608 --id=@p3 get Port p3 --\
609 --id=@m create Mirror name=mymirror \
9da5b93a 610 select_all=true output_port=@p3], [<0>
c06bba01
JP
611])
612
c06bba01
JP
613AT_DATA([flows.txt], [dnl
614in_port=1 actions=output:2
615in_port=2 actions=output:1
616])
617AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
618
247527db 619flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
620AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
621AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 622 [Datapath actions: 2,3
c06bba01
JP
623])
624
247527db 625flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
626AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
627AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 628 [Datapath actions: 1,3
c06bba01
JP
629])
630
631OVS_VSWITCHD_STOP
632AT_CLEANUP
633
634
635AT_SETUP([ofproto-dpif - mirroring, select_src])
9da5b93a
BP
636OVS_VSWITCHD_START(
637 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
638 add-port br0 p2 -- set Interface p2 type=dummy --\
639 add-port br0 p3 -- set Interface p3 type=dummy --\
640 set Bridge br0 mirrors=@m --\
641 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
642 --id=@m create Mirror name=mymirror \
9da5b93a 643 select_src_port=@p1 output_port=@p3], [<0>
c06bba01
JP
644])
645
c06bba01
JP
646AT_DATA([flows.txt], [dnl
647in_port=1 actions=output:2
648in_port=2 actions=output:1
649])
650AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
651
247527db 652flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
653AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
654AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 655 [Datapath actions: 2,3
c06bba01
JP
656])
657
247527db 658flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
659AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
660AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 661 [Datapath actions: 1
c06bba01
JP
662])
663OVS_VSWITCHD_STOP
664AT_CLEANUP
665
33158a18
JP
666AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
667OVS_VSWITCHD_START(
668 [add-port br0 p1 -- set Interface p1 type=dummy --\
669 add-port br0 p2 -- set Interface p2 type=dummy --\
670 set Bridge br0 mirrors=@m --\
671 --id=@p2 get Port p2 --\
672 --id=@m create Mirror name=mymirror \
673 select_all=true output_port=@p2], [<0>
674])
675
33158a18
JP
676AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
677
678# "in_port" defaults to OFPP_NONE if it's not specified.
679flow="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)"
680AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
681AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 682 [Datapath actions: 1,2
33158a18
JP
683])
684
685OVS_VSWITCHD_STOP
686AT_CLEANUP
687
c06bba01
JP
688
689AT_SETUP([ofproto-dpif - mirroring, select_dst])
9da5b93a
BP
690OVS_VSWITCHD_START(
691 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
692 add-port br0 p2 -- set Interface p2 type=dummy --\
693 add-port br0 p3 -- set Interface p3 type=dummy --\
694 set Bridge br0 mirrors=@m --\
695 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
696 --id=@m create Mirror name=mymirror \
9da5b93a 697 select_dst_port=@p2 output_port=@p3], [<0>
c06bba01
JP
698])
699
c06bba01
JP
700AT_DATA([flows.txt], [dnl
701in_port=1 actions=output:2
702in_port=2 actions=output:1
703])
704AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
705
247527db 706flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
707AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
708AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 709 [Datapath actions: 2,3
c06bba01
JP
710])
711
247527db 712flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
713AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
714AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 715 [Datapath actions: 1
c06bba01
JP
716])
717
718OVS_VSWITCHD_STOP
719AT_CLEANUP
720
721
722AT_SETUP([ofproto-dpif - mirroring, select_vlan])
9da5b93a
BP
723OVS_VSWITCHD_START(
724 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
725 add-port br0 p2 -- set Interface p2 type=dummy --\
726 add-port br0 p3 -- set Interface p3 type=dummy --\
727 set Bridge br0 mirrors=@m --\
728 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
729 --id=@m create Mirror name=mymirror \
9da5b93a 730 select_all=true select_vlan=11 output_port=@p3], [<0>
c06bba01
JP
731])
732
c06bba01
JP
733AT_DATA([flows.txt], [dnl
734in_port=1, actions=output:2
735])
736AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
737
247527db 738flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
739AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
740AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 741 [Datapath actions: 2
c06bba01
JP
742])
743
247527db 744flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=10,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
c06bba01
JP
745AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
746AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 747 [Datapath actions: 2
c06bba01
JP
748])
749
247527db 750flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=11,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
c06bba01
JP
751AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
752AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 753 [Datapath actions: 2,3
c06bba01
JP
754])
755
756OVS_VSWITCHD_STOP
757AT_CLEANUP
758
759
760AT_SETUP([ofproto-dpif - mirroring, output_port])
9da5b93a
BP
761OVS_VSWITCHD_START(
762 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
763 add-port br0 p2 -- set Interface p2 type=dummy --\
764 add-port br0 p3 -- set Interface p3 type=dummy --\
765 set Bridge br0 mirrors=@m --\
766 --id=@p3 get Port p3 --\
767 --id=@m create Mirror name=mymirror \
9da5b93a 768 select_all=true output_port=@p3], [<0>
c06bba01
JP
769])
770
c06bba01
JP
771AT_DATA([flows.txt], [dnl
772in_port=1 actions=mod_vlan_vid:17,output:2
773in_port=2 actions=output:1
774])
775AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
776
247527db 777flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
778AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
779AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 780 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
c06bba01
JP
781])
782
247527db 783flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
784AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
785AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 786 [Datapath actions: 1,3
c06bba01
JP
787])
788
789OVS_VSWITCHD_STOP
790AT_CLEANUP
791
c06bba01 792AT_SETUP([ofproto-dpif - mirroring, output_vlan])
9da5b93a
BP
793OVS_VSWITCHD_START(
794 [add-port br0 p1 -- set Interface p1 type=dummy --\
c06bba01
JP
795 add-port br0 p2 -- set Interface p2 type=dummy --\
796 set Bridge br0 mirrors=@m --\
797 --id=@m create Mirror name=mymirror \
9da5b93a 798 select_all=true output_vlan=12], [<0>
c06bba01
JP
799])
800
c06bba01
JP
801AT_DATA([flows.txt], [dnl
802in_port=1 actions=output:2
803in_port=2 actions=mod_vlan_vid:17,output:1
804])
805AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
806
247527db 807flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
808AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
809actual=`tail -1 stdout | sed 's/Datapath actions: //'`
810
247527db
BP
811expected="2,push_vlan(vid=12,pcp=0),0,1,2"
812AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 813mv stdout expout
247527db 814AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01 815
247527db 816flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
c06bba01
JP
817AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
818actual=`tail -1 stdout | sed 's/Datapath actions: //'`
819
247527db
BP
820expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),0,1,2"
821AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 822mv stdout expout
247527db 823AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01
JP
824
825OVS_VSWITCHD_STOP
826AT_CLEANUP
b44a10b7
BP
827
828m4_define([OFPROTO_TRACE],
829 [flow="$2"
830 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
831 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
832 expected="$4"
833 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
834 [0], [stdout])
835 mv stdout expout
836 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
837 [0], [expout])])
838
839AT_SETUP([ofproto-dpif - MAC learning])
840OVS_VSWITCHD_START(
841 [set bridge br0 fail-mode=standalone -- \
842 add-port br0 p1 -- set Interface p1 type=dummy -- \
843 add-port br0 p2 -- set Interface p2 type=dummy -- \
844 add-port br0 p3 -- set Interface p3 type=dummy])
845
b44a10b7
BP
846arp='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)'
847
848# Trace an ARP packet arriving on p3, to create a MAC learning entry.
849OFPROTO_TRACE(
850 [br0],
247527db 851 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 852 [-generate],
247527db 853 [0,1,2])
b44a10b7
BP
854
855# Check for the MAC learning entry.
83664f72 856AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 857 port VLAN MAC Age
247527db 858 3 0 50:54:00:00:00:05 ?
b44a10b7
BP
859])
860
861# Trace a packet arrival destined for the learned MAC.
862# (This will also learn a MAC.)
863OFPROTO_TRACE(
864 [br0],
247527db 865 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
b44a10b7 866 [-generate],
247527db 867 [3])
b44a10b7
BP
868
869# Check for both MAC learning entries.
83664f72 870AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 871 port VLAN MAC Age
247527db
BP
872 3 0 50:54:00:00:00:05 ?
873 1 0 50:54:00:00:00:06 ?
b44a10b7
BP
874])
875
876# Trace a packet arrival that updates the first learned MAC entry.
877OFPROTO_TRACE(
878 [br0],
247527db 879 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 880 [-generate],
247527db 881 [0,1,3])
b44a10b7
BP
882
883# Check that the MAC learning entry was updated.
83664f72 884AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 885 port VLAN MAC Age
247527db
BP
886 1 0 50:54:00:00:00:06 ?
887 2 0 50:54:00:00:00:05 ?
b44a10b7
BP
888])
889
890# Add another bridge.
891AT_CHECK(
892 [ovs-vsctl \
893 -- add-br br1 \
894 -- set bridge br1 datapath-type=dummy \
895 -- add-port br1 p4 -- set interface p4 type=dummy \
896 -- add-port br1 p5 -- set interface p5 type=dummy])
b44a10b7
BP
897
898# Trace some packet arrivals in br1 to create MAC learning entries there too.
899OFPROTO_TRACE(
900 [br1],
247527db 901 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 902 [-generate],
247527db 903 [0,5])
b44a10b7
BP
904OFPROTO_TRACE(
905 [br1],
247527db 906 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 907 [-generate],
247527db 908 [0,4])
b44a10b7
BP
909
910# Check that the MAC learning entries were added.
83664f72 911AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 912 port VLAN MAC Age
247527db
BP
913 4 0 50:54:00:00:00:06 ?
914 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
915])
916
917# Delete port p1 and see that its MAC learning entry disappeared, and
918# that the MAC learning entry for the same MAC was also deleted from br1.
919AT_CHECK([ovs-vsctl del-port p1])
83664f72 920AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 921 port VLAN MAC Age
247527db 922 2 0 50:54:00:00:00:05 ?
b44a10b7 923])
83664f72 924AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 925 port VLAN MAC Age
247527db 926 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
927])
928
929OVS_VSWITCHD_STOP
930AT_CLEANUP
17f7f7e0
BP
931
932dnl Test that basic NetFlow reports flow statistics correctly:
933dnl - The initial packet of a flow are correctly accounted.
934dnl - Later packets within a flow are correctly accounted.
935dnl - Flow actions changing (in this case, due to MAC learning)
936dnl cause a record to be sent.
937AT_SETUP([ofproto-dpif - NetFlow flow expiration])
938
37b694e7
BP
939AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
940NETFLOW_PORT=`cat stdout`
17f7f7e0
BP
941
942OVS_VSWITCHD_START(
943 [set Bridge br0 fail-mode=standalone -- \
944 add-port br0 p1 -- set Interface p1 type=dummy -- \
945 add-port br0 p2 -- set Interface p2 type=dummy -- \
946 set Bridge br0 netflow=@nf -- \
947 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
948 engine_id=1 engine_type=2 active_timeout=30 \
949 add-id-to-interface=false], [<0>
950])
951
0bb1b692 952ON_EXIT([kill `cat test-netflow.pid`])
4ba3d447
BP
953AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])
954AT_CAPTURE_FILE([netflow.log])
17f7f7e0
BP
955
956for delay in 1000 30000; do
957 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)'
958 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)'
959
960 ovs-appctl time/warp $delay
961done
962
d441e1b3 963sleep 1
17f7f7e0
BP
964OVS_VSWITCHD_STOP
965ovs-appctl -t test-netflow exit
966
967AT_CHECK([[sed -e 's/, uptime [0-9]*//
968s/, now [0-9.]*//
65ba8e9c 969s/time \([0-9]*\)\.\.\.\1$/time <moment>/
17f7f7e0
BP
970s/time [0-9]*\.\.\.[0-9]*/time <range>/
971' netflow.log]], [0],
972 [header: v5, seq 0, engine 2,1
973rec: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
974
975header: v5, seq 1, engine 2,1
976rec: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
977rec: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
978])
979AT_CLEANUP
980
981dnl Test that basic NetFlow reports active expirations correctly.
982AT_SETUP([ofproto-dpif - NetFlow active expiration])
983
37b694e7
BP
984AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
985NETFLOW_PORT=`cat stdout`
17f7f7e0
BP
986
987OVS_VSWITCHD_START(
988 [set Bridge br0 fail-mode=standalone -- \
989 add-port br0 p1 -- set Interface p1 type=dummy -- \
990 add-port br0 p2 -- set Interface p2 type=dummy -- \
991 set Bridge br0 netflow=@nf -- \
992 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
993 engine_id=1 engine_type=2 active_timeout=10 \
994 add-id-to-interface=false], [<0>
995])
996
0bb1b692 997ON_EXIT([kill `test-netflow.pid`])
77a922c7 998AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
17f7f7e0 999
f802352d 1000AT_CHECK([ovs-appctl time/stop])
17f7f7e0
BP
1001n=1
1002while test $n -le 60; do
1003 n=`expr $n + 1`
1004
1005 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)'
1006 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)'
1007
1008 ovs-appctl time/warp 1000
1009done
1010
1011ovs-appctl time/warp 10000
1012
d441e1b3 1013sleep 1
17f7f7e0
BP
1014OVS_VSWITCHD_STOP
1015ovs-appctl -t test-netflow exit
1016
1017# Count the number of reported packets:
1018# - From source to destination before MAC learning kicks in (just one).
1019# - From source to destination after that.
1020# - From destination to source.
1021n_learn=0
1022n_in=0
1023n_out=0
1024n_other=0
1025n_recs=0
1026none=0
1027while read line; do
1028 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1029 case $pkts in
1030 [[0-9]]*) ;;
1031 *) continue ;;
1032 esac
1033
1034 case $line in
1035 "rec: 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1036 counter=n_learn
1037 ;;
1038 "rec: 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1039 counter=n_in
1040 ;;
1041 "rec: 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1042 counter=n_out
1043 ;;
1044 *)
1045 counter=n_other
1046 ;;
1047 esac
1048 eval $counter=\`expr \$$counter + \$pkts\`
1049 n_recs=`expr $n_recs + 1`
1050done < netflow.log
1051
1052# There should be exactly 1 MAC learning packet,
1053# exactly 59 other packets in that direction,
1054# and exactly 60 packets in the other direction.
1055AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1056])
1057
1058# There should be 1 expiration for MAC learning,
1059# at least 5 active and a final expiration in one direction,
1060# and at least 5 active and a final expiration in the other direction.
1061echo $n_recs
1062AT_CHECK([test $n_recs -ge 13])
1063
1064AT_CLEANUP
f27f2134
BP
1065
1066AT_SETUP([idle_age and hard_age increase over time])
1067OVS_VSWITCHD_START
1068
1069# get_ages DURATION HARD IDLE
1070#
1071# Fetch the flow duration, hard age, and idle age into the variables
1072# whose names are given as arguments. Rounds DURATION down to the
1073# nearest integer. If hard_age doesn't appear in the output, sets
1074# HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1075# to 0.
1076get_ages () {
1077 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1078
1079 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1080 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1081 AS_VAR_COPY([$1], [duration])
1082
1083 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1084 if test X"$hard" = X; then
1085 hard=none
1086 else
1087 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1088 fi
1089 AS_VAR_COPY([$2], [hard])
1090
1091 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1092 if test X"$idle" = X; then
1093 idle=0
1094 else
1095 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1096 fi
1097 AS_VAR_COPY([$3], [idle])
1098}
1099
1100# Add a flow and get its initial hard and idle age.
1101AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1102get_ages duration1 hard1 idle1
1103
1104# Warp time forward by 10 seconds, then modify the flow's actions.
1105ovs-appctl time/warp 10000
1106get_ages duration2 hard2 idle2
1107AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1108
1109# Warp time forward by 10 seconds.
1110ovs-appctl time/warp 10000
1111get_ages duration3 hard3 idle3
1112
1113# Warp time forward 10 more seconds, then pass some packets through the flow,
1114# then warp forward a few more times because idle times are only updated
1115# occasionally.
1116ovs-appctl time/warp 10000
1117ovs-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)'
1118ovs-appctl time/warp 1000
1119ovs-appctl time/warp 1000
1120ovs-appctl time/warp 1000
1121get_ages duration4 hard4 idle4
1122
1123printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1124printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1125printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1126
1127# Duration should increase steadily over time.
1128AT_CHECK([test $duration1 -lt $duration2])
1129AT_CHECK([test $duration2 -lt $duration3])
1130AT_CHECK([test $duration3 -lt $duration4])
1131
1132# Hard age should be "none" initially because it's the same as flow_duration,
1133# then it should increase.
1134AT_CHECK([test $hard1 = none])
1135AT_CHECK([test $hard2 = none])
1136AT_CHECK([test $hard3 != none])
1137AT_CHECK([test $hard4 != none])
1138AT_CHECK([test $hard3 -lt $hard4])
1139
1140# Idle age should increase from 1 to 2 to 3, then decrease.
1141AT_CHECK([test $idle1 -lt $idle2])
1142AT_CHECK([test $idle2 -lt $idle3])
1143AT_CHECK([test $idle3 -gt $idle4])
1144
1145# Check some invariant relationships.
1146AT_CHECK([test $duration1 = $idle1])
1147AT_CHECK([test $duration2 = $idle2])
1148AT_CHECK([test $duration3 = $idle3])
1149AT_CHECK([test $idle3 -gt $hard3])
1150AT_CHECK([test $idle4 -lt $hard4])
1151AT_CHECK([test $hard4 -lt $duration4])
1152
1153OVS_VSWITCHD_STOP
1154AT_CLEANUP
0e553d9c
BP
1155
1156AT_SETUP([ofproto-dpif - fin_timeout])
1157OVS_VSWITCHD_START
1158AT_DATA([flows.txt], [dnl
1159in_port=1 actions=output:2
1160in_port=2 actions=mod_vlan_vid:17,output:1
1161])
1162AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1163AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1164[NXST_FLOW reply:
1165 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1166])
1167# Check that a TCP SYN packet does not change the timeout. (Because
1168# flow stats updates are mainly what implements the fin_timeout
1169# feature, we warp forward a couple of times to ensure that flow stats
1170# run before re-checking the flow table.)
1171AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1172])
1173AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1174warped
1175])
1176AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1177[NXST_FLOW reply:
1178 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1179])
1180# Check that a TCP FIN packet does change the timeout.
1181AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1182])
1183AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1184warped
1185])
1186AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1187[NXST_FLOW reply:
1188 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1189])
1190OVS_VSWITCHD_STOP
1191AT_CLEANUP