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