0a2a900a34d5461390d33660e80d5b2e31290d5d
[sliver-openvswitch.git] / tests / ofproto-dpif.at
1 AT_BANNER([ofproto-dpif])
2
3 AT_SETUP([ofproto-dpif - resubmit])
4 OVS_VSWITCHD_START
5 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
6                     [16], [17], [18], [19], [20], [21])
7 AT_DATA([flows.txt], [dnl
8 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
9 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
10 table=0 in_port=3 priority=2000 icmp actions=output(20)
11 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
12 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
13 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
14 ])
15 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
16 AT_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])
17 AT_CHECK([tail -1 stdout], [0],
18   [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
19 ])
20 OVS_VSWITCHD_STOP
21 AT_CLEANUP
22
23 AT_SETUP([ofproto-dpif - goto table])
24 OVS_VSWITCHD_START
25 ADD_OF_PORTS([br0], [1], [10], [11])
26 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
27 for i in `seq 1 252`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
28 echo "table=253 actions=output(11)" >> flows.txt
29 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
30 AT_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])
31 AT_CHECK([tail -1 stdout], [0],
32   [Datapath actions: 10,11
33 ])
34 OVS_VSWITCHD_STOP
35 AT_CLEANUP
36
37 AT_SETUP([ofproto-dpif - registers])
38 OVS_VSWITCHD_START
39 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
40 AT_DATA([flows.txt], [dnl
41 in_port=90                 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
42 in_port=91                 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
43 in_port=92                 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
44 in_port=93                 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
45
46 in_port=2                  actions=load:0x000db000->NXM_NX_REG0[[]]
47 in_port=3                  actions=load:0xdea->NXM_NX_REG0[[20..31]]
48 in_port=4                  actions=load:0xeef->NXM_NX_REG0[[0..11]]
49 in_port=5                  actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
50 in_port=6                  actions=load:0x22222222->NXM_NX_REG2[[]]
51 in_port=7                  actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
52 in_port=8                  actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
53 in_port=9,reg0=0xdeadbeef  actions=output:20
54 in_port=10,reg1=0xdeadbeef actions=output:21
55 in_port=11,reg2=0xeef22dea actions=output:22
56
57 dnl Sanilty check all registers
58 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
59 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
60 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
61 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
62
63 ])
64 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
65 AT_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])
66 AT_CHECK([tail -1 stdout], [0],
67   [Datapath actions: 20,21,22,33
68 ])
69 OVS_VSWITCHD_STOP
70 AT_CLEANUP
71
72 AT_SETUP([ofproto-dpif - push-pop])
73 OVS_VSWITCHD_START
74 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
75 AT_DATA([flows.txt], [dnl
76 in_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
77 in_port=2            actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
78 in_port=3            actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
79 in_port=4            actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
80 in_port=5            actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
81
82 ])
83 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
84 AT_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])
85 AT_CHECK([tail -1 stdout], [0],
86   [Datapath actions: 33,22,21,20
87 ])
88 OVS_VSWITCHD_STOP
89 AT_CLEANUP
90
91 AT_SETUP([ofproto-dpif - output])
92 OVS_VSWITCHD_START
93 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
94 AT_DATA([flows.txt], [dnl
95 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
96 in_port=2 actions=output:9
97 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
98 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
99 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
100 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
101 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
102 ])
103 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
104 AT_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])
105 AT_CHECK([tail -1 stdout], [0],
106   [Datapath actions: 9,55,10,55,66,11,77,88
107 ])
108 OVS_VSWITCHD_STOP
109 AT_CLEANUP
110
111 AT_SETUP([ofproto-dpif - dec_ttl])
112 OVS_VSWITCHD_START
113 ADD_OF_PORTS([br0], [1], [2], [3], [4])
114 AT_DATA([flows.txt], [dnl
115 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
116 table=1 in_port=1 action=dec_ttl,output:3
117 ])
118 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
119 AT_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])
120 AT_CHECK([tail -3 stdout], [0],
121   [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
122 This flow is handled by the userspace slow path because it:
123         - Sends "packet-in" messages to the OpenFlow controller.
124 ])
125 AT_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])
126 AT_CHECK([tail -1 stdout], [0],
127   [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),3,4
128 ])
129 AT_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])
130 AT_CHECK([tail -1 stdout], [0],
131   [Datapath actions: set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=127,frag=no)),2,set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=126,frag=no)),3,4
132 ])
133
134 AT_CAPTURE_FILE([ofctl_monitor.log])
135 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
136 AT_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])
137 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
138 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
139 NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
140 icmp,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
141 ])
142 OVS_VSWITCHD_STOP
143 AT_CLEANUP
144
145
146 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
147 OVS_VSWITCHD_START
148 ADD_OF_PORTS([br0], [1], [2])
149
150 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
151
152 # "in_port" defaults to OFPP_NONE if it's not specified.
153 flow="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"
154 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
155 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
156 1
157 2
158 100
159 ])
160
161 OVS_VSWITCHD_STOP
162 AT_CLEANUP
163
164 AT_SETUP([ofproto-dpif - DSCP])
165 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
166 ADD_OF_PORTS([br0], [9])
167 AT_DATA([flows.txt], [dnl
168 actions=output:65534,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:65534
169 ])
170 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
171 AT_CHECK([ovs-vsctl -- \
172         set Port p1 qos=@newqos --\
173         --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
174         --id=@q1 create Queue dscp=1 --\
175         --id=@q2 create Queue dscp=2], [0], [ignore])
176 AT_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])
177 AT_CHECK([tail -1 stdout], [0],
178   [Datapath actions: dnl
179 100,dnl
180 set(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
181 set(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
182 1,dnl
183 set(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
184 set(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
185 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
186 100
187 ])
188 OVS_VSWITCHD_STOP
189 AT_CLEANUP
190
191 AT_SETUP([ofproto-dpif - output/flood flags])
192 OVS_VSWITCHD_START
193 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
194
195 AT_DATA([flows.txt], [dnl
196 in_port=local actions=local,flood
197 in_port=1 actions=flood
198 in_port=2 actions=all
199 in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
200 in_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
201 ])
202 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
203 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
204 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
205
206 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
207 AT_CHECK([tail -1 stdout \
208 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
209 1
210 2
211 3
212 4
213 7
214 ])
215
216 AT_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])
217 AT_CHECK([tail -1 stdout \
218 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
219 100
220 2
221 3
222 4
223 7
224 ])
225
226 AT_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])
227 AT_CHECK([tail -1 stdout \
228 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
229 1
230 100
231 3
232 4
233 6
234 7
235 ])
236
237 AT_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])
238 AT_CHECK([tail -1 stdout], [0],
239   [Datapath actions: 100,1,2,4,6,7
240 ])
241
242 AT_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])
243 AT_CHECK([tail -1 stdout], [0],
244   [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
245 ])
246 OVS_VSWITCHD_STOP
247 AT_CLEANUP
248
249 AT_SETUP([ofproto-dpif - controller])
250 OVS_VSWITCHD_START([dnl
251    add-port br0 p1 -- set Interface p1 type=dummy
252 ])
253
254 AT_CAPTURE_FILE([ofctl_monitor.log])
255 AT_DATA([flows.txt], [dnl
256 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
257 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
258 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
259
260 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
261 cookie=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)
262 cookie=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)
263 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
264 cookie=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)
265 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
266 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
267 cookie=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
268 cookie=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
269 cookie=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
270 cookie=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
271 cookie=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
272 cookie=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
273 cookie=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
274 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
275 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
276 cookie=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
277 ])
278 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
279
280 dnl Flow miss.
281 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
282
283 for i in 1 2 3 ; do
284     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'
285 done
286
287 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
288 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
289 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
290 tcp,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
291 dnl
292 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
293 tcp,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
294 dnl
295 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
296 tcp,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
297 ])
298
299 dnl Singleton controller action.
300 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
301
302 for i in 1 2 3 ; do
303     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10)'
304 done
305
306 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
307 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
308 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
309 tcp,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
310 dnl
311 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
312 tcp,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
313 dnl
314 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
315 tcp,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
316 ])
317
318 dnl Modified controller action.
319 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
320
321 for i in 1 2 3 ; do
322     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=30:33:33:33:33:33,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10)'
323 done
324
325 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
326 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
327 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
328 tcp,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
329 dnl
330 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
331 tcp,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
332 dnl
333 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
334 tcp,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
335 ])
336
337 dnl Modified MPLS controller action.
338 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
339
340 for i in 1 2 3; do
341     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
342 done
343
344 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
345 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
346 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
347 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07
348 dnl
349 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
350 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07
351 dnl
352 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
353 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07
354 ])
355
356 dnl Modified MPLS controller action.
357 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
358
359 dnl in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=3,ttl=64,bos=1)
360
361 for i in 1 2 3; do
362     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:43,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'
363 done
364
365 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
366 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
367 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
368 mpls(label:10,tc:3,ttl:64,bos:0),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07
369 dnl
370 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
371 mpls(label:10,tc:3,ttl:64,bos:0),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07
372 dnl
373 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
374 mpls(label:10,tc:3,ttl:64,bos:0),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07
375 ])
376
377 dnl Modified MPLS controller action.
378 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
379
380 for i in 1 2 3; do
381     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:44,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=99,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
382 done
383
384 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
385 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
386 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
387 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07
388 dnl
389 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
390 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07
391 dnl
392 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
393 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07
394 ])
395
396 dnl Modified MPLS controller action.
397 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
398
399 for i in 1 2 3; do
400     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:45,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
401 done
402
403 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
404 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
405 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
406 mpls(label:10,tc:3,ttl:63,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07
407 dnl
408 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
409 mpls(label:10,tc:3,ttl:63,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07
410 dnl
411 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
412 mpls(label:10,tc:3,ttl:63,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07
413 ])
414
415 dnl Modified MPLS controller action.
416 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
417
418 for i in 1 2 3; do
419     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:46,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
420 done
421
422 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
423 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
424 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
425 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07
426 dnl
427 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
428 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07
429 dnl
430 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
431 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07
432 ])
433
434 dnl Modified MPLS controller action.
435 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
436
437 for i in 1 2 3; do
438     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:47,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
439 done
440
441 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
442 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
443 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
444 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07
445 dnl
446 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
447 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07
448 dnl
449 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
450 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07
451 ])
452
453 dnl Modified MPLS controller action.
454 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
455
456 for i in 1 2 3; do
457     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:48,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
458 done
459
460 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
461 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
462 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
463 mpls(label:10,tc:3,ttl:9,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07
464 dnl
465 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
466 mpls(label:10,tc:3,ttl:9,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07
467 dnl
468 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
469 mpls(label:10,tc:3,ttl:9,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07
470 ])
471
472 dnl Modified MPLS actions.
473 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
474
475 for i in 1 2 3; do
476     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:55:55:55:55:55,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=100,tc=7,ttl=64,bos=1),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
477 done
478
479 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
480 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
481 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
482 mpls(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07
483 dnl
484 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
485 mpls(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07
486 dnl
487 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
488 mpls(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07
489 ])
490
491 dnl Modified MPLS ipv6 controller action.
492 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
493
494 for i in 1 2 3; do
495     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=70:77:77:77:77:77,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
496 done
497
498 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
499 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
500 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
501 mplsm(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07
502 dnl
503 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
504 mplsm(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07
505 dnl
506 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
507 mplsm(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07
508 ])
509
510
511 dnl Modified MPLS pop action.
512 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
513
514 for i in 1 2 3; do
515     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),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
516 done
517
518 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
519 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
520 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
521 tcp,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 tcp_csum:0
522 dnl
523 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
524 tcp,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 tcp_csum:0
525 dnl
526 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
527 tcp,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 tcp_csum:0
528 ])
529
530 dnl Checksum TCP.
531 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
532
533 for i in 1 ; do
534     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)'
535 done
536
537 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
538 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
539 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
540 tcp,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
541 dnl
542 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
543 tcp,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
544 dnl
545 NXT_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)
546 tcp,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
547 dnl
548 NXT_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)
549 tcp,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
550 dnl
551 NXT_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)
552 tcp,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
553 dnl
554 NXT_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)
555 tcp,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
556 dnl
557 NXT_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)
558 tcp,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
559 dnl
560 NXT_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)
561 tcp,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
562 dnl
563 NXT_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)
564 tcp,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
565 ])
566
567 dnl Checksum UDP.
568 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
569
570 for i in 1 ; do
571     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'
572 done
573
574 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
575 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
576 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
577 udp,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
578 dnl
579 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
580 udp,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
581 dnl
582 NXT_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)
583 udp,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
584 dnl
585 NXT_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)
586 udp,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
587 dnl
588 NXT_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)
589 udp,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
590 dnl
591 NXT_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)
592 udp,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
593 dnl
594 NXT_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)
595 udp,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
596 dnl
597 NXT_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)
598 udp,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
599 dnl
600 NXT_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)
601 udp,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
602 ])
603
604 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
605  cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
606  cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
607  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)
608  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)
609  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)
610  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)
611  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)
612  cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
613  cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
614  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
615  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
616  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
617  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
618  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
619  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
620  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
621  cookie=0xb, n_packets=3, n_bytes=180, dl_src=50:55:55:55:55:55,dl_type=0x8847 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
622  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
623  cookie=0xd, n_packets=3, n_bytes=180, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
624  n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
625 NXST_FLOW reply:
626 ])
627
628 OVS_VSWITCHD_STOP
629 AT_CLEANUP
630
631 AT_SETUP([ofproto-dpif - VLAN handling])
632 OVS_VSWITCHD_START(
633   [set Bridge br0 fail-mode=standalone -- \
634    add-port br0 p1                                  trunks=10,12 -- \
635    add-port br0 p2                           tag=10              -- \
636    add-port br0 p3                           tag=12              \
637                    other-config:priority-tags=true               -- \
638    add-port br0 p4                           tag=12              -- \
639    add-port br0 p5 vlan_mode=native-tagged   tag=10              -- \
640    add-port br0 p6 vlan_mode=native-tagged   tag=10 trunks=10,12 -- \
641    add-port br0 p7 vlan_mode=native-untagged tag=12              -- \
642    add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
643                    other-config:priority-tags=true               -- \
644    set Interface p1 type=dummy -- \
645    set Interface p2 type=dummy -- \
646    set Interface p3 type=dummy -- \
647    set Interface p4 type=dummy -- \
648    set Interface p5 type=dummy -- \
649    set Interface p6 type=dummy -- \
650    set Interface p7 type=dummy -- \
651    set Interface p8 type=dummy --])
652
653 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
654 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
655 dnl actions.
656 for tuple in \
657         "100 none 0 drop" \
658         "100 0    0 drop" \
659         "100 0    1 drop" \
660         "100 10   0 1,5,6,7,8,pop_vlan,2" \
661         "100 10   1 1,5,6,7,8,pop_vlan,2" \
662         "100 11   0 5,7" \
663         "100 11   1 5,7" \
664         "100 12   0 1,5,6,pop_vlan,3,4,7,8" \
665         "100 12   1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
666         "1  none 0 drop" \
667         "1  0    0 drop" \
668         "1  0    1 drop" \
669         "1  10   0 5,6,7,8,100,pop_vlan,2" \
670         "1  10   1 5,6,7,8,100,pop_vlan,2" \
671         "1  11   0 drop" \
672         "1  11   1 drop" \
673         "1  12   0 5,6,100,pop_vlan,3,4,7,8" \
674         "1  12   1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
675         "2  none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
676         "2  0    0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
677         "2  0    1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
678         "2  10   0 drop" \
679         "2  10   1 drop" \
680         "2  11   0 drop" \
681         "2  11   1 drop" \
682         "2  12   0 drop" \
683         "2  12   1 drop" \
684         "3  none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
685         "3  0    0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
686         "3  0    1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
687         "3  10   0 drop" \
688         "3  10   1 drop" \
689         "3  11   0 drop" \
690         "3  11   1 drop" \
691         "3  12   0 drop" \
692         "3  12   1 drop" \
693         "4  none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
694         "4  0    0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
695         "4  0    1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
696         "4  10   0 drop" \
697         "4  10   1 drop" \
698         "4  11   0 drop" \
699         "4  11   1 drop" \
700         "4  12   0 drop" \
701         "4  12   1 drop" \
702         "5  none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
703         "5  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
704         "5  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
705         "5  10   0 1,6,7,8,100,pop_vlan,2" \
706         "5  10   1 1,6,7,8,100,pop_vlan,2" \
707         "5  11   0 7,100" \
708         "5  11   1 7,100" \
709         "5  12   0 1,6,100,pop_vlan,3,4,7,8" \
710         "5  12   1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
711         "6  none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
712         "6  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
713         "6  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
714         "6  10   0 1,5,7,8,100,pop_vlan,2" \
715         "6  10   1 1,5,7,8,100,pop_vlan,2" \
716         "6  11   0 drop" \
717         "6  11   1 drop" \
718         "6  12   0 1,5,100,pop_vlan,3,4,7,8" \
719         "6  12   1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
720         "7  none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
721         "7  0    0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
722         "7  0    1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
723         "7  10   0 1,5,6,8,100,pop_vlan,2" \
724         "7  10   1 1,5,6,8,100,pop_vlan,2" \
725         "7  11   0 5,100" \
726         "7  11   1 5,100" \
727         "7  12   0 1,5,6,100,pop_vlan,3,4,8" \
728         "7  12   1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
729         "8  none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
730         "8  0    0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
731         "8  0    1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
732         "8  10   0 1,5,6,7,100,pop_vlan,2" \
733         "8  10   1 1,5,6,7,100,pop_vlan,2" \
734         "8  11   0 drop" \
735         "8  11   1 drop" \
736         "8  12   0 1,5,6,100,pop_vlan,3,4,7" \
737         "8  12   1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
738 do
739   set $tuple
740   in_port=$1
741   vlan=$2
742   pcp=$3
743   expected=$4
744
745   if test $vlan = none; then
746     flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
747   else
748     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))"
749   fi
750
751   echo "----------------------------------------------------------------------"
752   echo "in_port=$in_port vlan=$vlan pcp=$pcp"
753
754   AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
755   actual=`tail -1 stdout | sed 's/Datapath actions: //'`
756
757   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
758   mv stdout expout
759   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
760 done
761
762 OVS_VSWITCHD_STOP
763 AT_CLEANUP
764
765 AT_SETUP([ofproto-dpif - fragment handling])
766 OVS_VSWITCHD_START
767 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
768 AT_DATA([flows.txt], [dnl
769 priority=75 tcp ip_frag=no    tp_dst=80 actions=output:1
770 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
771 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
772 priority=50 tcp ip_frag=no              actions=output:4
773 priority=50 tcp ip_frag=first           actions=output:5
774 priority=50 tcp ip_frag=later           actions=output:6
775 ])
776 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
777
778 base_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"
779 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
780 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
781 later_flow="$base_flow,frag=later)"
782
783     # mode    no  first  later
784 for tuple in \
785     'normal    1     5      6' \
786     'drop      1  drop   drop' \
787     'nx-match  1     2      6'
788 do
789   set $tuple
790   mode=$1
791   no=$2
792   first=$3
793   later=$4
794
795   AT_CHECK([ovs-ofctl set-frags br0 $mode])
796   for type in no first later; do
797     eval flow=\$${type}_flow exp_output=\$$type
798     AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
799     AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
800 ])
801   done
802 done
803 OVS_VSWITCHD_STOP
804 AT_CLEANUP
805
806 AT_SETUP([ofproto-dpif - exit])
807 OVS_VSWITCHD_START
808 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
809 AT_DATA([flows.txt], [dnl
810 in_port=1 actions=output:10,exit,output:11
811 in_port=2 actions=output:12,resubmit:1,output:12
812 in_port=3 actions=output:13,resubmit:2,output:14
813 ])
814 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
815 AT_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])
816 AT_CHECK([tail -1 stdout], [0],
817   [Datapath actions: 10
818 ])
819 AT_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])
820 AT_CHECK([tail -1 stdout], [0],
821   [Datapath actions: 12,10
822 ])
823 AT_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])
824 AT_CHECK([tail -1 stdout], [0],
825   [Datapath actions: 13,12,10
826 ])
827 OVS_VSWITCHD_STOP
828 AT_CLEANUP
829
830
831 AT_SETUP([ofproto-dpif - mirroring, select_all])
832 OVS_VSWITCHD_START
833 ADD_OF_PORTS([br0], 1, 2, 3)
834 ovs-vsctl \
835         set Bridge br0 mirrors=@m --\
836         --id=@p3 get Port p3 --\
837         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
838
839 AT_DATA([flows.txt], [dnl
840 in_port=1 actions=output:2
841 in_port=2 actions=output:1
842 ])
843 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
844
845 flow="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)"
846 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
847 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
848   [Datapath actions: 2,3
849 ])
850
851 flow="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)"
852 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
853 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
854   [Datapath actions: 1,3
855 ])
856
857 OVS_VSWITCHD_STOP
858 AT_CLEANUP
859
860
861 AT_SETUP([ofproto-dpif - mirroring, select_src])
862 OVS_VSWITCHD_START
863 ADD_OF_PORTS([br0], 1, 2, 3)
864 ovs-vsctl \
865         set Bridge br0 mirrors=@m --\
866         --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
867         --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
868
869 AT_DATA([flows.txt], [dnl
870 in_port=1 actions=output:2
871 in_port=2 actions=output:1
872 ])
873 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
874
875 flow="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)"
876 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
877 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
878   [Datapath actions: 2,3
879 ])
880
881 flow="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)"
882 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
883 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
884   [Datapath actions: 1
885 ])
886 OVS_VSWITCHD_STOP
887 AT_CLEANUP
888
889 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
890 OVS_VSWITCHD_START
891 ADD_OF_PORTS([br0], 1, 2)
892 ovs-vsctl \
893         set Bridge br0 mirrors=@m --\
894         --id=@p2 get Port p2 --\
895         --id=@m create Mirror name=mymirror select_all=true output_port=@p2
896
897 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
898
899 # "in_port" defaults to OFPP_NONE if it's not specified.
900 flow="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"
901 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
902 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
903   [Datapath actions: 1,2
904 ])
905
906 OVS_VSWITCHD_STOP
907 AT_CLEANUP
908
909
910 AT_SETUP([ofproto-dpif - mirroring, select_dst])
911 OVS_VSWITCHD_START
912 ADD_OF_PORTS([br0], 1, 2, 3)
913 ovs-vsctl \
914         set Bridge br0 mirrors=@m --\
915         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
916         --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
917
918 AT_DATA([flows.txt], [dnl
919 in_port=1 actions=output:2
920 in_port=2 actions=output:1
921 ])
922 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
923
924 flow="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)"
925 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
926 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
927   [Datapath actions: 2,3
928 ])
929
930 flow="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)"
931 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
932 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
933   [Datapath actions: 1
934 ])
935
936 OVS_VSWITCHD_STOP
937 AT_CLEANUP
938
939
940 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
941 OVS_VSWITCHD_START
942 ADD_OF_PORTS([br0], 1, 2, 3)
943 ovs-vsctl \
944         set Bridge br0 mirrors=@m --\
945         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
946         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
947
948 AT_DATA([flows.txt], [dnl
949 in_port=1, actions=output:2
950 ])
951 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
952
953 flow="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)"
954 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
955 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
956   [Datapath actions: 2
957 ])
958
959 flow="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))"
960 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
961 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
962   [Datapath actions: 2
963 ])
964
965 flow="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))"
966 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
967 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
968   [Datapath actions: 2,3
969 ])
970
971 OVS_VSWITCHD_STOP
972 AT_CLEANUP
973
974
975 AT_SETUP([ofproto-dpif - mirroring, output_port])
976 OVS_VSWITCHD_START
977 ADD_OF_PORTS([br0], 1, 2, 3)
978 ovs-vsctl \
979         set Bridge br0 mirrors=@m --\
980         --id=@p3 get Port p3 --\
981         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
982
983 AT_DATA([flows.txt], [dnl
984 in_port=1 actions=mod_vlan_vid:17,output:2
985 in_port=2 actions=output:1
986 ])
987 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
988
989 flow="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)"
990 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
991 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
992   [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
993 ])
994
995 flow="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)"
996 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
997 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
998   [Datapath actions: 1,3
999 ])
1000
1001 OVS_VSWITCHD_STOP
1002 AT_CLEANUP
1003
1004 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1005 OVS_VSWITCHD_START
1006 ADD_OF_PORTS([br0], 1, 2)
1007 ovs-vsctl \
1008         set Bridge br0 mirrors=@m --\
1009         --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1010
1011 AT_DATA([flows.txt], [dnl
1012 in_port=1 actions=output:2
1013 in_port=2 actions=mod_vlan_vid:17,output:1
1014 ])
1015 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1016
1017 flow="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)"
1018 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1019 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1020
1021 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1022 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1023 mv stdout expout
1024 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1025
1026 flow="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)"
1027 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1028 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1029
1030 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1031 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1032 mv stdout expout
1033 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1034
1035 OVS_VSWITCHD_STOP
1036 AT_CLEANUP
1037
1038 m4_define([OFPROTO_TRACE],
1039   [flow="$2"
1040    AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1041    actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1042    expected="$4"
1043    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1044      [0], [stdout])
1045    mv stdout expout
1046    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1047      [0], [expout])])
1048
1049 AT_SETUP([ofproto-dpif - MAC learning])
1050 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1051 ADD_OF_PORTS([br0], 1, 2, 3)
1052
1053 arp='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)'
1054
1055 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1056 OFPROTO_TRACE(
1057   [br0],
1058   [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1059   [-generate],
1060   [1,2,100])
1061
1062 # Check for the MAC learning entry.
1063 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1064  port  VLAN  MAC                Age
1065     3     0  50:54:00:00:00:05    ?
1066 ])
1067
1068 # Trace a packet arrival destined for the learned MAC.
1069 # (This will also learn a MAC.)
1070 OFPROTO_TRACE(
1071   [br0],
1072   [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1073   [-generate],
1074   [3])
1075
1076 # Check for both MAC learning entries.
1077 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1078  port  VLAN  MAC                Age
1079     3     0  50:54:00:00:00:05    ?
1080     1     0  50:54:00:00:00:06    ?
1081 ])
1082
1083 # Trace a packet arrival that updates the first learned MAC entry.
1084 OFPROTO_TRACE(
1085   [br0],
1086   [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1087   [-generate],
1088   [1,3,100])
1089
1090 # Check that the MAC learning entry was updated.
1091 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1092  port  VLAN  MAC                Age
1093     1     0  50:54:00:00:00:06    ?
1094     2     0  50:54:00:00:00:05    ?
1095 ])
1096
1097 # Add another bridge.
1098 AT_CHECK(
1099   [ovs-vsctl \
1100      -- add-br br1 \
1101      -- set bridge br1 datapath-type=dummy \
1102      -- add-port br1 p4 -- set interface p4 type=dummy \
1103      -- add-port br1 p5 -- set interface p5 type=dummy])
1104
1105 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1106 OFPROTO_TRACE(
1107   [br1],
1108   [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1109   [-generate],
1110   [5,101])
1111 OFPROTO_TRACE(
1112   [br1],
1113   [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1114   [-generate],
1115   [4,101])
1116
1117 # Check that the MAC learning entries were added.
1118 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1119  port  VLAN  MAC                Age
1120     4     0  50:54:00:00:00:06    ?
1121     5     0  50:54:00:00:00:07    ?
1122 ])
1123
1124 # Delete port p1 and see that its MAC learning entry disappeared, and
1125 # that the MAC learning entry for the same MAC was also deleted from br1.
1126 AT_CHECK([ovs-vsctl del-port p1])
1127 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1128  port  VLAN  MAC                Age
1129     2     0  50:54:00:00:00:05    ?
1130 ])
1131 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1132  port  VLAN  MAC                Age
1133     5     0  50:54:00:00:00:07    ?
1134 ])
1135
1136 OVS_VSWITCHD_STOP
1137 AT_CLEANUP
1138
1139 AT_SETUP([ofproto-dpif - MAC table overflow])
1140 OVS_VSWITCHD_START(
1141   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1142    add-port br0 p1 -- set Interface p1 type=dummy -- \
1143    add-port br0 p2 -- set Interface p2 type=dummy -- \
1144    add-port br0 p3 -- set Interface p3 type=dummy])
1145
1146 arp='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)'
1147
1148 AT_CHECK([ovs-appctl time/stop])
1149
1150 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1151 for i in 0 1 2 3 4 5 6 7 8 9; do
1152     OFPROTO_TRACE(
1153       [br0],
1154       [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1155       [-generate],
1156       [1,2,100])
1157     ovs-appctl time/warp 1000
1158 done
1159
1160 # Check for the MAC learning entries.
1161 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1162   [0], [dnl
1163     3     0  50:54:00:00:00:00
1164     3     0  50:54:00:00:00:01
1165     3     0  50:54:00:00:00:02
1166     3     0  50:54:00:00:00:03
1167     3     0  50:54:00:00:00:04
1168     3     0  50:54:00:00:00:05
1169     3     0  50:54:00:00:00:06
1170     3     0  50:54:00:00:00:07
1171     3     0  50:54:00:00:00:08
1172     3     0  50:54:00:00:00:09
1173  port  VLAN  MAC                Age
1174 ])
1175
1176 # Trace another ARP packet on another MAC.
1177 OFPROTO_TRACE(
1178   [br0],
1179   [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1180   [-generate],
1181   [1,2,100])
1182
1183 # Check that the new one chased the oldest one out of the table.
1184 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1185   [0], [dnl
1186     3     0  50:54:00:00:00:01    ?
1187     3     0  50:54:00:00:00:02    ?
1188     3     0  50:54:00:00:00:03    ?
1189     3     0  50:54:00:00:00:04    ?
1190     3     0  50:54:00:00:00:05    ?
1191     3     0  50:54:00:00:00:06    ?
1192     3     0  50:54:00:00:00:07    ?
1193     3     0  50:54:00:00:00:08    ?
1194     3     0  50:54:00:00:00:09    ?
1195     3     0  50:54:00:00:00:10    ?
1196  port  VLAN  MAC                Age
1197 ])
1198 OVS_VSWITCHD_STOP
1199 AT_CLEANUP
1200
1201 dnl Test that basic NetFlow reports flow statistics correctly:
1202 dnl - The initial packet of a flow are correctly accounted.
1203 dnl - Later packets within a flow are correctly accounted.
1204 dnl - Flow actions changing (in this case, due to MAC learning)
1205 dnl   cause a record to be sent.
1206 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1207
1208 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1209 NETFLOW_PORT=`cat stdout`
1210
1211 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1212 ADD_OF_PORTS([br0], 1, 2)
1213 ovs-vsctl \
1214    set Bridge br0 netflow=@nf -- \
1215    --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1216      engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1217
1218 ON_EXIT([kill `cat test-netflow.pid`])
1219 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])
1220 AT_CAPTURE_FILE([netflow.log])
1221
1222 for delay in 1000 30000; do
1223     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)'
1224     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)'
1225
1226     ovs-appctl time/warp $delay
1227 done
1228
1229 sleep 1
1230 OVS_VSWITCHD_STOP
1231 ovs-appctl -t test-netflow exit
1232
1233 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1234 s/, now [0-9.]*//
1235 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1236 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1237 ' netflow.log | sort]], [0],
1238   [
1239 header: v5, seq 0, engine 2,1
1240 header: v5, seq 1, engine 2,1
1241 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1242 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1243 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1244 ])
1245 AT_CLEANUP
1246
1247 dnl Test that basic NetFlow reports active expirations correctly.
1248 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1249
1250 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1251 NETFLOW_PORT=`cat stdout`
1252
1253 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1254 ADD_OF_PORTS([br0], 1, 2)
1255 ovs-vsctl \
1256    set Bridge br0 netflow=@nf -- \
1257    --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1258      engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1259
1260 ON_EXIT([kill `cat test-netflow.pid`])
1261 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
1262
1263 AT_CHECK([ovs-appctl time/stop])
1264 n=1
1265 while test $n -le 60; do
1266     n=`expr $n + 1`
1267
1268     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)'
1269     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)'
1270
1271     ovs-appctl time/warp 1000
1272 done
1273
1274 ovs-appctl time/warp 10000
1275
1276 sleep 1
1277 OVS_VSWITCHD_STOP
1278 ovs-appctl -t test-netflow exit
1279
1280 # Count the number of reported packets:
1281 # - From source to destination before MAC learning kicks in (just one).
1282 # - From source to destination after that.
1283 # - From destination to source.
1284 n_learn=0
1285 n_in=0
1286 n_out=0
1287 n_other=0
1288 n_recs=0
1289 none=0
1290 while read line; do
1291     pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1292     case $pkts in
1293          [[0-9]]*) ;;
1294          *) continue ;;
1295     esac
1296
1297     case $line in
1298         "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1299             counter=n_learn
1300             ;;
1301         "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1302             counter=n_in
1303             ;;
1304         "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1305             counter=n_out
1306             ;;
1307         *)
1308             counter=n_other
1309             ;;
1310     esac
1311     eval $counter=\`expr \$$counter + \$pkts\`
1312     n_recs=`expr $n_recs + 1`
1313 done < netflow.log
1314
1315 # There should be exactly 1 MAC learning packet,
1316 # exactly 59 other packets in that direction,
1317 # and exactly 60 packets in the other direction.
1318 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1319 ])
1320
1321 # There should be 1 expiration for MAC learning,
1322 # at least 5 active and a final expiration in one direction,
1323 # and at least 5 active and a final expiration in the other direction.
1324 echo $n_recs
1325 AT_CHECK([test $n_recs -ge 13])
1326
1327 AT_CLEANUP
1328
1329 AT_SETUP([idle_age and hard_age increase over time])
1330 OVS_VSWITCHD_START
1331
1332 # get_ages DURATION HARD IDLE
1333 #
1334 # Fetch the flow duration, hard age, and idle age into the variables
1335 # whose names are given as arguments.  Rounds DURATION down to the
1336 # nearest integer.  If hard_age doesn't appear in the output, sets
1337 # HARD to "none".  If idle_age doesn't appear in the output, sets IDLE
1338 # to 0.
1339 get_ages () {
1340     AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1341
1342     duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1343     AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1344     AS_VAR_COPY([$1], [duration])
1345
1346     hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1347     if test X"$hard" = X; then
1348         hard=none
1349     else
1350         AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1351     fi
1352     AS_VAR_COPY([$2], [hard])
1353
1354     idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1355     if test X"$idle" = X; then
1356         idle=0
1357     else
1358         AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1359     fi
1360     AS_VAR_COPY([$3], [idle])
1361 }
1362
1363 # Add a flow and get its initial hard and idle age.
1364 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1365 get_ages duration1 hard1 idle1
1366
1367 # Warp time forward by 10 seconds, then modify the flow's actions.
1368 ovs-appctl time/warp 10000
1369 get_ages duration2 hard2 idle2
1370 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1371
1372 # Warp time forward by 10 seconds.
1373 ovs-appctl time/warp 10000
1374 get_ages duration3 hard3 idle3
1375
1376 # Warp time forward 10 more seconds, then pass some packets through the flow,
1377 # then warp forward a few more times because idle times are only updated
1378 # occasionally.
1379 ovs-appctl time/warp 10000
1380 ovs-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)'
1381 ovs-appctl time/warp 1000
1382 ovs-appctl time/warp 1000
1383 ovs-appctl time/warp 1000
1384 get_ages duration4 hard4 idle4
1385
1386 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1387 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1388 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1389
1390 # Duration should increase steadily over time.
1391 AT_CHECK([test $duration1 -lt $duration2])
1392 AT_CHECK([test $duration2 -lt $duration3])
1393 AT_CHECK([test $duration3 -lt $duration4])
1394
1395 # Hard age should be "none" initially because it's the same as flow_duration,
1396 # then it should increase.
1397 AT_CHECK([test $hard1 = none])
1398 AT_CHECK([test $hard2 = none])
1399 AT_CHECK([test $hard3 != none])
1400 AT_CHECK([test $hard4 != none])
1401 AT_CHECK([test $hard3 -lt $hard4])
1402
1403 # Idle age should increase from 1 to 2 to 3, then decrease.
1404 AT_CHECK([test $idle1 -lt $idle2])
1405 AT_CHECK([test $idle2 -lt $idle3])
1406 AT_CHECK([test $idle3 -gt $idle4])
1407
1408 # Check some invariant relationships.
1409 AT_CHECK([test $duration1 = $idle1])
1410 AT_CHECK([test $duration2 = $idle2])
1411 AT_CHECK([test $duration3 = $idle3])
1412 AT_CHECK([test $idle3 -gt $hard3])
1413 AT_CHECK([test $idle4 -lt $hard4])
1414 AT_CHECK([test $hard4 -lt $duration4])
1415
1416 OVS_VSWITCHD_STOP
1417 AT_CLEANUP
1418
1419 AT_SETUP([ofproto-dpif - fin_timeout])
1420 OVS_VSWITCHD_START
1421 AT_DATA([flows.txt], [dnl
1422 in_port=1 actions=output:2
1423 in_port=2 actions=mod_vlan_vid:17,output:1
1424 ])
1425 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1426 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1427 [NXST_FLOW reply:
1428  idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1429 ])
1430 # Check that a TCP SYN packet does not change the timeout.  (Because
1431 # flow stats updates are mainly what implements the fin_timeout
1432 # feature, we warp forward a couple of times to ensure that flow stats
1433 # run before re-checking the flow table.)
1434 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1435 ])
1436 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1437 warped
1438 ])
1439 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1440 [NXST_FLOW reply:
1441  n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1442 ])
1443 # Check that a TCP FIN packet does change the timeout.
1444 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1445 ])
1446 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1447 warped
1448 ])
1449 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1450 [NXST_FLOW reply:
1451  n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1452 ])
1453 OVS_VSWITCHD_STOP
1454 AT_CLEANUP
1455
1456 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1457 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1458 ADD_OF_PORTS([br0], [1], [2])
1459 ADD_OF_PORTS([br1], [3])
1460
1461 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1462 dummy@br0
1463 dummy@br1
1464 ])
1465 OVS_VSWITCHD_STOP
1466 AT_CLEANUP
1467
1468 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1469 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1470 ADD_OF_PORTS([br0], [1], [2])
1471 ADD_OF_PORTS([br1], [3])
1472
1473 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1474 br0 (dummy@ovs-dummy):
1475         lookups: hit:0 missed:0
1476         flows: 0
1477         br0 65534/100: (dummy)
1478         p1 1/1: (dummy)
1479         p2 2/2: (dummy)
1480 br1 (dummy@ovs-dummy):
1481         lookups: hit:0 missed:0
1482         flows: 0
1483         br1 65534/101: (dummy)
1484         p3 3/3: (dummy)
1485 ])
1486
1487 AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
1488 br0 (dummy@ovs-dummy):
1489         lookups: hit:0 missed:0
1490         flows: 0
1491         br0 65534/100: (dummy)
1492         p1 1/1: (dummy)
1493         p2 2/2: (dummy)
1494 ])
1495 OVS_VSWITCHD_STOP
1496 AT_CLEANUP
1497
1498 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1499 OVS_VSWITCHD_START([add-br br1 -- \
1500                     set bridge br1 datapath-type=dummy fail-mode=secure])
1501 ADD_OF_PORTS([br0], [1], [2])
1502 ADD_OF_PORTS([br1], [3])
1503
1504 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1505 ])
1506 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'], [0], [success
1507 ])
1508 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1509 ])
1510
1511 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1512 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1513 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1514 ])
1515
1516 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1517 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1518 ])
1519
1520 OVS_VSWITCHD_STOP
1521 AT_CLEANUP
1522
1523 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1524 OVS_VSWITCHD_START([add-br br1 -- \
1525                     set bridge br1 datapath-type=dummy fail-mode=secure])
1526 ADD_OF_PORTS([br0], [1], [2])
1527 ADD_OF_PORTS([br1], [3])
1528
1529 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1530 ])
1531 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'], [0], [success
1532 ])
1533 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1534 ])
1535
1536 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1537 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1538 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1539 ])
1540
1541 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1542 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1543 ])
1544
1545 AT_CHECK([ovs-appctl dpif/del-flows br0])
1546 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1547 ])
1548
1549 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1550 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1551 ])
1552
1553 OVS_VSWITCHD_STOP
1554 AT_CLEANUP
1555
1556 AT_SETUP([ofproto-dpif - patch ports])
1557 OVS_VSWITCHD_START([add-br br1 \
1558 -- set bridge br1 datapath-type=dummy fail-mode=secure \
1559 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
1560 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
1561
1562 ADD_OF_PORTS([br0], [2])
1563 ADD_OF_PORTS([br1], [3])
1564
1565 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1566 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1567
1568 for i in $(seq 1 10); do
1569     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)'
1570 done
1571
1572 for i in $(seq 1 5); do
1573     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)'
1574 done
1575
1576 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1577 warped
1578 ])
1579
1580 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1581 br0 (dummy@ovs-dummy):
1582         lookups: hit:9 missed:1
1583         flows: 1
1584         br0 65534/100: (dummy)
1585         p2 2/2: (dummy)
1586         pbr0 1/none: (patch: peer=pbr1)
1587 br1 (dummy@ovs-dummy):
1588         lookups: hit:4 missed:1
1589         flows: 1
1590         br1 65534/101: (dummy)
1591         p3 3/3: (dummy)
1592         pbr1 1/none: (patch: peer=pbr0)
1593 ])
1594
1595 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1596 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), packets:9, bytes:540, used:0.0s, actions:101,3,2
1597 ]),
1598 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1599 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), packets:4, bytes:240, used:0.0s, actions:100,2,3
1600 ])
1601
1602 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1603 OFPST_PORT reply (xid=0x4): 1 ports
1604   port  1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
1605            tx pkts=10, bytes=600, drop=0, errs=0, coll=0
1606 ])
1607
1608 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
1609 OFPST_PORT reply (xid=0x4): 1 ports
1610   port  1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
1611            tx pkts=5, bytes=300, drop=0, errs=0, coll=0
1612 ])
1613
1614 OVS_VSWITCHD_STOP
1615 AT_CLEANUP