1 AT_BANNER([ofproto-dpif])
3 AT_SETUP([ofproto-dpif - resubmit])
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)
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
23 AT_SETUP([ofproto-dpif - goto table])
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
37 AT_SETUP([ofproto-dpif - write actions])
39 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
40 AT_DATA([flows.txt], [dnl
41 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
42 table=1 ip actions=write_actions(output(13)),goto_table(2)
43 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
45 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
46 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])
47 AT_CHECK([tail -1 stdout], [0],
48 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11,set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),13
53 AT_SETUP([ofproto-dpif - clear actions])
55 ADD_OF_PORTS([br0], [1], [10], [11], [12])
56 AT_DATA([flows.txt], [dnl
57 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
58 table=1 ip actions=set_field:192.168.3.91->ip_src,output(11),clear_actions
60 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
61 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])
62 AT_CHECK([tail -1 stdout], [0],
63 [Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
68 AT_SETUP([ofproto-dpif - all group in action list])
70 ADD_OF_PORTS([br0], [1], [10], [11])
71 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
72 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
73 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])
74 AT_CHECK([tail -1 stdout], [0],
75 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
80 AT_SETUP([ofproto-dpif - indirect group in action list])
82 ADD_OF_PORTS([br0], [1], [10])
83 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
84 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
85 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])
86 AT_CHECK([tail -1 stdout], [0],
92 AT_SETUP([ofproto-dpif - all group in action set])
94 ADD_OF_PORTS([br0], [1], [10], [11])
95 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
96 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
97 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])
98 AT_CHECK([tail -1 stdout], [0],
99 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
104 AT_SETUP([ofproto-dpif - indirect group in action set])
106 ADD_OF_PORTS([br0], [1], [10])
107 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
108 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
109 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])
110 AT_CHECK([tail -1 stdout], [0],
111 [Datapath actions: 10
116 AT_SETUP([ofproto-dpif - select group])
118 ADD_OF_PORTS([br0], [1], [10], [11])
119 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
120 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
121 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,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])
122 AT_CHECK([tail -1 stdout], [0],
123 [Datapath actions: 10
128 AT_SETUP([ofproto-dpif - select group with watch port])
130 ADD_OF_PORTS([br0], [1], [10], [11])
131 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
132 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
133 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,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])
134 AT_CHECK([tail -1 stdout], [0],
135 [Datapath actions: 11
140 AT_SETUP([ofproto-dpif - fast failover group])
142 ADD_OF_PORTS([br0], [1], [10], [11])
143 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=ff,bucket=watch_port:10,output:10,bucket=watch_port:11,output:11'])
144 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
145 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])
146 AT_CHECK([tail -1 stdout], [0],
147 [Datapath actions: drop
152 AT_SETUP([ofproto-dpif - registers])
154 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
155 AT_DATA([flows.txt], [dnl
156 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
157 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
158 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
159 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
161 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
162 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
163 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
164 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
165 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
166 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
167 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
168 in_port=9,reg0=0xdeadbeef actions=output:20
169 in_port=10,reg1=0xdeadbeef actions=output:21
170 in_port=11,reg2=0xeef22dea actions=output:22
172 dnl Sanilty check all registers
173 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
174 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
175 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
176 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
179 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
180 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])
181 AT_CHECK([tail -1 stdout], [0],
182 [Datapath actions: 20,21,22,33
187 AT_SETUP([ofproto-dpif - push-pop])
189 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
190 AT_DATA([flows.txt], [dnl
191 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
192 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
193 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
194 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
195 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
198 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
199 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])
200 AT_CHECK([tail -1 stdout], [0],
201 [Datapath actions: 33,22,21,20
206 AT_SETUP([ofproto-dpif - output])
208 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
209 AT_DATA([flows.txt], [dnl
210 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
211 in_port=2 actions=output:9
212 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
213 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
214 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
215 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
216 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
217 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
219 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
220 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])
221 AT_CHECK([tail -1 stdout], [0],
222 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
227 AT_SETUP([ofproto-dpif - dec_ttl])
229 ADD_OF_PORTS([br0], [1], [2], [3], [4])
230 AT_DATA([flows.txt], [dnl
231 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
232 table=1 in_port=1 action=dec_ttl,output:3
234 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
235 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])
236 AT_CHECK([tail -3 stdout], [0],
237 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
238 This flow is handled by the userspace slow path because it:
239 - Sends "packet-in" messages to the OpenFlow controller.
241 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])
242 AT_CHECK([tail -1 stdout], [0],
243 [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
245 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])
246 AT_CHECK([tail -1 stdout], [0],
247 [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
250 AT_CAPTURE_FILE([ofctl_monitor.log])
251 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
252 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])
253 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
254 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
255 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
256 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
262 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
264 ADD_OF_PORTS([br0], [1], [2])
266 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
268 # "in_port" defaults to OFPP_NONE if it's not specified.
269 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"
270 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
271 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
280 AT_SETUP([ofproto-dpif - DSCP])
281 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
282 ADD_OF_PORTS([br0], [9])
283 AT_DATA([flows.txt], [dnl
284 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
286 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
287 AT_CHECK([ovs-vsctl -- \
288 set Port p1 qos=@newqos --\
289 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
290 --id=@q1 create Queue dscp=1 --\
291 --id=@q2 create Queue dscp=2], [0], [ignore])
292 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])
293 AT_CHECK([tail -1 stdout], [0],
294 [Datapath actions: dnl
296 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
297 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
299 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
300 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
301 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
307 AT_SETUP([ofproto-dpif - output/flood flags])
309 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
311 AT_DATA([flows.txt], [dnl
312 in_port=local actions=local,flood
313 in_port=1 actions=flood
314 in_port=2 actions=all
315 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
316 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
318 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
319 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
320 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
322 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])
323 AT_CHECK([tail -1 stdout \
324 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
332 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])
333 AT_CHECK([tail -1 stdout \
334 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
342 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])
343 AT_CHECK([tail -1 stdout \
344 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
353 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])
354 AT_CHECK([tail -1 stdout], [0],
355 [Datapath actions: 100,1,2,4,6,7
358 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])
359 AT_CHECK([tail -1 stdout], [0],
360 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
365 AT_SETUP([ofproto-dpif - controller])
366 OVS_VSWITCHD_START([dnl
367 add-port br0 p1 -- set Interface p1 type=dummy
369 ON_EXIT([kill `cat ovs-ofctl.pid`])
371 AT_CAPTURE_FILE([ofctl_monitor.log])
372 AT_DATA([flows.txt], [dnl
373 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
374 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
375 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
377 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
378 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)
379 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)
380 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
381 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)
382 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
383 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
384 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
385 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
386 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
387 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
388 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
389 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
390 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
391 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
392 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
393 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
394 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
395 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
396 cookie=0xd dl_src=80:88:88:88:88:88 arp actions=load:2->OXM_OF_ARP_OP[[]],controller,load:0xc0a88001->OXM_OF_ARP_SPA[[]],controller,load:0x404444444441->OXM_OF_ARP_THA[[]],controller
398 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
401 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
404 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),tcp_flags(0x010)'
406 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
407 ovs-appctl -t ovs-ofctl exit
409 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
410 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
411 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_flags=0x010 tcp_csum:0
413 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
414 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_flags=0x010 tcp_csum:0
416 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
417 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_flags=0x010 tcp_csum:0
420 dnl Singleton controller action.
421 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
424 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),tcp_flags(0x002)'
426 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
427 ovs-appctl -t ovs-ofctl exit
429 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
430 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
431 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_flags=0x002 tcp_csum:0
433 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
434 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_flags=0x002 tcp_csum:0
436 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
437 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_flags=0x002 tcp_csum:0
440 dnl Modified controller action.
441 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
444 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),tcp_flags(0x001)'
446 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
447 ovs-appctl -t ovs-ofctl exit
449 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
450 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
451 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_flags=0x001 tcp_csum:0
453 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
454 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_flags=0x001 tcp_csum:0
456 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
457 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_flags=0x001 tcp_csum:0
460 dnl Modified VLAN controller action.
461 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
464 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)'
466 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
467 ovs-appctl -t ovs-ofctl exit
469 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
470 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
471 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_flags=0x000 tcp_csum:0
473 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
474 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_flags=0x000 tcp_csum:0
476 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
477 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_flags=0x000 tcp_csum:0
480 dnl Modified MPLS controller action.
481 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
484 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)'
486 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
487 ovs-appctl -t ovs-ofctl exit
489 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
490 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
491 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
493 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
494 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
496 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
497 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
500 dnl Modified MPLS controller action.
501 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
504 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)'
506 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
507 ovs-appctl -t ovs-ofctl exit
509 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
510 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
511 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_flags=0x000 tcp_csum:0
513 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
514 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_flags=0x000 tcp_csum:0
516 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
517 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_flags=0x000 tcp_csum:0
520 dnl Modified MPLS controller action.
521 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
523 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)
526 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)'
529 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
530 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
531 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
532 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
534 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
535 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
537 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
538 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
541 dnl Modified MPLS controller action.
542 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
545 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))'
547 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
548 ovs-appctl -t ovs-ofctl exit
550 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
551 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
552 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
554 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
555 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
557 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
558 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
561 dnl Modified MPLS controller action.
562 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
565 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)'
567 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
568 ovs-appctl -t ovs-ofctl exit
570 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
571 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
572 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
574 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
575 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
577 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
578 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
581 dnl Modified MPLS controller action.
582 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
585 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)'
587 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
588 ovs-appctl -t ovs-ofctl exit
590 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
591 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
592 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
594 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
595 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
597 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
598 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
601 dnl Modified MPLS controller action.
602 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
605 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)'
607 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
608 ovs-appctl -t ovs-ofctl exit
610 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
611 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
612 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
614 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
615 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
617 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
618 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
621 dnl Modified MPLS controller action.
622 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
625 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)'
627 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
628 ovs-appctl -t ovs-ofctl exit
630 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
631 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
632 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
634 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
635 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
637 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
638 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
641 dnl Modified MPLS actions.
642 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
645 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)'
647 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
648 ovs-appctl -t ovs-ofctl exit
650 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
651 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
652 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
654 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
655 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
657 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
658 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
661 dnl Modified MPLS ipv6 controller action.
662 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
665 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)'
667 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
668 ovs-appctl -t ovs-ofctl exit
670 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
671 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
672 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
674 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
675 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
677 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
678 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
682 dnl Modified MPLS pop action.
683 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
684 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)
685 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
687 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
690 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'
693 # 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)'
695 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
696 ovs-appctl -t ovs-ofctl exit
698 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
699 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
700 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_flags=0x000 tcp_csum:7744
702 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
703 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_flags=0x000 tcp_csum:7744
705 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
706 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_flags=0x000 tcp_csum:7744
710 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
713 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),tcp_flags(0x001)'
715 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
716 ovs-appctl -t ovs-ofctl exit
718 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
719 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
720 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_flags=0x001 tcp_csum:0
722 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
723 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_flags=0x001 tcp_csum:0
725 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)
726 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_flags=0x001 tcp_csum:0
728 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)
729 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_flags=0x001 tcp_csum:0
731 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)
732 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_flags=0x001 tcp_csum:1a03
734 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)
735 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_flags=0x001 tcp_csum:3205
737 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)
738 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_flags=0x001 tcp_csum:31b8
740 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)
741 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_flags=0x001 tcp_csum:316d
743 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)
744 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_flags=0x001 tcp_csum:316d
748 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
751 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'
753 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
754 ovs-appctl -t ovs-ofctl exit
756 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
757 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
758 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
760 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
761 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
763 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)
764 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
766 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)
767 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
769 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)
770 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
772 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)
773 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
775 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)
776 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
778 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)
779 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
781 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)
782 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
785 dnl Modified ARP controller action.
786 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
789 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,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:05,tha=00:00:00:00:00:00)'
792 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
793 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
794 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
795 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
796 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
797 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
798 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
799 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
800 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
801 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
802 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
803 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
804 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
805 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
806 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
807 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
808 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
809 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
810 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
811 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
814 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
817 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
820 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'
823 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
824 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
825 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
826 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
828 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
829 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
831 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)
832 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
834 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)
835 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
837 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)
838 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
840 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)
841 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
843 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)
844 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
846 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)
847 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
849 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)
850 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
853 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
854 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
855 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
856 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)
857 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)
858 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)
859 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)
860 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)
861 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
862 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
863 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
864 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
865 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
866 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
867 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
868 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
869 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
870 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
871 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
872 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
873 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
874 cookie=0xd, n_packets=3, n_bytes=180, arp,dl_src=80:88:88:88:88:88 actions=load:0x2->NXM_OF_ARP_OP[[]],CONTROLLER:65535,load:0xc0a88001->NXM_OF_ARP_SPA[[]],CONTROLLER:65535,load:0x404444444441->NXM_NX_ARP_THA[[]],CONTROLLER:65535
875 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
876 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
883 AT_SETUP([ofproto-dpif - ARP modification slow-path])
885 ADD_OF_PORTS([br0], [1], [2])
887 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
888 ovs-ofctl add-flow br0 'in_port=1,arp actions=load:2->OXM_OF_ARP_OP[[]],2,load:0xc0a88001->OXM_OF_ARP_SPA[[]],2,load:0x404444444441->OXM_OF_ARP_THA[[]],2'
890 # Input some packets that should follow the arp modification slow-path.
892 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,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:05,tha=00:00:00:00:00:00)'
894 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
896 # Check the packets that were output.
897 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
898 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
899 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
900 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
901 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
902 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
903 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
904 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
905 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
906 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
909 # Check that each of the packets actually passed through the slow-path.
910 AT_CHECK([ovs-appctl coverage/show], [0], [stdout])
911 AT_CHECK([sed -n 's/[[ ]]\{2,\}/ /g
912 s/^dpif_execute_with_help.*total: //p' stdout], [0], [3
918 AT_SETUP([ofproto-dpif - VLAN handling])
920 [set Bridge br0 fail-mode=standalone -- \
921 add-port br0 p1 trunks=10,12 -- \
922 add-port br0 p2 tag=10 -- \
923 add-port br0 p3 tag=12 \
924 other-config:priority-tags=true -- \
925 add-port br0 p4 tag=12 -- \
926 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
927 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
928 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
929 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
930 other-config:priority-tags=true -- \
931 set Interface p1 type=dummy -- \
932 set Interface p2 type=dummy -- \
933 set Interface p3 type=dummy -- \
934 set Interface p4 type=dummy -- \
935 set Interface p5 type=dummy -- \
936 set Interface p6 type=dummy -- \
937 set Interface p7 type=dummy -- \
938 set Interface p8 type=dummy --])
940 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
941 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
947 "100 10 0 1,5,6,7,8,pop_vlan,2" \
948 "100 10 1 1,5,6,7,8,pop_vlan,2" \
951 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
952 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
956 "1 10 0 5,6,7,8,100,pop_vlan,2" \
957 "1 10 1 5,6,7,8,100,pop_vlan,2" \
960 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
961 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
962 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
963 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
964 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
971 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
972 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
973 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
980 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
981 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
982 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
989 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
990 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
991 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
992 "5 10 0 1,6,7,8,100,pop_vlan,2" \
993 "5 10 1 1,6,7,8,100,pop_vlan,2" \
996 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
997 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
998 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
999 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1000 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1001 "6 10 0 1,5,7,8,100,pop_vlan,2" \
1002 "6 10 1 1,5,7,8,100,pop_vlan,2" \
1005 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
1006 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1007 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1008 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1009 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1010 "7 10 0 1,5,6,8,100,pop_vlan,2" \
1011 "7 10 1 1,5,6,8,100,pop_vlan,2" \
1014 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
1015 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1016 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1017 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1018 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1019 "8 10 0 1,5,6,7,100,pop_vlan,2" \
1020 "8 10 1 1,5,6,7,100,pop_vlan,2" \
1023 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1024 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1032 if test $vlan = none; then
1033 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1035 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))"
1038 echo "----------------------------------------------------------------------"
1039 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1041 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1042 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1044 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1046 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1052 AT_SETUP([ofproto-dpif - fragment handling])
1054 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
1055 AT_DATA([flows.txt], [dnl
1056 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1057 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1058 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1059 priority=50 tcp ip_frag=no actions=output:4
1060 priority=50 tcp ip_frag=first actions=output:5
1061 priority=50 tcp ip_frag=later actions=output:6
1063 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1065 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"
1066 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1067 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1068 later_flow="$base_flow,frag=later)"
1070 # mode no first later
1073 'drop 1 drop drop' \
1082 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1083 for type in no first later; do
1084 eval flow=\$${type}_flow exp_output=\$$type
1085 printf "\n%s\n" "----$mode $type-----"
1086 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1088 if test $mode = drop && test $type != no; then
1089 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1091 echo "Datapath actions: $exp_output" >> expout
1092 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
1098 AT_SETUP([ofproto-dpif - exit])
1100 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
1101 AT_DATA([flows.txt], [dnl
1102 in_port=1 actions=output:10,exit,output:11
1103 in_port=2 actions=output:12,resubmit:1,output:12
1104 in_port=3 actions=output:13,resubmit:2,output:14
1106 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1107 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])
1108 AT_CHECK([tail -1 stdout], [0],
1109 [Datapath actions: 10
1111 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])
1112 AT_CHECK([tail -1 stdout], [0],
1113 [Datapath actions: 12,10
1115 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])
1116 AT_CHECK([tail -1 stdout], [0],
1117 [Datapath actions: 13,12,10
1123 AT_SETUP([ofproto-dpif - mirroring, select_all])
1125 ADD_OF_PORTS([br0], 1, 2, 3)
1127 set Bridge br0 mirrors=@m --\
1128 --id=@p3 get Port p3 --\
1129 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1131 AT_DATA([flows.txt], [dnl
1132 in_port=1 actions=output:2
1133 in_port=2 actions=output:1
1135 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1137 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)"
1138 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1139 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1140 [Datapath actions: 2,3
1143 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)"
1144 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1145 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1146 [Datapath actions: 1,3
1153 AT_SETUP([ofproto-dpif - mirroring, select_src])
1155 ADD_OF_PORTS([br0], 1, 2, 3)
1157 set Bridge br0 mirrors=@m --\
1158 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
1159 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
1161 AT_DATA([flows.txt], [dnl
1162 in_port=1 actions=output:2
1163 in_port=2 actions=output:1
1165 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1167 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)"
1168 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1169 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1170 [Datapath actions: 2,3
1173 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)"
1174 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1175 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1176 [Datapath actions: 1
1181 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
1183 ADD_OF_PORTS([br0], 1, 2)
1185 set Bridge br0 mirrors=@m --\
1186 --id=@p2 get Port p2 --\
1187 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
1189 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1191 # "in_port" defaults to OFPP_NONE if it's not specified.
1192 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"
1193 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1194 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1195 [Datapath actions: 1,2
1202 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1204 ADD_OF_PORTS([br0], 1, 2, 3)
1206 set Bridge br0 mirrors=@m --\
1207 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1208 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1210 AT_DATA([flows.txt], [dnl
1211 in_port=1 actions=output:2
1212 in_port=2 actions=output:1
1214 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1216 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)"
1217 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1218 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1219 [Datapath actions: 2,3
1222 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)"
1223 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1224 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1225 [Datapath actions: 1
1232 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1234 ADD_OF_PORTS([br0], 1, 2, 3)
1236 set Bridge br0 mirrors=@m --\
1237 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1238 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1240 AT_DATA([flows.txt], [dnl
1241 in_port=1, actions=output:2
1243 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1245 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)"
1246 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1247 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1248 [Datapath actions: 2
1251 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))"
1252 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1253 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1254 [Datapath actions: 2
1257 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))"
1258 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1259 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1260 [Datapath actions: 2,3
1267 AT_SETUP([ofproto-dpif - mirroring, output_port])
1269 ADD_OF_PORTS([br0], 1, 2, 3)
1271 set Bridge br0 mirrors=@m --\
1272 --id=@p3 get Port p3 --\
1273 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1275 AT_DATA([flows.txt], [dnl
1276 in_port=1 actions=mod_vlan_vid:17,output:2
1277 in_port=2 actions=output:1
1279 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1281 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)"
1282 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1283 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1284 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1287 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)"
1288 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1289 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1290 [Datapath actions: 1,3
1296 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1298 ADD_OF_PORTS([br0], 1, 2)
1300 set Bridge br0 mirrors=@m --\
1301 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1303 AT_DATA([flows.txt], [dnl
1304 in_port=1 actions=output:2
1305 in_port=2 actions=mod_vlan_vid:17,output:1
1307 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1309 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)"
1310 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1311 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1313 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1314 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1316 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1318 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)"
1319 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1320 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1322 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1323 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1325 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1330 # Two testcases below are for the ofproto/trace command
1331 # The first one tests all correct syntax:
1332 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1333 # ofproto/trace br_name br_flow [-generate|packet]
1334 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1335 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1336 ADD_OF_PORTS([br0], 1, 2, 3)
1338 AT_DATA([flows.txt], [dnl
1339 in_port=1 actions=output:2
1340 in_port=2 actions=output:1
1342 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1344 odp_flow="in_port(p1)"
1346 # Test command: ofproto/trace odp_flow with in_port as a name.
1347 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1348 AT_CHECK([tail -1 stdout], [0], [dnl
1352 odp_flow="in_port(1)"
1353 # Test command: ofproto/trace odp_flow
1354 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1355 AT_CHECK([tail -1 stdout], [0], [dnl
1359 # Test command: ofproto/trace dp_name odp_flow
1360 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1361 AT_CHECK([tail -1 stdout], [0], [dnl
1364 # Test commmand: ofproto/trace br_name br_flow
1365 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1366 AT_CHECK([tail -1 stdout], [0], [dnl
1370 # Delete the inserted flows
1371 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1372 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1374 # This section beflow tests the [-generate] option
1375 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1376 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"
1378 # Test command: ofproto/trace odp_flow
1379 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1380 # Check for no MAC learning entry
1381 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1385 # Test command: ofproto/trace br_name br_flow
1386 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1387 # Check for no MAC learning entry
1388 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1392 # Test command: ofproto/trace odp_flow -generate
1393 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1394 # Check for the MAC learning entry
1395 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1397 3 0 50:54:00:00:00:05 ?
1400 # Test command: ofproto/trace dp_name odp_flow -generate
1401 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1402 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1403 -generate], [0], [stdout])
1404 # Check for both MAC learning entries
1405 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1407 3 0 50:54:00:00:00:05 ?
1408 1 0 50:54:00:00:00:06 ?
1411 # Test command: ofproto/trace br_name br_flow -generate
1412 AT_CHECK([ovs-appctl ofproto/trace br0 \
1413 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1414 -generate], [0], [stdout])
1415 # Check for both MAC learning entries.
1416 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1418 3 0 50:54:00:00:00:05 ?
1419 1 0 50:54:00:00:00:06 ?
1420 2 0 50:54:00:00:00:07 ?
1423 # This section beflow tests the [packet] option
1424 # The ovs-tcpundump of packets between port1 and port2
1425 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1426 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1428 # Construct the MAC learning table
1429 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1430 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1431 -generate], [0], [stdout])
1433 # Construct the MAC learning table
1434 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1435 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1436 -generate], [0], [stdout])
1438 # Test command: ofproto/trace odp_flow packet
1439 AT_CHECK([ovs-appctl ofproto/trace \
1440 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1441 AT_CHECK([tail -1 stdout], [0], [dnl
1444 AT_CHECK([head -n 3 stdout], [0], [dnl
1446 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
1447 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
1450 # Test command: ofproto/trace dp_name odp_flow packet
1451 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1452 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1453 AT_CHECK([tail -1 stdout], [0], [dnl
1456 AT_CHECK([head -n 3 stdout], [0], [dnl
1458 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
1459 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
1462 # Test command: ofproto/trace br_name br_flow packet
1463 AT_CHECK([ovs-appctl ofproto/trace br0 \
1464 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1465 AT_CHECK([tail -1 stdout], [0], [dnl
1468 AT_CHECK([head -n 2 stdout], [0], [dnl
1469 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
1470 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
1476 # The second test tests the corner cases
1477 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1479 ADD_OF_PORTS([br0], 1, 2)
1482 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1483 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1485 generate="-generate"
1486 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1488 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1494 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1496 AT_CHECK([tail -2 stderr], [0], [dnl
1497 Cannot find the datapath
1498 ovs-appctl: ovs-vswitchd: server returned an error
1501 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1507 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1509 AT_CHECK([tail -2 stderr], [0], [dnl
1510 Cannot find the datapath
1511 ovs-appctl: ovs-vswitchd: server returned an error
1514 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1520 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1522 AT_CHECK([tail -2 stderr], [0], [dnl
1523 Cannot find the datapath
1524 ovs-appctl: ovs-vswitchd: server returned an error
1527 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1533 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1535 AT_CHECK([tail -2 stderr], [0], [dnl
1536 Cannot find the datapath
1537 ovs-appctl: ovs-vswitchd: server returned an error
1540 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1546 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1548 AT_CHECK([tail -2 stderr], [0], [dnl
1550 ovs-appctl: ovs-vswitchd: server returned an error
1553 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1559 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1561 AT_CHECK([tail -2 stderr], [0], [dnl
1562 Must specify bridge name
1563 ovs-appctl: ovs-vswitchd: server returned an error
1566 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1567 AT_CHECK([ovs-appctl ofproto/trace \
1568 ovs-dummy "$odp_flow" garbage_option],
1569 [2], [stdout],[stderr])
1570 AT_CHECK([tail -2 stderr], [0], [dnl
1571 Trailing garbage in packet data
1572 ovs-appctl: ovs-vswitchd: server returned an error
1575 # Test incorrect command: ofproto/trace with 4 arguments
1576 AT_CHECK([ovs-appctl ofproto/trace \
1577 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1578 AT_CHECK([tail -2 stderr], [0], [dnl
1579 "ofproto/trace" command takes at most 3 arguments
1580 ovs-appctl: ovs-vswitchd: server returned an error
1583 # Test incorrect command: ofproto/trace with 0 argument
1584 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1585 AT_CHECK([tail -2 stderr], [0], [dnl
1586 "ofproto/trace" command requires at least 1 arguments
1587 ovs-appctl: ovs-vswitchd: server returned an error
1593 m4_define([OFPROTO_TRACE],
1595 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1596 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1598 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1601 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1604 AT_SETUP([ofproto-dpif - MAC learning])
1605 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1606 ADD_OF_PORTS([br0], 1, 2, 3)
1608 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)'
1610 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1613 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1617 # Check for the MAC learning entry.
1618 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1620 3 0 50:54:00:00:00:05 ?
1623 # Trace a packet arrival destined for the learned MAC.
1624 # (This will also learn a MAC.)
1627 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1631 # Check for both MAC learning entries.
1632 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1634 3 0 50:54:00:00:00:05 ?
1635 1 0 50:54:00:00:00:06 ?
1638 # Trace a packet arrival that updates the first learned MAC entry.
1641 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1645 # Check that the MAC learning entry was updated.
1646 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1648 1 0 50:54:00:00:00:06 ?
1649 2 0 50:54:00:00:00:05 ?
1652 # Add another bridge.
1656 -- set bridge br1 datapath-type=dummy])
1657 ADD_OF_PORTS([br1], 4, 5)
1659 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1662 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1667 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1671 # Check that the MAC learning entries were added.
1672 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1674 4 0 50:54:00:00:00:06 ?
1675 5 0 50:54:00:00:00:07 ?
1678 # Delete port p1 and see that its MAC learning entry disappeared, and
1679 # that the MAC learning entry for the same MAC was also deleted from br1.
1680 AT_CHECK([ovs-vsctl del-port p1])
1681 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1683 2 0 50:54:00:00:00:05 ?
1685 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1687 5 0 50:54:00:00:00:07 ?
1693 AT_SETUP([ofproto-dpif - MAC table overflow])
1695 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1696 ADD_OF_PORTS([br0], 1, 2, 3)
1698 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)'
1700 AT_CHECK([ovs-appctl time/stop])
1702 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1703 for i in 0 1 2 3 4 5 6 7 8 9; do
1706 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1709 ovs-appctl time/warp 1000
1712 # Check for the MAC learning entries.
1713 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1715 3 0 50:54:00:00:00:00
1716 3 0 50:54:00:00:00:01
1717 3 0 50:54:00:00:00:02
1718 3 0 50:54:00:00:00:03
1719 3 0 50:54:00:00:00:04
1720 3 0 50:54:00:00:00:05
1721 3 0 50:54:00:00:00:06
1722 3 0 50:54:00:00:00:07
1723 3 0 50:54:00:00:00:08
1724 3 0 50:54:00:00:00:09
1728 # Trace another ARP packet on another MAC.
1731 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1735 # Check that the new one chased the oldest one out of the table.
1736 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1738 3 0 50:54:00:00:00:01 ?
1739 3 0 50:54:00:00:00:02 ?
1740 3 0 50:54:00:00:00:03 ?
1741 3 0 50:54:00:00:00:04 ?
1742 3 0 50:54:00:00:00:05 ?
1743 3 0 50:54:00:00:00:06 ?
1744 3 0 50:54:00:00:00:07 ?
1745 3 0 50:54:00:00:00:08 ?
1746 3 0 50:54:00:00:00:09 ?
1747 3 0 50:54:00:00:00:10 ?
1753 dnl Test that sFlow samples packets correctly.
1754 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1755 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1757 ON_EXIT([kill `cat test-sflow.pid`])
1758 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1759 AT_CAPTURE_FILE([sflow.log])
1760 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1762 ovs-appctl time/stop
1764 ADD_OF_PORTS([br0], 1, 2)
1766 set Interface br0 options:ifindex=1002 -- \
1767 set Interface p1 options:ifindex=1004 -- \
1768 set Interface p2 options:ifindex=1003 -- \
1769 set Bridge br0 sflow=@sf -- \
1770 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1771 header=128 sampling=1 polling=1
1773 dnl open with ARP packets to seed the bridge-learning. The output
1774 dnl ifIndex numbers should be reported predictably after that.
1775 dnl Since we set sampling=1 we should see all of these packets
1776 dnl reported. Sorting the output by data-source and seqNo makes
1777 dnl it deterministic. Ensuring that we send at least two packets
1778 dnl into each port means we get to check the seq nos are
1779 dnl incrementing correctly.
1781 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)'
1782 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)'
1783 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)'
1784 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)'
1785 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)'
1787 dnl sleep long enough to get more than one counter sample
1788 dnl from each datasource so we can check sequence numbers
1789 for i in `seq 1 30`; do
1790 ovs-appctl time/warp 100
1793 ovs-appctl -t test-sflow exit
1795 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1816 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
1836 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
1856 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
1876 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
1896 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
1899 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1913 in_broadcasts=4294967295
1916 in_unknownprotos=4294967295
1919 out_multicasts=4294967295
1920 out_broadcasts=4294967295
1936 in_broadcasts=4294967295
1939 in_unknownprotos=4294967295
1942 out_multicasts=4294967295
1943 out_broadcasts=4294967295
1959 in_broadcasts=4294967295
1962 in_unknownprotos=4294967295
1965 out_multicasts=4294967295
1966 out_broadcasts=4294967295
1982 in_broadcasts=4294967295
1985 in_unknownprotos=4294967295
1988 out_multicasts=4294967295
1989 out_broadcasts=4294967295
2005 in_broadcasts=4294967295
2008 in_unknownprotos=4294967295
2011 out_multicasts=4294967295
2012 out_broadcasts=4294967295
2028 in_broadcasts=4294967295
2031 in_unknownprotos=4294967295
2034 out_multicasts=4294967295
2035 out_broadcasts=4294967295
2044 dnl Test that basic NetFlow reports flow statistics correctly:
2045 dnl - The initial packet of a flow are correctly accounted.
2046 dnl - Later packets within a flow are correctly accounted.
2047 dnl - Flow actions changing (in this case, due to MAC learning)
2048 dnl cause a record to be sent.
2049 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
2051 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2052 ADD_OF_PORTS([br0], 1, 2)
2054 ovs-appctl time/stop
2055 ON_EXIT([kill `cat test-netflow.pid`])
2056 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2057 AT_CAPTURE_FILE([netflow.log])
2058 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2061 set Bridge br0 netflow=@nf -- \
2062 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2063 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2065 for delay in 1000 30000; do
2066 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)'
2067 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)'
2069 ovs-appctl time/warp $delay
2074 ovs-appctl -t test-netflow exit
2076 AT_CHECK([[sed -e 's/, uptime [0-9]*//
2078 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
2079 s/time [0-9]*\.\.\.[0-9]*/time <range>/
2080 ' netflow.log | sort]], [0],
2082 header: v5, seq 0, engine 2,1
2083 header: v5, seq 1, engine 2,1
2084 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
2085 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
2086 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
2090 dnl Test that basic NetFlow reports active expirations correctly.
2091 AT_SETUP([ofproto-dpif - NetFlow active expiration])
2093 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2094 ADD_OF_PORTS([br0], 1, 2)
2096 ON_EXIT([kill `cat test-netflow.pid`])
2097 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2098 AT_CAPTURE_FILE([netflow.log])
2099 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2102 set Bridge br0 netflow=@nf -- \
2103 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2104 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
2106 AT_CHECK([ovs-appctl time/stop])
2108 while test $n -le 60; do
2111 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)'
2112 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)'
2114 ovs-appctl time/warp 1000
2117 ovs-appctl time/warp 10000
2121 ovs-appctl -t test-netflow exit
2123 # Count the number of reported packets:
2124 # - From source to destination before MAC learning kicks in (just one).
2125 # - From source to destination after that.
2126 # - From destination to source.
2134 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2141 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2144 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2147 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
2154 eval $counter=\`expr \$$counter + \$pkts\`
2155 n_recs=`expr $n_recs + 1`
2158 # There should be exactly 1 MAC learning packet,
2159 # exactly 59 other packets in that direction,
2160 # and exactly 60 packets in the other direction.
2161 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2164 # There should be 1 expiration for MAC learning,
2165 # at least 5 active and a final expiration in one direction,
2166 # and at least 5 active and a final expiration in the other direction.
2168 AT_CHECK([test $n_recs -ge 13])
2172 AT_SETUP([idle_age and hard_age increase over time])
2175 # get_ages DURATION HARD IDLE
2177 # Fetch the flow duration, hard age, and idle age into the variables
2178 # whose names are given as arguments. Rounds DURATION down to the
2179 # nearest integer. If hard_age doesn't appear in the output, sets
2180 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2183 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2185 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2186 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2187 AS_VAR_COPY([$1], [duration])
2189 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2190 if test X"$hard" = X; then
2193 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2195 AS_VAR_COPY([$2], [hard])
2197 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2198 if test X"$idle" = X; then
2201 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2203 AS_VAR_COPY([$3], [idle])
2206 # Add a flow and get its initial hard and idle age.
2207 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2208 get_ages duration1 hard1 idle1
2210 ovs-appctl time/stop
2211 # Warp time forward by 10 seconds, then modify the flow's actions.
2212 ovs-appctl time/warp 10000
2213 get_ages duration2 hard2 idle2
2214 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2216 # Warp time forward by 10 seconds.
2217 ovs-appctl time/warp 10000
2218 get_ages duration3 hard3 idle3
2220 # Warp time forward 10 more seconds, then pass some packets through the flow,
2221 # then warp forward a few more times because idle times are only updated
2223 ovs-appctl time/warp 10000
2224 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)'
2225 ovs-appctl time/warp 1000
2226 ovs-appctl time/warp 1000
2227 ovs-appctl time/warp 1000
2228 get_ages duration4 hard4 idle4
2230 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2231 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2232 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2234 # Duration should increase steadily over time.
2235 AT_CHECK([test $duration1 -lt $duration2])
2236 AT_CHECK([test $duration2 -lt $duration3])
2237 AT_CHECK([test $duration3 -lt $duration4])
2239 # Hard age should be "none" initially because it's the same as flow_duration,
2240 # then it should increase.
2241 AT_CHECK([test $hard1 = none])
2242 AT_CHECK([test $hard2 = none])
2243 AT_CHECK([test $hard3 != none])
2244 AT_CHECK([test $hard4 != none])
2245 AT_CHECK([test $hard3 -lt $hard4])
2247 # Idle age should increase from 1 to 2 to 3, then decrease.
2248 AT_CHECK([test $idle1 -lt $idle2])
2249 AT_CHECK([test $idle2 -lt $idle3])
2250 AT_CHECK([test $idle3 -gt $idle4])
2252 # Check some invariant relationships.
2253 AT_CHECK([test $duration1 = $idle1])
2254 AT_CHECK([test $duration2 = $idle2])
2255 AT_CHECK([test $duration3 = $idle3])
2256 AT_CHECK([test $idle3 -gt $hard3])
2257 AT_CHECK([test $idle4 -lt $hard4])
2258 AT_CHECK([test $hard4 -lt $duration4])
2263 AT_SETUP([ofproto-dpif - fin_timeout])
2265 AT_DATA([flows.txt], [dnl
2266 in_port=1 actions=output:2
2267 in_port=2 actions=mod_vlan_vid:17,output:1
2269 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2270 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2272 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2275 ovs-appctl time/stop
2276 # Check that a TCP SYN packet does not change the timeout. (Because
2277 # flow stats updates are mainly what implements the fin_timeout
2278 # feature, we warp forward a couple of times to ensure that flow stats
2279 # run before re-checking the flow table.)
2280 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2281 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2284 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2286 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2288 # Check that a TCP FIN packet does change the timeout.
2289 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2290 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2293 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2295 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2300 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2301 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2302 ADD_OF_PORTS([br0], [1], [2])
2303 ADD_OF_PORTS([br1], [3])
2305 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2312 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2313 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2314 ADD_OF_PORTS([br0], [1], [2])
2315 ADD_OF_PORTS([br1], [3])
2317 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2318 dummy@ovs-dummy: hit:0 missed:0
2319 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2321 br0 65534/100: (dummy)
2325 br1 65534/101: (dummy)
2331 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2332 OVS_VSWITCHD_START([add-br br1 -- \
2333 set bridge br1 datapath-type=dummy fail-mode=secure])
2334 ADD_OF_PORTS([br0], [1], [2])
2335 ADD_OF_PORTS([br1], [3])
2337 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)'])
2338 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)'])
2339 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)'])
2341 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2342 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))
2343 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))
2346 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2347 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))
2353 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2354 OVS_VSWITCHD_START([add-br br1 -- \
2355 set bridge br1 datapath-type=dummy fail-mode=secure])
2356 ADD_OF_PORTS([br0], [1], [2])
2357 ADD_OF_PORTS([br1], [3])
2359 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)'])
2360 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)'])
2361 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)'])
2363 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2364 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))
2365 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))
2368 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2369 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))
2372 AT_CHECK([ovs-appctl dpif/del-flows br0])
2373 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2376 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2377 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))
2383 AT_SETUP([ofproto-dpif - patch ports])
2384 OVS_VSWITCHD_START([add-br br1 \
2385 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2386 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2387 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2389 ADD_OF_PORTS([br0], [2])
2390 ADD_OF_PORTS([br1], [3])
2392 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2394 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2395 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2397 for i in $(seq 1 10); do
2398 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)'
2401 for i in $(seq 1 5); do
2402 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)'
2405 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2409 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2410 dummy@ovs-dummy: hit:13 missed:2
2411 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2413 br0 65534/100: (dummy)
2415 pbr0 1/none: (patch: peer=pbr1)
2417 br1 65534/101: (dummy)
2419 pbr1 1/none: (patch: peer=pbr0)
2422 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2423 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
2425 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2426 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
2429 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2430 OFPST_PORT reply (xid=0x4): 1 ports
2431 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2432 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2435 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2436 OFPST_PORT reply (xid=0x4): 1 ports
2437 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2438 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2444 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2445 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2446 ADD_OF_PORTS([br0], 1, 2)
2448 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2449 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2451 for i in $(seq 1 61); do
2452 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)'
2453 ovs-appctl time/warp 10000
2454 ovs-appctl time/warp 50000
2457 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2460 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2461 dummy@ovs-dummy: hit:0 missed:61
2462 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2463 br0: hit:0 missed:61
2464 br0 65534/100: (dummy)
2472 AT_SETUP([ofproto-dpif - port duration])
2473 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2474 ADD_OF_PORTS([br0], 1, 2)
2476 ovs-appctl time/stop
2477 ovs-appctl time/warp 10000
2479 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2480 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2482 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2483 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2484 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2486 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2487 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2489 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2490 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2496 dnl ----------------------------------------------------------------------
2497 AT_BANNER([ofproto-dpif -- megaflows])
2499 # Strips out uninteresting parts of megaflow output, as well as parts
2500 # that vary from one run to another (e.g., timing and bond actions).
2501 m4_define([STRIP_USED], [[sed '
2502 s/used:[0-9]*\.[0-9]*/used:0.0/
2504 m4_define([STRIP_XOUT], [[sed '
2505 s/used:[0-9]*\.[0-9]*/used:0.0/
2506 s/Datapath actions:.*/Datapath actions: <del>/
2509 AT_SETUP([ofproto-dpif megaflow - port classification])
2511 ADD_OF_PORTS([br0], [1], [2])
2512 AT_DATA([flows.txt], [dnl
2513 table=0 in_port=1 actions=output(2)
2515 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2516 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)'])
2517 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)'])
2518 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2519 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2524 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2526 ADD_OF_PORTS([br0], [1], [2])
2527 AT_DATA([flows.txt], [dnl
2528 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2530 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2531 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)'])
2532 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)'])
2533 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2534 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>
2535 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>
2540 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2542 ADD_OF_PORTS([br0], [1], [2])
2543 AT_DATA([flows.txt], [dnl
2544 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2546 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2547 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)'])
2548 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)'])
2549 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2550 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>
2551 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>
2556 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2558 ADD_OF_PORTS([br0], [1], [2])
2559 AT_DATA([flows.txt], [dnl
2560 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2562 AT_CHECK([ovs-ofctl 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,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2571 AT_SETUP([ofproto-dpif megaflow - normal])
2573 ADD_OF_PORTS([br0], [1], [2])
2574 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2575 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)'])
2576 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)'])
2577 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2578 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>
2579 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>
2584 AT_SETUP([ofproto-dpif megaflow - mpls])
2586 ADD_OF_PORTS([br0], [1], [2])
2587 AT_DATA([flows.txt], [dnl
2588 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2589 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2591 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2592 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)'])
2593 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)'])
2594 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2595 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>
2596 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>
2601 AT_SETUP([ofproto-dpif megaflow - netflow])
2603 ADD_OF_PORTS([br0], [1], [2])
2605 dnl NetFlow configuration disables wildcarding relevant fields
2606 ON_EXIT([kill `cat test-netflow.pid`])
2607 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2608 AT_CAPTURE_FILE([netflow.log])
2609 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2611 set Bridge br0 netflow=@nf -- \
2612 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2613 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2615 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2616 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)'])
2617 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)'])
2618 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2619 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>
2620 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>
2625 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2627 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2628 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2629 set interface p2 type=dummy ofport_request=2 -- \
2630 set interface p3 type=dummy ofport_request=3])
2631 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2634 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2635 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)'])
2636 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)'])
2637 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2638 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>
2639 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>
2644 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2646 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2647 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2648 set interface p2 type=dummy ofport_request=2 -- \
2649 set interface p3 type=dummy ofport_request=3])
2650 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2653 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2654 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)'])
2655 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)'])
2656 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2657 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>
2658 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>
2663 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2664 # Create bond0 on br0 with interfaces p0 and p1
2665 # and bond1 on br1 with interfaces p2 and p3
2666 # with p0 patched to p2 and p1 patched to p3.
2668 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2669 other-config:lacp-time=fast \
2670 other-config:bond-rebalance-interval=0 -- \
2671 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2672 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2674 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2675 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2676 fail-mode=secure -- \
2677 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2678 other-config:lacp-time=fast \
2679 other-config:bond-rebalance-interval=0 -- \
2680 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2681 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2683 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2685 ADD_OF_PORTS([br0], [7])
2686 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2687 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2688 ovs-appctl time/stop
2689 ovs-appctl time/warp 5000
2690 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)'])
2691 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)'])
2693 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2694 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>
2695 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>
2700 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2702 ADD_OF_PORTS([br0], [1], [2])
2703 AT_DATA([flows.txt], [dnl
2704 table=0 in_port=1,ip actions=resubmit(90)
2705 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
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,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2712 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>
2717 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2719 ADD_OF_PORTS([br0], [1], [2])
2720 AT_DATA([flows.txt], [dnl
2721 table=0 in_port=1,ip actions=resubmit(,1)
2722 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2724 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2725 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)'])
2726 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=
2727 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2728 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2729 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>
2730 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>
2735 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2737 ADD_OF_PORTS([br0], [1], [2])
2738 AT_DATA([flows.txt], [dnl
2739 table=0 in_port=1,ip actions=goto_table(1)
2740 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2742 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2743 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)'])
2744 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)'])
2745 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2746 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>
2747 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>
2752 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2754 ADD_OF_PORTS([br0], [1], [2], [3])
2756 set Bridge br0 mirrors=@m --\
2757 --id=@p3 get Port p3 --\
2758 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2760 AT_DATA([flows.txt], [dnl
2761 in_port=1 actions=output:2
2763 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2764 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)'])
2765 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)'])
2766 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2767 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2772 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2774 ADD_OF_PORTS([br0], [1], [2], [3])
2776 set Bridge br0 mirrors=@m --\
2777 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2778 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2780 AT_DATA([flows.txt], [dnl
2781 in_port=1 actions=output:2
2783 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2784 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))'])
2785 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)'])
2786 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2787 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2788 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2793 AT_SETUP([ofproto-dpif megaflow - move action])
2795 ADD_OF_PORTS([br0], [1], [2])
2796 AT_DATA([flows.txt], [dnl
2797 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2798 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2799 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2801 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2802 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)'])
2803 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)'])
2804 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2805 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>
2806 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>
2811 AT_SETUP([ofproto-dpif megaflow - push action])
2813 ADD_OF_PORTS([br0], [1], [2])
2814 AT_DATA([flows.txt], [dnl
2815 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2817 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2818 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)'])
2819 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)'])
2820 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2821 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>
2822 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>
2827 AT_SETUP([ofproto-dpif megaflow - learning])
2829 ADD_OF_PORTS([br0], [1], [2])
2830 AT_DATA([flows.txt], [dnl
2831 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
2833 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2834 ovs-appctl time/stop
2835 # We send each packet twice because the first packet in each flow causes the
2836 # flow table to change and thus revalidations, which (depending on timing)
2837 # can keep a megaflow from being installed. The revalidations are done by
2838 # the second iteration, allowing the flows to be installed.
2840 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)'])
2841 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)'])
2842 ovs-appctl time/warp 100
2844 dnl The original flow is missing due to a revalidation.
2845 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2846 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>
2847 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>
2852 AT_SETUP([ofproto-dpif megaflow - tunnels])
2854 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2855 ofport_request=1 -- \
2856 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2857 ofport_request=2 options:key=flow -- \
2858 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2859 ofport_request=3 -- \
2860 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2861 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2862 AT_DATA([flows.txt], [dnl
2863 in_port=1,actions=output(2)
2864 in_port=3,actions=output(4)
2866 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2867 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2868 dnl will cause the packet to be dropped.
2869 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)'])
2870 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)'])
2871 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)'])
2872 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)'])
2873 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2874 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2875 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>
2876 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>
2881 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2883 ADD_OF_PORTS([br0], [1], [2])
2884 AT_DATA([flows.txt], [dnl
2885 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2887 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2888 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)'])
2889 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)'])
2890 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2891 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>
2892 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>
2897 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2899 ADD_OF_PORTS([br0], [1], [2])
2900 AT_DATA([flows.txt], [dnl
2901 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2903 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2904 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)'])
2905 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)'])
2906 dnl The megaflows do not match the same fields, since the first packet
2907 dnl is essentially a no-op. (The new destination MAC is the same as the
2908 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2909 dnl so that a packet that doesn't need its MAC address changed doesn't
2910 dnl hide one that does. Since the first entry doesn't need to change,
2911 dnl only the destination MAC address is matched (as decided by
2912 dnl ofproto-dpif). The second entry actually updates the destination
2913 dnl MAC, so both the source and destination MAC addresses are
2914 dnl un-wildcarded, since the ODP commit functions update both the source
2915 dnl and destination MAC addresses.
2916 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_USED], [0], [dnl
2917 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
2918 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
2923 AT_SETUP([ofproto-dpif - datapath port number change])
2924 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2925 ADD_OF_PORTS([br0], 1)
2927 # Trace a flow that should output to p1.
2928 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2930 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
2933 # Change p1's port number to 5.
2934 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
2936 # Trace a flow that should output to p1 in its new location.
2937 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2939 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
2944 # Tests the bundling with various bfd and cfm configurations.
2945 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
2946 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
2947 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
2948 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
2949 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
2950 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
2951 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
2952 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
2953 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
2954 set Interface p0 cfm_mpid=1 -- \
2955 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
2957 ovs-appctl time/stop
2958 # advance the clock to stablize everything.
2959 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2960 # cfm/show should show 'recv' fault.
2961 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2964 # bfd/show should show 'up'.
2965 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2966 Local Session State: up
2967 Remote Session State: up
2968 Local Session State: up
2969 Remote Session State: up
2971 # bond/show should show 'may-enable: true' for all slaves.
2972 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2979 # now disable the bfd on p1.
2980 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
2981 # advance the clock to stablize everything.
2982 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2983 # cfm/show should show 'recv' fault.
2984 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2987 # bfd/show should show 'down'.
2988 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2989 Local Session State: down
2990 Remote Session State: down
2992 # bond/show should show 'may-enable: false' for p0.
2993 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3000 # now enable the bfd on p1 and disable bfd on p0.
3001 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
3002 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
3003 # advance the clock to stablize everything.
3004 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
3005 # cfm/show should show 'recv' fault.
3006 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
3009 # bfd/show should show 'down'.
3010 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
3011 Local Session State: down
3012 Remote Session State: down
3014 # bond/show should show 'may-enable: false' for p0 and p1.
3015 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3025 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3026 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3029 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3031 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3032 monitor thread created
3034 # disable bfd on p0.
3035 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3037 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3038 monitor thread terminated
3040 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3043 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3045 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3046 monitor thread created
3048 # disable cfm on p0.
3049 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3051 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3052 monitor thread terminated
3054 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3056 # enable both bfd and cfm on p0.
3057 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3059 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3060 monitor thread created
3062 # disable bfd on p0.
3063 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3064 # check log, there should not be the log of thread terminated.
3065 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3067 # reenable bfd on p0.
3068 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3069 # check log, should still be on log of thread created.
3070 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3071 monitor thread created
3073 # disable bfd and cfm together.
3074 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3076 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3077 monitor thread terminated
3083 # this test helps avoid the deadlock between the main thread and monitor thread.
3084 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3087 for i in `seq 1 199`
3089 AT_CHECK([ovs-vsctl add-port br0 p$i -- set interface p$i type=gre options:remote_ip=1.2.3.4 options:key=$i bfd:enable=true])
3095 AT_BANNER([ofproto-dpif - flow translation resource limits])
3097 AT_SETUP([ofproto-dpif - infinite resubmit])
3099 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3100 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3102 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3104 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3107 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3110 AT_SETUP([ofproto-dpif - exponential resubmit chain])
3112 ADD_OF_PORTS([br0], 1)
3113 (for i in `seq 1 64`; do
3115 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3117 echo "in_port=65, actions=local") > flows
3118 AT_CHECK([ovs-ofctl add-flows br0 flows])
3119 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3120 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3122 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3125 AT_SETUP([ofproto-dpif - too many output actions])
3127 ADD_OF_PORTS([br0], 1)
3128 (for i in `seq 1 12`; do
3130 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3132 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
3133 AT_CHECK([ovs-ofctl add-flows br0 flows])
3134 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3135 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3138 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
3140 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
3143 AT_SETUP([ofproto-dpif - stack too deep])
3145 ADD_OF_PORTS([br0], 1)
3146 (for i in `seq 1 12`; do
3148 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3150 push="push:NXM_NX_REG0[[]]"
3151 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3152 AT_CHECK([ovs-ofctl add-flows br0 flows])
3153 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3154 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3156 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])