Remove encal_dl_type from struct flow
[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 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
513 dnl 60:66:66:66:66:66 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
514 dnl             (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
515
516 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
517
518 for i in 1 2 3; do
519     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 66 66 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
520 done
521 #for i in 2 3; do
522 #    ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=60:66:66:66:66:66,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=3,ttl=100,bos=1)'
523 #done
524
525 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
526 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
527 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
528 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,tp_src=80,tp_dst=0 tcp_csum:7744
529 dnl
530 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
531 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,tp_src=80,tp_dst=0 tcp_csum:7744
532 dnl
533 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
534 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,tp_src=80,tp_dst=0 tcp_csum:7744
535 ])
536
537 dnl Checksum TCP.
538 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
539
540 for i in 1 ; do
541     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=20:22:22:22:22:22,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=11)'
542 done
543
544 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
545 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
546 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
547 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
548 dnl
549 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
550 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
551 dnl
552 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)
553 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
554 dnl
555 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)
556 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
557 dnl
558 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)
559 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
560 dnl
561 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)
562 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
563 dnl
564 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)
565 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
566 dnl
567 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)
568 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
569 dnl
570 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)
571 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
572 ])
573
574 dnl Checksum UDP.
575 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
576
577 for i in 1 ; do
578     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 1C 00 00 00 00 00 11 00 00 C0 A8 00 01 C0 A8 00 02 00 08 00 0B 00 00 12 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
579 done
580
581 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
582 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
583 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
584 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
585 dnl
586 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
587 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
588 dnl
589 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)
590 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
591 dnl
592 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)
593 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
594 dnl
595 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)
596 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
597 dnl
598 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)
599 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
600 dnl
601 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)
602 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
603 dnl
604 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)
605 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
606 dnl
607 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)
608 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
609 ])
610
611 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
612  cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
613  cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
614  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)
615  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)
616  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)
617  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)
618  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)
619  cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
620  cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
621  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
622  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
623  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
624  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
625  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
626  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
627  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
628  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
629  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
630  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
631  n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
632 NXST_FLOW reply:
633 ])
634
635 OVS_VSWITCHD_STOP
636 AT_CLEANUP
637
638 AT_SETUP([ofproto-dpif - VLAN handling])
639 OVS_VSWITCHD_START(
640   [set Bridge br0 fail-mode=standalone -- \
641    add-port br0 p1                                  trunks=10,12 -- \
642    add-port br0 p2                           tag=10              -- \
643    add-port br0 p3                           tag=12              \
644                    other-config:priority-tags=true               -- \
645    add-port br0 p4                           tag=12              -- \
646    add-port br0 p5 vlan_mode=native-tagged   tag=10              -- \
647    add-port br0 p6 vlan_mode=native-tagged   tag=10 trunks=10,12 -- \
648    add-port br0 p7 vlan_mode=native-untagged tag=12              -- \
649    add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
650                    other-config:priority-tags=true               -- \
651    set Interface p1 type=dummy -- \
652    set Interface p2 type=dummy -- \
653    set Interface p3 type=dummy -- \
654    set Interface p4 type=dummy -- \
655    set Interface p5 type=dummy -- \
656    set Interface p6 type=dummy -- \
657    set Interface p7 type=dummy -- \
658    set Interface p8 type=dummy --])
659
660 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
661 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
662 dnl actions.
663 for tuple in \
664         "100 none 0 drop" \
665         "100 0    0 drop" \
666         "100 0    1 drop" \
667         "100 10   0 1,5,6,7,8,pop_vlan,2" \
668         "100 10   1 1,5,6,7,8,pop_vlan,2" \
669         "100 11   0 5,7" \
670         "100 11   1 5,7" \
671         "100 12   0 1,5,6,pop_vlan,3,4,7,8" \
672         "100 12   1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
673         "1  none 0 drop" \
674         "1  0    0 drop" \
675         "1  0    1 drop" \
676         "1  10   0 5,6,7,8,100,pop_vlan,2" \
677         "1  10   1 5,6,7,8,100,pop_vlan,2" \
678         "1  11   0 drop" \
679         "1  11   1 drop" \
680         "1  12   0 5,6,100,pop_vlan,3,4,7,8" \
681         "1  12   1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
682         "2  none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
683         "2  0    0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
684         "2  0    1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
685         "2  10   0 drop" \
686         "2  10   1 drop" \
687         "2  11   0 drop" \
688         "2  11   1 drop" \
689         "2  12   0 drop" \
690         "2  12   1 drop" \
691         "3  none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
692         "3  0    0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
693         "3  0    1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
694         "3  10   0 drop" \
695         "3  10   1 drop" \
696         "3  11   0 drop" \
697         "3  11   1 drop" \
698         "3  12   0 drop" \
699         "3  12   1 drop" \
700         "4  none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
701         "4  0    0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
702         "4  0    1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
703         "4  10   0 drop" \
704         "4  10   1 drop" \
705         "4  11   0 drop" \
706         "4  11   1 drop" \
707         "4  12   0 drop" \
708         "4  12   1 drop" \
709         "5  none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
710         "5  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
711         "5  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
712         "5  10   0 1,6,7,8,100,pop_vlan,2" \
713         "5  10   1 1,6,7,8,100,pop_vlan,2" \
714         "5  11   0 7,100" \
715         "5  11   1 7,100" \
716         "5  12   0 1,6,100,pop_vlan,3,4,7,8" \
717         "5  12   1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
718         "6  none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
719         "6  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
720         "6  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
721         "6  10   0 1,5,7,8,100,pop_vlan,2" \
722         "6  10   1 1,5,7,8,100,pop_vlan,2" \
723         "6  11   0 drop" \
724         "6  11   1 drop" \
725         "6  12   0 1,5,100,pop_vlan,3,4,7,8" \
726         "6  12   1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
727         "7  none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
728         "7  0    0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
729         "7  0    1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
730         "7  10   0 1,5,6,8,100,pop_vlan,2" \
731         "7  10   1 1,5,6,8,100,pop_vlan,2" \
732         "7  11   0 5,100" \
733         "7  11   1 5,100" \
734         "7  12   0 1,5,6,100,pop_vlan,3,4,8" \
735         "7  12   1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
736         "8  none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
737         "8  0    0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
738         "8  0    1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
739         "8  10   0 1,5,6,7,100,pop_vlan,2" \
740         "8  10   1 1,5,6,7,100,pop_vlan,2" \
741         "8  11   0 drop" \
742         "8  11   1 drop" \
743         "8  12   0 1,5,6,100,pop_vlan,3,4,7" \
744         "8  12   1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
745 do
746   set $tuple
747   in_port=$1
748   vlan=$2
749   pcp=$3
750   expected=$4
751
752   if test $vlan = none; then
753     flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
754   else
755     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))"
756   fi
757
758   echo "----------------------------------------------------------------------"
759   echo "in_port=$in_port vlan=$vlan pcp=$pcp"
760
761   AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
762   actual=`tail -1 stdout | sed 's/Datapath actions: //'`
763
764   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
765   mv stdout expout
766   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
767 done
768
769 OVS_VSWITCHD_STOP
770 AT_CLEANUP
771
772 AT_SETUP([ofproto-dpif - fragment handling])
773 OVS_VSWITCHD_START
774 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
775 AT_DATA([flows.txt], [dnl
776 priority=75 tcp ip_frag=no    tp_dst=80 actions=output:1
777 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
778 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
779 priority=50 tcp ip_frag=no              actions=output:4
780 priority=50 tcp ip_frag=first           actions=output:5
781 priority=50 tcp ip_frag=later           actions=output:6
782 ])
783 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
784
785 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"
786 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
787 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
788 later_flow="$base_flow,frag=later)"
789
790     # mode    no  first  later
791 for tuple in \
792     'normal    1     5      6' \
793     'drop      1  drop   drop' \
794     'nx-match  1     2      6'
795 do
796   set $tuple
797   mode=$1
798   no=$2
799   first=$3
800   later=$4
801
802   AT_CHECK([ovs-ofctl set-frags br0 $mode])
803   for type in no first later; do
804     eval flow=\$${type}_flow exp_output=\$$type
805     AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
806     AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
807 ])
808   done
809 done
810 OVS_VSWITCHD_STOP
811 AT_CLEANUP
812
813 AT_SETUP([ofproto-dpif - exit])
814 OVS_VSWITCHD_START
815 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
816 AT_DATA([flows.txt], [dnl
817 in_port=1 actions=output:10,exit,output:11
818 in_port=2 actions=output:12,resubmit:1,output:12
819 in_port=3 actions=output:13,resubmit:2,output:14
820 ])
821 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
822 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])
823 AT_CHECK([tail -1 stdout], [0],
824   [Datapath actions: 10
825 ])
826 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])
827 AT_CHECK([tail -1 stdout], [0],
828   [Datapath actions: 12,10
829 ])
830 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])
831 AT_CHECK([tail -1 stdout], [0],
832   [Datapath actions: 13,12,10
833 ])
834 OVS_VSWITCHD_STOP
835 AT_CLEANUP
836
837
838 AT_SETUP([ofproto-dpif - mirroring, select_all])
839 OVS_VSWITCHD_START
840 ADD_OF_PORTS([br0], 1, 2, 3)
841 ovs-vsctl \
842         set Bridge br0 mirrors=@m --\
843         --id=@p3 get Port p3 --\
844         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
845
846 AT_DATA([flows.txt], [dnl
847 in_port=1 actions=output:2
848 in_port=2 actions=output:1
849 ])
850 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
851
852 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)"
853 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
854 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
855   [Datapath actions: 2,3
856 ])
857
858 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)"
859 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
860 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
861   [Datapath actions: 1,3
862 ])
863
864 OVS_VSWITCHD_STOP
865 AT_CLEANUP
866
867
868 AT_SETUP([ofproto-dpif - mirroring, select_src])
869 OVS_VSWITCHD_START
870 ADD_OF_PORTS([br0], 1, 2, 3)
871 ovs-vsctl \
872         set Bridge br0 mirrors=@m --\
873         --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
874         --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
875
876 AT_DATA([flows.txt], [dnl
877 in_port=1 actions=output:2
878 in_port=2 actions=output:1
879 ])
880 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
881
882 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)"
883 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
884 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
885   [Datapath actions: 2,3
886 ])
887
888 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)"
889 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
890 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
891   [Datapath actions: 1
892 ])
893 OVS_VSWITCHD_STOP
894 AT_CLEANUP
895
896 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
897 OVS_VSWITCHD_START
898 ADD_OF_PORTS([br0], 1, 2)
899 ovs-vsctl \
900         set Bridge br0 mirrors=@m --\
901         --id=@p2 get Port p2 --\
902         --id=@m create Mirror name=mymirror select_all=true output_port=@p2
903
904 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
905
906 # "in_port" defaults to OFPP_NONE if it's not specified.
907 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"
908 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
909 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
910   [Datapath actions: 1,2
911 ])
912
913 OVS_VSWITCHD_STOP
914 AT_CLEANUP
915
916
917 AT_SETUP([ofproto-dpif - mirroring, select_dst])
918 OVS_VSWITCHD_START
919 ADD_OF_PORTS([br0], 1, 2, 3)
920 ovs-vsctl \
921         set Bridge br0 mirrors=@m --\
922         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
923         --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
924
925 AT_DATA([flows.txt], [dnl
926 in_port=1 actions=output:2
927 in_port=2 actions=output:1
928 ])
929 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
930
931 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)"
932 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
933 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
934   [Datapath actions: 2,3
935 ])
936
937 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)"
938 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
939 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
940   [Datapath actions: 1
941 ])
942
943 OVS_VSWITCHD_STOP
944 AT_CLEANUP
945
946
947 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
948 OVS_VSWITCHD_START
949 ADD_OF_PORTS([br0], 1, 2, 3)
950 ovs-vsctl \
951         set Bridge br0 mirrors=@m --\
952         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
953         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
954
955 AT_DATA([flows.txt], [dnl
956 in_port=1, actions=output:2
957 ])
958 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
959
960 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)"
961 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
962 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
963   [Datapath actions: 2
964 ])
965
966 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))"
967 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
968 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
969   [Datapath actions: 2
970 ])
971
972 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))"
973 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
974 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
975   [Datapath actions: 2,3
976 ])
977
978 OVS_VSWITCHD_STOP
979 AT_CLEANUP
980
981
982 AT_SETUP([ofproto-dpif - mirroring, output_port])
983 OVS_VSWITCHD_START
984 ADD_OF_PORTS([br0], 1, 2, 3)
985 ovs-vsctl \
986         set Bridge br0 mirrors=@m --\
987         --id=@p3 get Port p3 --\
988         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
989
990 AT_DATA([flows.txt], [dnl
991 in_port=1 actions=mod_vlan_vid:17,output:2
992 in_port=2 actions=output:1
993 ])
994 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
995
996 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)"
997 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
998 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
999   [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1000 ])
1001
1002 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)"
1003 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1004 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1005   [Datapath actions: 1,3
1006 ])
1007
1008 OVS_VSWITCHD_STOP
1009 AT_CLEANUP
1010
1011 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1012 OVS_VSWITCHD_START
1013 ADD_OF_PORTS([br0], 1, 2)
1014 ovs-vsctl \
1015         set Bridge br0 mirrors=@m --\
1016         --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1017
1018 AT_DATA([flows.txt], [dnl
1019 in_port=1 actions=output:2
1020 in_port=2 actions=mod_vlan_vid:17,output:1
1021 ])
1022 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1023
1024 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)"
1025 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1026 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1027
1028 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1029 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1030 mv stdout expout
1031 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1032
1033 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)"
1034 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1035 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1036
1037 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1038 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1039 mv stdout expout
1040 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1041
1042 OVS_VSWITCHD_STOP
1043 AT_CLEANUP
1044
1045 m4_define([OFPROTO_TRACE],
1046   [flow="$2"
1047    AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1048    actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1049    expected="$4"
1050    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1051      [0], [stdout])
1052    mv stdout expout
1053    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1054      [0], [expout])])
1055
1056 AT_SETUP([ofproto-dpif - MAC learning])
1057 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1058 ADD_OF_PORTS([br0], 1, 2, 3)
1059
1060 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)'
1061
1062 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1063 OFPROTO_TRACE(
1064   [br0],
1065   [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1066   [-generate],
1067   [1,2,100])
1068
1069 # Check for the MAC learning entry.
1070 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1071  port  VLAN  MAC                Age
1072     3     0  50:54:00:00:00:05    ?
1073 ])
1074
1075 # Trace a packet arrival destined for the learned MAC.
1076 # (This will also learn a MAC.)
1077 OFPROTO_TRACE(
1078   [br0],
1079   [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1080   [-generate],
1081   [3])
1082
1083 # Check for both MAC learning entries.
1084 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1085  port  VLAN  MAC                Age
1086     3     0  50:54:00:00:00:05    ?
1087     1     0  50:54:00:00:00:06    ?
1088 ])
1089
1090 # Trace a packet arrival that updates the first learned MAC entry.
1091 OFPROTO_TRACE(
1092   [br0],
1093   [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1094   [-generate],
1095   [1,3,100])
1096
1097 # Check that the MAC learning entry was updated.
1098 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1099  port  VLAN  MAC                Age
1100     1     0  50:54:00:00:00:06    ?
1101     2     0  50:54:00:00:00:05    ?
1102 ])
1103
1104 # Add another bridge.
1105 AT_CHECK(
1106   [ovs-vsctl \
1107      -- add-br br1 \
1108      -- set bridge br1 datapath-type=dummy \
1109      -- add-port br1 p4 -- set interface p4 type=dummy \
1110      -- add-port br1 p5 -- set interface p5 type=dummy])
1111
1112 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1113 OFPROTO_TRACE(
1114   [br1],
1115   [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1116   [-generate],
1117   [5,101])
1118 OFPROTO_TRACE(
1119   [br1],
1120   [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1121   [-generate],
1122   [4,101])
1123
1124 # Check that the MAC learning entries were added.
1125 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1126  port  VLAN  MAC                Age
1127     4     0  50:54:00:00:00:06    ?
1128     5     0  50:54:00:00:00:07    ?
1129 ])
1130
1131 # Delete port p1 and see that its MAC learning entry disappeared, and
1132 # that the MAC learning entry for the same MAC was also deleted from br1.
1133 AT_CHECK([ovs-vsctl del-port p1])
1134 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1135  port  VLAN  MAC                Age
1136     2     0  50:54:00:00:00:05    ?
1137 ])
1138 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1139  port  VLAN  MAC                Age
1140     5     0  50:54:00:00:00:07    ?
1141 ])
1142
1143 OVS_VSWITCHD_STOP
1144 AT_CLEANUP
1145
1146 AT_SETUP([ofproto-dpif - MAC table overflow])
1147 OVS_VSWITCHD_START(
1148   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1149    add-port br0 p1 -- set Interface p1 type=dummy -- \
1150    add-port br0 p2 -- set Interface p2 type=dummy -- \
1151    add-port br0 p3 -- set Interface p3 type=dummy])
1152
1153 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)'
1154
1155 AT_CHECK([ovs-appctl time/stop])
1156
1157 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1158 for i in 0 1 2 3 4 5 6 7 8 9; do
1159     OFPROTO_TRACE(
1160       [br0],
1161       [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1162       [-generate],
1163       [1,2,100])
1164     ovs-appctl time/warp 1000
1165 done
1166
1167 # Check for the MAC learning entries.
1168 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1169   [0], [dnl
1170     3     0  50:54:00:00:00:00
1171     3     0  50:54:00:00:00:01
1172     3     0  50:54:00:00:00:02
1173     3     0  50:54:00:00:00:03
1174     3     0  50:54:00:00:00:04
1175     3     0  50:54:00:00:00:05
1176     3     0  50:54:00:00:00:06
1177     3     0  50:54:00:00:00:07
1178     3     0  50:54:00:00:00:08
1179     3     0  50:54:00:00:00:09
1180  port  VLAN  MAC                Age
1181 ])
1182
1183 # Trace another ARP packet on another MAC.
1184 OFPROTO_TRACE(
1185   [br0],
1186   [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1187   [-generate],
1188   [1,2,100])
1189
1190 # Check that the new one chased the oldest one out of the table.
1191 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1192   [0], [dnl
1193     3     0  50:54:00:00:00:01    ?
1194     3     0  50:54:00:00:00:02    ?
1195     3     0  50:54:00:00:00:03    ?
1196     3     0  50:54:00:00:00:04    ?
1197     3     0  50:54:00:00:00:05    ?
1198     3     0  50:54:00:00:00:06    ?
1199     3     0  50:54:00:00:00:07    ?
1200     3     0  50:54:00:00:00:08    ?
1201     3     0  50:54:00:00:00:09    ?
1202     3     0  50:54:00:00:00:10    ?
1203  port  VLAN  MAC                Age
1204 ])
1205 OVS_VSWITCHD_STOP
1206 AT_CLEANUP
1207
1208 dnl Test that basic NetFlow reports flow statistics correctly:
1209 dnl - The initial packet of a flow are correctly accounted.
1210 dnl - Later packets within a flow are correctly accounted.
1211 dnl - Flow actions changing (in this case, due to MAC learning)
1212 dnl   cause a record to be sent.
1213 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1214
1215 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1216 NETFLOW_PORT=`cat stdout`
1217
1218 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1219 ADD_OF_PORTS([br0], 1, 2)
1220 ovs-vsctl \
1221    set Bridge br0 netflow=@nf -- \
1222    --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1223      engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1224
1225 ON_EXIT([kill `cat test-netflow.pid`])
1226 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])
1227 AT_CAPTURE_FILE([netflow.log])
1228
1229 for delay in 1000 30000; do
1230     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)'
1231     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)'
1232
1233     ovs-appctl time/warp $delay
1234 done
1235
1236 sleep 1
1237 OVS_VSWITCHD_STOP
1238 ovs-appctl -t test-netflow exit
1239
1240 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1241 s/, now [0-9.]*//
1242 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1243 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1244 ' netflow.log | sort]], [0],
1245   [
1246 header: v5, seq 0, engine 2,1
1247 header: v5, seq 1, engine 2,1
1248 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1249 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1250 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1251 ])
1252 AT_CLEANUP
1253
1254 dnl Test that basic NetFlow reports active expirations correctly.
1255 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1256
1257 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1258 NETFLOW_PORT=`cat stdout`
1259
1260 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1261 ADD_OF_PORTS([br0], 1, 2)
1262 ovs-vsctl \
1263    set Bridge br0 netflow=@nf -- \
1264    --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1265      engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1266
1267 ON_EXIT([kill `cat test-netflow.pid`])
1268 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
1269
1270 AT_CHECK([ovs-appctl time/stop])
1271 n=1
1272 while test $n -le 60; do
1273     n=`expr $n + 1`
1274
1275     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)'
1276     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)'
1277
1278     ovs-appctl time/warp 1000
1279 done
1280
1281 ovs-appctl time/warp 10000
1282
1283 sleep 1
1284 OVS_VSWITCHD_STOP
1285 ovs-appctl -t test-netflow exit
1286
1287 # Count the number of reported packets:
1288 # - From source to destination before MAC learning kicks in (just one).
1289 # - From source to destination after that.
1290 # - From destination to source.
1291 n_learn=0
1292 n_in=0
1293 n_out=0
1294 n_other=0
1295 n_recs=0
1296 none=0
1297 while read line; do
1298     pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1299     case $pkts in
1300          [[0-9]]*) ;;
1301          *) continue ;;
1302     esac
1303
1304     case $line in
1305         "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1306             counter=n_learn
1307             ;;
1308         "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1309             counter=n_in
1310             ;;
1311         "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1312             counter=n_out
1313             ;;
1314         *)
1315             counter=n_other
1316             ;;
1317     esac
1318     eval $counter=\`expr \$$counter + \$pkts\`
1319     n_recs=`expr $n_recs + 1`
1320 done < netflow.log
1321
1322 # There should be exactly 1 MAC learning packet,
1323 # exactly 59 other packets in that direction,
1324 # and exactly 60 packets in the other direction.
1325 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1326 ])
1327
1328 # There should be 1 expiration for MAC learning,
1329 # at least 5 active and a final expiration in one direction,
1330 # and at least 5 active and a final expiration in the other direction.
1331 echo $n_recs
1332 AT_CHECK([test $n_recs -ge 13])
1333
1334 AT_CLEANUP
1335
1336 AT_SETUP([idle_age and hard_age increase over time])
1337 OVS_VSWITCHD_START
1338
1339 # get_ages DURATION HARD IDLE
1340 #
1341 # Fetch the flow duration, hard age, and idle age into the variables
1342 # whose names are given as arguments.  Rounds DURATION down to the
1343 # nearest integer.  If hard_age doesn't appear in the output, sets
1344 # HARD to "none".  If idle_age doesn't appear in the output, sets IDLE
1345 # to 0.
1346 get_ages () {
1347     AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1348
1349     duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1350     AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1351     AS_VAR_COPY([$1], [duration])
1352
1353     hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1354     if test X"$hard" = X; then
1355         hard=none
1356     else
1357         AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1358     fi
1359     AS_VAR_COPY([$2], [hard])
1360
1361     idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1362     if test X"$idle" = X; then
1363         idle=0
1364     else
1365         AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1366     fi
1367     AS_VAR_COPY([$3], [idle])
1368 }
1369
1370 # Add a flow and get its initial hard and idle age.
1371 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1372 get_ages duration1 hard1 idle1
1373
1374 # Warp time forward by 10 seconds, then modify the flow's actions.
1375 ovs-appctl time/warp 10000
1376 get_ages duration2 hard2 idle2
1377 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1378
1379 # Warp time forward by 10 seconds.
1380 ovs-appctl time/warp 10000
1381 get_ages duration3 hard3 idle3
1382
1383 # Warp time forward 10 more seconds, then pass some packets through the flow,
1384 # then warp forward a few more times because idle times are only updated
1385 # occasionally.
1386 ovs-appctl time/warp 10000
1387 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)'
1388 ovs-appctl time/warp 1000
1389 ovs-appctl time/warp 1000
1390 ovs-appctl time/warp 1000
1391 get_ages duration4 hard4 idle4
1392
1393 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1394 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1395 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1396
1397 # Duration should increase steadily over time.
1398 AT_CHECK([test $duration1 -lt $duration2])
1399 AT_CHECK([test $duration2 -lt $duration3])
1400 AT_CHECK([test $duration3 -lt $duration4])
1401
1402 # Hard age should be "none" initially because it's the same as flow_duration,
1403 # then it should increase.
1404 AT_CHECK([test $hard1 = none])
1405 AT_CHECK([test $hard2 = none])
1406 AT_CHECK([test $hard3 != none])
1407 AT_CHECK([test $hard4 != none])
1408 AT_CHECK([test $hard3 -lt $hard4])
1409
1410 # Idle age should increase from 1 to 2 to 3, then decrease.
1411 AT_CHECK([test $idle1 -lt $idle2])
1412 AT_CHECK([test $idle2 -lt $idle3])
1413 AT_CHECK([test $idle3 -gt $idle4])
1414
1415 # Check some invariant relationships.
1416 AT_CHECK([test $duration1 = $idle1])
1417 AT_CHECK([test $duration2 = $idle2])
1418 AT_CHECK([test $duration3 = $idle3])
1419 AT_CHECK([test $idle3 -gt $hard3])
1420 AT_CHECK([test $idle4 -lt $hard4])
1421 AT_CHECK([test $hard4 -lt $duration4])
1422
1423 OVS_VSWITCHD_STOP
1424 AT_CLEANUP
1425
1426 AT_SETUP([ofproto-dpif - fin_timeout])
1427 OVS_VSWITCHD_START
1428 AT_DATA([flows.txt], [dnl
1429 in_port=1 actions=output:2
1430 in_port=2 actions=mod_vlan_vid:17,output:1
1431 ])
1432 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1433 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1434 [NXST_FLOW reply:
1435  idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1436 ])
1437 # Check that a TCP SYN packet does not change the timeout.  (Because
1438 # flow stats updates are mainly what implements the fin_timeout
1439 # feature, we warp forward a couple of times to ensure that flow stats
1440 # run before re-checking the flow table.)
1441 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1442 ])
1443 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1444 warped
1445 ])
1446 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1447 [NXST_FLOW reply:
1448  n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1449 ])
1450 # Check that a TCP FIN packet does change the timeout.
1451 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1452 ])
1453 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1454 warped
1455 ])
1456 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1457 [NXST_FLOW reply:
1458  n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1459 ])
1460 OVS_VSWITCHD_STOP
1461 AT_CLEANUP
1462
1463 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1464 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1465 ADD_OF_PORTS([br0], [1], [2])
1466 ADD_OF_PORTS([br1], [3])
1467
1468 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1469 dummy@br0
1470 dummy@br1
1471 ])
1472 OVS_VSWITCHD_STOP
1473 AT_CLEANUP
1474
1475 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1476 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1477 ADD_OF_PORTS([br0], [1], [2])
1478 ADD_OF_PORTS([br1], [3])
1479
1480 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1481 br0 (dummy@ovs-dummy):
1482         lookups: hit:0 missed:0
1483         flows: 0
1484         br0 65534/100: (dummy)
1485         p1 1/1: (dummy)
1486         p2 2/2: (dummy)
1487 br1 (dummy@ovs-dummy):
1488         lookups: hit:0 missed:0
1489         flows: 0
1490         br1 65534/101: (dummy)
1491         p3 3/3: (dummy)
1492 ])
1493
1494 AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
1495 br0 (dummy@ovs-dummy):
1496         lookups: hit:0 missed:0
1497         flows: 0
1498         br0 65534/100: (dummy)
1499         p1 1/1: (dummy)
1500         p2 2/2: (dummy)
1501 ])
1502 OVS_VSWITCHD_STOP
1503 AT_CLEANUP
1504
1505 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1506 OVS_VSWITCHD_START([add-br br1 -- \
1507                     set bridge br1 datapath-type=dummy fail-mode=secure])
1508 ADD_OF_PORTS([br0], [1], [2])
1509 ADD_OF_PORTS([br1], [3])
1510
1511 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
1512 ])
1513 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
1514 ])
1515 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
1516 ])
1517
1518 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1519 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))
1520 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))
1521 ])
1522
1523 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1524 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))
1525 ])
1526
1527 OVS_VSWITCHD_STOP
1528 AT_CLEANUP
1529
1530 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1531 OVS_VSWITCHD_START([add-br br1 -- \
1532                     set bridge br1 datapath-type=dummy fail-mode=secure])
1533 ADD_OF_PORTS([br0], [1], [2])
1534 ADD_OF_PORTS([br1], [3])
1535
1536 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
1537 ])
1538 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
1539 ])
1540 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
1541 ])
1542
1543 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1544 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))
1545 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))
1546 ])
1547
1548 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1549 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))
1550 ])
1551
1552 AT_CHECK([ovs-appctl dpif/del-flows br0])
1553 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1554 ])
1555
1556 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1557 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))
1558 ])
1559
1560 OVS_VSWITCHD_STOP
1561 AT_CLEANUP
1562
1563 AT_SETUP([ofproto-dpif - patch ports])
1564 OVS_VSWITCHD_START([add-br br1 \
1565 -- set bridge br1 datapath-type=dummy fail-mode=secure \
1566 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
1567 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
1568
1569 ADD_OF_PORTS([br0], [2])
1570 ADD_OF_PORTS([br1], [3])
1571
1572 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1573 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1574
1575 for i in $(seq 1 10); do
1576     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)'
1577 done
1578
1579 for i in $(seq 1 5); do
1580     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)'
1581 done
1582
1583 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1584 warped
1585 ])
1586
1587 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1588 br0 (dummy@ovs-dummy):
1589         lookups: hit:9 missed:1
1590         flows: 1
1591         br0 65534/100: (dummy)
1592         p2 2/2: (dummy)
1593         pbr0 1/none: (patch: peer=pbr1)
1594 br1 (dummy@ovs-dummy):
1595         lookups: hit:4 missed:1
1596         flows: 1
1597         br1 65534/101: (dummy)
1598         p3 3/3: (dummy)
1599         pbr1 1/none: (patch: peer=pbr0)
1600 ])
1601
1602 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1603 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
1604 ]),
1605 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1606 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
1607 ])
1608
1609 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1610 OFPST_PORT reply (xid=0x4): 1 ports
1611   port  1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
1612            tx pkts=10, bytes=600, drop=0, errs=0, coll=0
1613 ])
1614
1615 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
1616 OFPST_PORT reply (xid=0x4): 1 ports
1617   port  1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
1618            tx pkts=5, bytes=300, drop=0, errs=0, coll=0
1619 ])
1620
1621 OVS_VSWITCHD_STOP
1622 AT_CLEANUP