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 - fast failover group])
118 ADD_OF_PORTS([br0], [1], [10], [11])
119 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'])
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: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])
122 AT_CHECK([tail -1 stdout], [0],
123 [Datapath actions: drop
128 AT_SETUP([ofproto-dpif - registers])
130 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
131 AT_DATA([flows.txt], [dnl
132 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
133 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
134 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
135 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
137 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
138 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
139 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
140 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
141 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
142 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
143 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
144 in_port=9,reg0=0xdeadbeef actions=output:20
145 in_port=10,reg1=0xdeadbeef actions=output:21
146 in_port=11,reg2=0xeef22dea actions=output:22
148 dnl Sanilty check all registers
149 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
150 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
151 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
152 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
155 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
156 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])
157 AT_CHECK([tail -1 stdout], [0],
158 [Datapath actions: 20,21,22,33
163 AT_SETUP([ofproto-dpif - push-pop])
165 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
166 AT_DATA([flows.txt], [dnl
167 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
168 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
169 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
170 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
171 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
174 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
175 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])
176 AT_CHECK([tail -1 stdout], [0],
177 [Datapath actions: 33,22,21,20
182 AT_SETUP([ofproto-dpif - output])
184 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
185 AT_DATA([flows.txt], [dnl
186 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
187 in_port=2 actions=output:9
188 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
189 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
190 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
191 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
192 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
193 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
195 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
196 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])
197 AT_CHECK([tail -1 stdout], [0],
198 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
203 AT_SETUP([ofproto-dpif - dec_ttl])
205 ADD_OF_PORTS([br0], [1], [2], [3], [4])
206 AT_DATA([flows.txt], [dnl
207 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
208 table=1 in_port=1 action=dec_ttl,output:3
210 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
211 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])
212 AT_CHECK([tail -3 stdout], [0],
213 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
214 This flow is handled by the userspace slow path because it:
215 - Sends "packet-in" messages to the OpenFlow controller.
217 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])
218 AT_CHECK([tail -1 stdout], [0],
219 [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
221 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])
222 AT_CHECK([tail -1 stdout], [0],
223 [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
226 AT_CAPTURE_FILE([ofctl_monitor.log])
227 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
228 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])
229 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
230 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
231 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
232 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
238 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
240 ADD_OF_PORTS([br0], [1], [2])
242 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
244 # "in_port" defaults to OFPP_NONE if it's not specified.
245 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"
246 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
247 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
256 AT_SETUP([ofproto-dpif - DSCP])
257 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
258 ADD_OF_PORTS([br0], [9])
259 AT_DATA([flows.txt], [dnl
260 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
262 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
263 AT_CHECK([ovs-vsctl -- \
264 set Port p1 qos=@newqos --\
265 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
266 --id=@q1 create Queue dscp=1 --\
267 --id=@q2 create Queue dscp=2], [0], [ignore])
268 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])
269 AT_CHECK([tail -1 stdout], [0],
270 [Datapath actions: dnl
272 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
273 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
275 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
276 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
277 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
283 AT_SETUP([ofproto-dpif - output/flood flags])
285 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
287 AT_DATA([flows.txt], [dnl
288 in_port=local actions=local,flood
289 in_port=1 actions=flood
290 in_port=2 actions=all
291 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
292 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
294 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
295 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
296 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
298 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])
299 AT_CHECK([tail -1 stdout \
300 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
308 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])
309 AT_CHECK([tail -1 stdout \
310 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
318 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])
319 AT_CHECK([tail -1 stdout \
320 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
329 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])
330 AT_CHECK([tail -1 stdout], [0],
331 [Datapath actions: 100,1,2,4,6,7
334 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])
335 AT_CHECK([tail -1 stdout], [0],
336 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
341 AT_SETUP([ofproto-dpif - controller])
342 OVS_VSWITCHD_START([dnl
343 add-port br0 p1 -- set Interface p1 type=dummy
345 ON_EXIT([kill `cat ovs-ofctl.pid`])
347 AT_CAPTURE_FILE([ofctl_monitor.log])
348 AT_DATA([flows.txt], [dnl
349 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
350 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
351 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
353 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
354 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)
355 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)
356 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
357 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)
358 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
359 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
360 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
361 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
362 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
363 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
364 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
365 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
366 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
367 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
368 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
369 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
370 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
371 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
372 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
374 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
377 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
380 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)'
382 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
383 ovs-appctl -t ovs-ofctl exit
385 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
386 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
387 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
389 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
390 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
392 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
393 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
396 dnl Singleton controller action.
397 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
400 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)'
402 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
403 ovs-appctl -t ovs-ofctl exit
405 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
406 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
407 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
409 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
410 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
412 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
413 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
416 dnl Modified controller action.
417 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
420 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)'
422 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
423 ovs-appctl -t ovs-ofctl exit
425 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
426 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
427 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
429 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
430 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
432 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
433 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
436 dnl Modified VLAN controller action.
437 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
440 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)'
442 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
443 ovs-appctl -t ovs-ofctl exit
445 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
446 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
447 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
449 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
450 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
452 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
453 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
456 dnl Modified MPLS controller action.
457 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
460 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)'
462 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
463 ovs-appctl -t ovs-ofctl exit
465 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
466 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
467 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
469 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
470 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
472 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
473 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
476 dnl Modified MPLS controller action.
477 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
480 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)'
482 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
483 ovs-appctl -t ovs-ofctl exit
485 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
486 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
487 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
489 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
490 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
492 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
493 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
496 dnl Modified MPLS controller action.
497 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
499 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)
502 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)'
505 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
506 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
507 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
508 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
510 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
511 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
513 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
514 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
517 dnl Modified MPLS controller action.
518 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
521 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))'
523 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
524 ovs-appctl -t ovs-ofctl exit
526 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
527 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
528 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
530 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
531 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
533 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
534 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
537 dnl Modified MPLS controller action.
538 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
541 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)'
543 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
544 ovs-appctl -t ovs-ofctl exit
546 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
547 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
548 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
550 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
551 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
553 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
554 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
557 dnl Modified MPLS controller action.
558 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
561 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)'
563 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
564 ovs-appctl -t ovs-ofctl exit
566 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
567 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
568 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
570 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
571 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
573 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
574 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
577 dnl Modified MPLS controller action.
578 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
581 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)'
583 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
584 ovs-appctl -t ovs-ofctl exit
586 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
587 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
588 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
590 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
591 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
593 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
594 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
597 dnl Modified MPLS controller action.
598 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
601 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)'
603 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
604 ovs-appctl -t ovs-ofctl exit
606 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
607 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
608 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
610 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
611 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
613 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
614 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
617 dnl Modified MPLS actions.
618 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
621 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)'
623 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
624 ovs-appctl -t ovs-ofctl exit
626 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
627 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
628 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
630 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
631 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
633 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
634 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
637 dnl Modified MPLS ipv6 controller action.
638 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
641 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)'
643 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
644 ovs-appctl -t ovs-ofctl exit
646 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
647 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
648 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
650 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
651 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
653 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
654 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
658 dnl Modified MPLS pop action.
659 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
660 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)
661 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
663 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
666 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'
669 # 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)'
671 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
672 ovs-appctl -t ovs-ofctl exit
674 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
675 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
676 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
678 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
679 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
681 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
682 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
686 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
689 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)'
691 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
692 ovs-appctl -t ovs-ofctl exit
694 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
695 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
696 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
698 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
699 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
701 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)
702 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
704 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)
705 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
707 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)
708 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
710 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)
711 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
713 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)
714 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
716 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)
717 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
719 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)
720 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
724 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
727 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'
729 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
730 ovs-appctl -t ovs-ofctl exit
732 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
733 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
734 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
736 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
737 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
739 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)
740 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
742 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)
743 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
745 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)
746 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
748 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)
749 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
751 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)
752 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
754 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)
755 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
757 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)
758 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
761 dnl Modified ARP controller action.
762 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
765 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)'
768 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
769 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
770 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
771 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
772 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
773 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
774 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
775 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
776 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
777 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
778 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
779 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
780 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
781 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
782 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
783 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
784 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
785 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
786 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
787 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
790 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
793 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
796 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'
799 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
800 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
801 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
802 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
804 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
805 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
807 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)
808 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
810 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)
811 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
813 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)
814 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
816 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)
817 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
819 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)
820 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
822 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)
823 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
825 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)
826 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
829 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
830 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
831 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
832 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)
833 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)
834 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)
835 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)
836 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)
837 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
838 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
839 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
840 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
841 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
842 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
843 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
844 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
845 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
846 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
847 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
848 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
849 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
850 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
851 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
852 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
859 AT_SETUP([ofproto-dpif - ARP modification slow-path])
861 ADD_OF_PORTS([br0], [1], [2])
863 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
864 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'
866 # Input some packets that should follow the arp modification slow-path.
868 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)'
870 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
872 # Check the packets that were output.
873 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
874 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
875 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
876 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
877 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
878 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
879 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
880 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
881 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
882 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
885 # Check that each of the packets actually passed through the slow-path.
886 AT_CHECK([ovs-appctl coverage/show], [0], [stdout])
887 AT_CHECK([sed -n 's/[[ ]]\{2,\}/ /g
888 s/^dpif_execute_with_help.*total: //p' stdout], [0], [3
894 AT_SETUP([ofproto-dpif - VLAN handling])
896 [set Bridge br0 fail-mode=standalone -- \
897 add-port br0 p1 trunks=10,12 -- \
898 add-port br0 p2 tag=10 -- \
899 add-port br0 p3 tag=12 \
900 other-config:priority-tags=true -- \
901 add-port br0 p4 tag=12 -- \
902 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
903 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
904 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
905 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
906 other-config:priority-tags=true -- \
907 set Interface p1 type=dummy -- \
908 set Interface p2 type=dummy -- \
909 set Interface p3 type=dummy -- \
910 set Interface p4 type=dummy -- \
911 set Interface p5 type=dummy -- \
912 set Interface p6 type=dummy -- \
913 set Interface p7 type=dummy -- \
914 set Interface p8 type=dummy --])
916 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
917 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
923 "100 10 0 1,5,6,7,8,pop_vlan,2" \
924 "100 10 1 1,5,6,7,8,pop_vlan,2" \
927 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
928 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
932 "1 10 0 5,6,7,8,100,pop_vlan,2" \
933 "1 10 1 5,6,7,8,100,pop_vlan,2" \
936 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
937 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
938 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
939 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
940 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
947 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
948 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
949 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
956 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
957 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
958 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
965 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
966 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
967 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
968 "5 10 0 1,6,7,8,100,pop_vlan,2" \
969 "5 10 1 1,6,7,8,100,pop_vlan,2" \
972 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
973 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
974 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
975 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
976 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
977 "6 10 0 1,5,7,8,100,pop_vlan,2" \
978 "6 10 1 1,5,7,8,100,pop_vlan,2" \
981 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
982 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
983 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
984 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
985 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
986 "7 10 0 1,5,6,8,100,pop_vlan,2" \
987 "7 10 1 1,5,6,8,100,pop_vlan,2" \
990 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
991 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
992 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
993 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
994 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
995 "8 10 0 1,5,6,7,100,pop_vlan,2" \
996 "8 10 1 1,5,6,7,100,pop_vlan,2" \
999 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
1000 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1008 if test $vlan = none; then
1009 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1011 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))"
1014 echo "----------------------------------------------------------------------"
1015 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1017 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1018 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1020 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1022 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1028 AT_SETUP([ofproto-dpif - fragment handling])
1030 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
1031 AT_DATA([flows.txt], [dnl
1032 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
1033 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
1034 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
1035 priority=50 tcp ip_frag=no actions=output:4
1036 priority=50 tcp ip_frag=first actions=output:5
1037 priority=50 tcp ip_frag=later actions=output:6
1039 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
1041 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"
1042 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
1043 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
1044 later_flow="$base_flow,frag=later)"
1046 # mode no first later
1049 'drop 1 drop drop' \
1058 AT_CHECK([ovs-ofctl set-frags br0 $mode])
1059 for type in no first later; do
1060 eval flow=\$${type}_flow exp_output=\$$type
1061 printf "\n%s\n" "----$mode $type-----"
1062 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1064 if test $mode = drop && test $type != no; then
1065 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
1067 echo "Datapath actions: $exp_output" >> expout
1068 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
1074 AT_SETUP([ofproto-dpif - exit])
1076 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
1077 AT_DATA([flows.txt], [dnl
1078 in_port=1 actions=output:10,exit,output:11
1079 in_port=2 actions=output:12,resubmit:1,output:12
1080 in_port=3 actions=output:13,resubmit:2,output:14
1082 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1083 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])
1084 AT_CHECK([tail -1 stdout], [0],
1085 [Datapath actions: 10
1087 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])
1088 AT_CHECK([tail -1 stdout], [0],
1089 [Datapath actions: 12,10
1091 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])
1092 AT_CHECK([tail -1 stdout], [0],
1093 [Datapath actions: 13,12,10
1099 AT_SETUP([ofproto-dpif - mirroring, select_all])
1101 ADD_OF_PORTS([br0], 1, 2, 3)
1103 set Bridge br0 mirrors=@m --\
1104 --id=@p3 get Port p3 --\
1105 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1107 AT_DATA([flows.txt], [dnl
1108 in_port=1 actions=output:2
1109 in_port=2 actions=output:1
1111 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1113 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)"
1114 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1115 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1116 [Datapath actions: 2,3
1119 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)"
1120 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1121 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1122 [Datapath actions: 1,3
1129 AT_SETUP([ofproto-dpif - mirroring, select_src])
1131 ADD_OF_PORTS([br0], 1, 2, 3)
1133 set Bridge br0 mirrors=@m --\
1134 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
1135 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
1137 AT_DATA([flows.txt], [dnl
1138 in_port=1 actions=output:2
1139 in_port=2 actions=output:1
1141 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1143 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)"
1144 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1145 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1146 [Datapath actions: 2,3
1149 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)"
1150 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1151 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1152 [Datapath actions: 1
1157 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
1159 ADD_OF_PORTS([br0], 1, 2)
1161 set Bridge br0 mirrors=@m --\
1162 --id=@p2 get Port p2 --\
1163 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
1165 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1167 # "in_port" defaults to OFPP_NONE if it's not specified.
1168 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"
1169 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1170 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1171 [Datapath actions: 1,2
1178 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1180 ADD_OF_PORTS([br0], 1, 2, 3)
1182 set Bridge br0 mirrors=@m --\
1183 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1184 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1186 AT_DATA([flows.txt], [dnl
1187 in_port=1 actions=output:2
1188 in_port=2 actions=output:1
1190 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1192 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)"
1193 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1194 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1195 [Datapath actions: 2,3
1198 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)"
1199 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1200 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1201 [Datapath actions: 1
1208 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1210 ADD_OF_PORTS([br0], 1, 2, 3)
1212 set Bridge br0 mirrors=@m --\
1213 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1214 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1216 AT_DATA([flows.txt], [dnl
1217 in_port=1, actions=output:2
1219 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1221 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)"
1222 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1223 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1224 [Datapath actions: 2
1227 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))"
1228 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1229 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1230 [Datapath actions: 2
1233 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))"
1234 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1235 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1236 [Datapath actions: 2,3
1243 AT_SETUP([ofproto-dpif - mirroring, output_port])
1245 ADD_OF_PORTS([br0], 1, 2, 3)
1247 set Bridge br0 mirrors=@m --\
1248 --id=@p3 get Port p3 --\
1249 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1251 AT_DATA([flows.txt], [dnl
1252 in_port=1 actions=mod_vlan_vid:17,output:2
1253 in_port=2 actions=output:1
1255 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1257 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)"
1258 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1259 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1260 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1263 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)"
1264 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1265 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1266 [Datapath actions: 1,3
1272 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1274 ADD_OF_PORTS([br0], 1, 2)
1276 set Bridge br0 mirrors=@m --\
1277 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1279 AT_DATA([flows.txt], [dnl
1280 in_port=1 actions=output:2
1281 in_port=2 actions=mod_vlan_vid:17,output:1
1283 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1285 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)"
1286 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1287 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1289 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1290 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1292 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1294 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)"
1295 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1296 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1298 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1299 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1301 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1306 # Two testcases below are for the ofproto/trace command
1307 # The first one tests all correct syntax:
1308 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1309 # ofproto/trace br_name br_flow [-generate|packet]
1310 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1311 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1312 ADD_OF_PORTS([br0], 1, 2, 3)
1314 AT_DATA([flows.txt], [dnl
1315 in_port=1 actions=output:2
1316 in_port=2 actions=output:1
1318 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1320 odp_flow="in_port(p1)"
1322 # Test command: ofproto/trace odp_flow with in_port as a name.
1323 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1324 AT_CHECK([tail -1 stdout], [0], [dnl
1328 odp_flow="in_port(1)"
1329 # Test command: ofproto/trace odp_flow
1330 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1331 AT_CHECK([tail -1 stdout], [0], [dnl
1335 # Test command: ofproto/trace dp_name odp_flow
1336 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1337 AT_CHECK([tail -1 stdout], [0], [dnl
1340 # Test commmand: ofproto/trace br_name br_flow
1341 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1342 AT_CHECK([tail -1 stdout], [0], [dnl
1346 # Delete the inserted flows
1347 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1348 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1350 # This section beflow tests the [-generate] option
1351 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1352 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"
1354 # Test command: ofproto/trace odp_flow
1355 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1356 # Check for no MAC learning entry
1357 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1361 # Test command: ofproto/trace br_name br_flow
1362 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1363 # Check for no MAC learning entry
1364 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1368 # Test command: ofproto/trace odp_flow -generate
1369 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1370 # Check for the MAC learning entry
1371 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1373 3 0 50:54:00:00:00:05 ?
1376 # Test command: ofproto/trace dp_name odp_flow -generate
1377 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1378 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1379 -generate], [0], [stdout])
1380 # Check for both MAC learning entries
1381 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1383 3 0 50:54:00:00:00:05 ?
1384 1 0 50:54:00:00:00:06 ?
1387 # Test command: ofproto/trace br_name br_flow -generate
1388 AT_CHECK([ovs-appctl ofproto/trace br0 \
1389 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1390 -generate], [0], [stdout])
1391 # Check for both MAC learning entries.
1392 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1394 3 0 50:54:00:00:00:05 ?
1395 1 0 50:54:00:00:00:06 ?
1396 2 0 50:54:00:00:00:07 ?
1399 # This section beflow tests the [packet] option
1400 # The ovs-tcpundump of packets between port1 and port2
1401 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1402 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1404 # Construct the MAC learning table
1405 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1406 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1407 -generate], [0], [stdout])
1409 # Construct the MAC learning table
1410 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1411 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1412 -generate], [0], [stdout])
1414 # Test command: ofproto/trace odp_flow packet
1415 AT_CHECK([ovs-appctl ofproto/trace \
1416 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1417 AT_CHECK([tail -1 stdout], [0], [dnl
1420 AT_CHECK([head -n 3 stdout], [0], [dnl
1422 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
1423 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
1426 # Test command: ofproto/trace dp_name odp_flow packet
1427 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1428 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1429 AT_CHECK([tail -1 stdout], [0], [dnl
1432 AT_CHECK([head -n 3 stdout], [0], [dnl
1434 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
1435 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
1438 # Test command: ofproto/trace br_name br_flow packet
1439 AT_CHECK([ovs-appctl ofproto/trace br0 \
1440 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1441 AT_CHECK([tail -1 stdout], [0], [dnl
1444 AT_CHECK([head -n 2 stdout], [0], [dnl
1445 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
1446 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
1452 # The second test tests the corner cases
1453 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1455 ADD_OF_PORTS([br0], 1, 2)
1458 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1459 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1461 generate="-generate"
1462 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1464 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1470 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1472 AT_CHECK([tail -2 stderr], [0], [dnl
1473 Cannot find the datapath
1474 ovs-appctl: ovs-vswitchd: server returned an error
1477 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1483 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1485 AT_CHECK([tail -2 stderr], [0], [dnl
1486 Cannot find the datapath
1487 ovs-appctl: ovs-vswitchd: server returned an error
1490 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1496 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1498 AT_CHECK([tail -2 stderr], [0], [dnl
1499 Cannot find the datapath
1500 ovs-appctl: ovs-vswitchd: server returned an error
1503 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1509 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1511 AT_CHECK([tail -2 stderr], [0], [dnl
1512 Cannot find the datapath
1513 ovs-appctl: ovs-vswitchd: server returned an error
1516 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1522 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1524 AT_CHECK([tail -2 stderr], [0], [dnl
1526 ovs-appctl: ovs-vswitchd: server returned an error
1529 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1535 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1537 AT_CHECK([tail -2 stderr], [0], [dnl
1538 Must specify bridge name
1539 ovs-appctl: ovs-vswitchd: server returned an error
1542 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1543 AT_CHECK([ovs-appctl ofproto/trace \
1544 ovs-dummy "$odp_flow" garbage_option],
1545 [2], [stdout],[stderr])
1546 AT_CHECK([tail -2 stderr], [0], [dnl
1547 Trailing garbage in packet data
1548 ovs-appctl: ovs-vswitchd: server returned an error
1551 # Test incorrect command: ofproto/trace with 4 arguments
1552 AT_CHECK([ovs-appctl ofproto/trace \
1553 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1554 AT_CHECK([tail -2 stderr], [0], [dnl
1555 "ofproto/trace" command takes at most 3 arguments
1556 ovs-appctl: ovs-vswitchd: server returned an error
1559 # Test incorrect command: ofproto/trace with 0 argument
1560 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1561 AT_CHECK([tail -2 stderr], [0], [dnl
1562 "ofproto/trace" command requires at least 1 arguments
1563 ovs-appctl: ovs-vswitchd: server returned an error
1569 m4_define([OFPROTO_TRACE],
1571 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1572 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1574 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1577 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1580 AT_SETUP([ofproto-dpif - MAC learning])
1581 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1582 ADD_OF_PORTS([br0], 1, 2, 3)
1584 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)'
1586 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1589 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1593 # Check for the MAC learning entry.
1594 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1596 3 0 50:54:00:00:00:05 ?
1599 # Trace a packet arrival destined for the learned MAC.
1600 # (This will also learn a MAC.)
1603 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1607 # Check for both MAC learning entries.
1608 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1610 3 0 50:54:00:00:00:05 ?
1611 1 0 50:54:00:00:00:06 ?
1614 # Trace a packet arrival that updates the first learned MAC entry.
1617 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1621 # Check that the MAC learning entry was updated.
1622 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1624 1 0 50:54:00:00:00:06 ?
1625 2 0 50:54:00:00:00:05 ?
1628 # Add another bridge.
1632 -- set bridge br1 datapath-type=dummy])
1633 ADD_OF_PORTS([br1], 4, 5)
1635 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1638 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1643 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1647 # Check that the MAC learning entries were added.
1648 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1650 4 0 50:54:00:00:00:06 ?
1651 5 0 50:54:00:00:00:07 ?
1654 # Delete port p1 and see that its MAC learning entry disappeared, and
1655 # that the MAC learning entry for the same MAC was also deleted from br1.
1656 AT_CHECK([ovs-vsctl del-port p1])
1657 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1659 2 0 50:54:00:00:00:05 ?
1661 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1663 5 0 50:54:00:00:00:07 ?
1669 AT_SETUP([ofproto-dpif - MAC table overflow])
1671 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1672 ADD_OF_PORTS([br0], 1, 2, 3)
1674 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)'
1676 AT_CHECK([ovs-appctl time/stop])
1678 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1679 for i in 0 1 2 3 4 5 6 7 8 9; do
1682 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1685 ovs-appctl time/warp 1000
1688 # Check for the MAC learning entries.
1689 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1691 3 0 50:54:00:00:00:00
1692 3 0 50:54:00:00:00:01
1693 3 0 50:54:00:00:00:02
1694 3 0 50:54:00:00:00:03
1695 3 0 50:54:00:00:00:04
1696 3 0 50:54:00:00:00:05
1697 3 0 50:54:00:00:00:06
1698 3 0 50:54:00:00:00:07
1699 3 0 50:54:00:00:00:08
1700 3 0 50:54:00:00:00:09
1704 # Trace another ARP packet on another MAC.
1707 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1711 # Check that the new one chased the oldest one out of the table.
1712 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1714 3 0 50:54:00:00:00:01 ?
1715 3 0 50:54:00:00:00:02 ?
1716 3 0 50:54:00:00:00:03 ?
1717 3 0 50:54:00:00:00:04 ?
1718 3 0 50:54:00:00:00:05 ?
1719 3 0 50:54:00:00:00:06 ?
1720 3 0 50:54:00:00:00:07 ?
1721 3 0 50:54:00:00:00:08 ?
1722 3 0 50:54:00:00:00:09 ?
1723 3 0 50:54:00:00:00:10 ?
1729 dnl Test that sFlow samples packets correctly.
1730 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1731 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1733 ON_EXIT([kill `cat test-sflow.pid`])
1734 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1735 AT_CAPTURE_FILE([sflow.log])
1736 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1738 ovs-appctl time/stop
1740 ADD_OF_PORTS([br0], 1, 2)
1742 set Interface br0 options:ifindex=1002 -- \
1743 set Interface p1 options:ifindex=1004 -- \
1744 set Interface p2 options:ifindex=1003 -- \
1745 set Bridge br0 sflow=@sf -- \
1746 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1747 header=128 sampling=1 polling=1
1749 dnl open with ARP packets to seed the bridge-learning. The output
1750 dnl ifIndex numbers should be reported predictably after that.
1751 dnl Since we set sampling=1 we should see all of these packets
1752 dnl reported. Sorting the output by data-source and seqNo makes
1753 dnl it deterministic. Ensuring that we send at least two packets
1754 dnl into each port means we get to check the seq nos are
1755 dnl incrementing correctly.
1757 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)'
1758 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)'
1759 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)'
1760 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)'
1761 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)'
1763 dnl sleep long enough to get more than one counter sample
1764 dnl from each datasource so we can check sequence numbers
1765 for i in `seq 1 30`; do
1766 ovs-appctl time/warp 100
1769 ovs-appctl -t test-sflow exit
1771 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1792 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
1812 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
1832 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
1852 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
1872 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
1875 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1889 in_broadcasts=4294967295
1892 in_unknownprotos=4294967295
1895 out_multicasts=4294967295
1896 out_broadcasts=4294967295
1912 in_broadcasts=4294967295
1915 in_unknownprotos=4294967295
1918 out_multicasts=4294967295
1919 out_broadcasts=4294967295
1935 in_broadcasts=4294967295
1938 in_unknownprotos=4294967295
1941 out_multicasts=4294967295
1942 out_broadcasts=4294967295
1958 in_broadcasts=4294967295
1961 in_unknownprotos=4294967295
1964 out_multicasts=4294967295
1965 out_broadcasts=4294967295
1981 in_broadcasts=4294967295
1984 in_unknownprotos=4294967295
1987 out_multicasts=4294967295
1988 out_broadcasts=4294967295
2004 in_broadcasts=4294967295
2007 in_unknownprotos=4294967295
2010 out_multicasts=4294967295
2011 out_broadcasts=4294967295
2020 dnl Test that basic NetFlow reports flow statistics correctly:
2021 dnl - The initial packet of a flow are correctly accounted.
2022 dnl - Later packets within a flow are correctly accounted.
2023 dnl - Flow actions changing (in this case, due to MAC learning)
2024 dnl cause a record to be sent.
2025 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
2027 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2028 ADD_OF_PORTS([br0], 1, 2)
2030 ovs-appctl time/stop
2031 ON_EXIT([kill `cat test-netflow.pid`])
2032 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2033 AT_CAPTURE_FILE([netflow.log])
2034 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2037 set Bridge br0 netflow=@nf -- \
2038 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2039 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2041 for delay in 1000 30000; do
2042 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)'
2043 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)'
2045 ovs-appctl time/warp $delay
2050 ovs-appctl -t test-netflow exit
2052 AT_CHECK([[sed -e 's/, uptime [0-9]*//
2054 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
2055 s/time [0-9]*\.\.\.[0-9]*/time <range>/
2056 ' netflow.log | sort]], [0],
2058 header: v5, seq 0, engine 2,1
2059 header: v5, seq 1, engine 2,1
2060 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
2061 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
2062 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
2066 dnl Test that basic NetFlow reports active expirations correctly.
2067 AT_SETUP([ofproto-dpif - NetFlow active expiration])
2069 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2070 ADD_OF_PORTS([br0], 1, 2)
2072 ON_EXIT([kill `cat test-netflow.pid`])
2073 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2074 AT_CAPTURE_FILE([netflow.log])
2075 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2078 set Bridge br0 netflow=@nf -- \
2079 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2080 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
2082 AT_CHECK([ovs-appctl time/stop])
2084 while test $n -le 60; do
2087 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)'
2088 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)'
2090 ovs-appctl time/warp 1000
2093 ovs-appctl time/warp 10000
2097 ovs-appctl -t test-netflow exit
2099 # Count the number of reported packets:
2100 # - From source to destination before MAC learning kicks in (just one).
2101 # - From source to destination after that.
2102 # - From destination to source.
2110 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
2117 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2120 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
2123 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
2130 eval $counter=\`expr \$$counter + \$pkts\`
2131 n_recs=`expr $n_recs + 1`
2134 # There should be exactly 1 MAC learning packet,
2135 # exactly 59 other packets in that direction,
2136 # and exactly 60 packets in the other direction.
2137 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
2140 # There should be 1 expiration for MAC learning,
2141 # at least 5 active and a final expiration in one direction,
2142 # and at least 5 active and a final expiration in the other direction.
2144 AT_CHECK([test $n_recs -ge 13])
2148 AT_SETUP([idle_age and hard_age increase over time])
2151 # get_ages DURATION HARD IDLE
2153 # Fetch the flow duration, hard age, and idle age into the variables
2154 # whose names are given as arguments. Rounds DURATION down to the
2155 # nearest integer. If hard_age doesn't appear in the output, sets
2156 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2159 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2161 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2162 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2163 AS_VAR_COPY([$1], [duration])
2165 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2166 if test X"$hard" = X; then
2169 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2171 AS_VAR_COPY([$2], [hard])
2173 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2174 if test X"$idle" = X; then
2177 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2179 AS_VAR_COPY([$3], [idle])
2182 # Add a flow and get its initial hard and idle age.
2183 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2184 get_ages duration1 hard1 idle1
2186 ovs-appctl time/stop
2187 # Warp time forward by 10 seconds, then modify the flow's actions.
2188 ovs-appctl time/warp 10000
2189 get_ages duration2 hard2 idle2
2190 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2192 # Warp time forward by 10 seconds.
2193 ovs-appctl time/warp 10000
2194 get_ages duration3 hard3 idle3
2196 # Warp time forward 10 more seconds, then pass some packets through the flow,
2197 # then warp forward a few more times because idle times are only updated
2199 ovs-appctl time/warp 10000
2200 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)'
2201 ovs-appctl time/warp 1000
2202 ovs-appctl time/warp 1000
2203 ovs-appctl time/warp 1000
2204 get_ages duration4 hard4 idle4
2206 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2207 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2208 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2210 # Duration should increase steadily over time.
2211 AT_CHECK([test $duration1 -lt $duration2])
2212 AT_CHECK([test $duration2 -lt $duration3])
2213 AT_CHECK([test $duration3 -lt $duration4])
2215 # Hard age should be "none" initially because it's the same as flow_duration,
2216 # then it should increase.
2217 AT_CHECK([test $hard1 = none])
2218 AT_CHECK([test $hard2 = none])
2219 AT_CHECK([test $hard3 != none])
2220 AT_CHECK([test $hard4 != none])
2221 AT_CHECK([test $hard3 -lt $hard4])
2223 # Idle age should increase from 1 to 2 to 3, then decrease.
2224 AT_CHECK([test $idle1 -lt $idle2])
2225 AT_CHECK([test $idle2 -lt $idle3])
2226 AT_CHECK([test $idle3 -gt $idle4])
2228 # Check some invariant relationships.
2229 AT_CHECK([test $duration1 = $idle1])
2230 AT_CHECK([test $duration2 = $idle2])
2231 AT_CHECK([test $duration3 = $idle3])
2232 AT_CHECK([test $idle3 -gt $hard3])
2233 AT_CHECK([test $idle4 -lt $hard4])
2234 AT_CHECK([test $hard4 -lt $duration4])
2239 AT_SETUP([ofproto-dpif - fin_timeout])
2241 AT_DATA([flows.txt], [dnl
2242 in_port=1 actions=output:2
2243 in_port=2 actions=mod_vlan_vid:17,output:1
2245 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2246 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2248 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2251 ovs-appctl time/stop
2252 # Check that a TCP SYN packet does not change the timeout. (Because
2253 # flow stats updates are mainly what implements the fin_timeout
2254 # feature, we warp forward a couple of times to ensure that flow stats
2255 # run before re-checking the flow table.)
2256 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2257 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2260 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2262 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2264 # Check that a TCP FIN packet does change the timeout.
2265 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2266 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2269 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2271 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2276 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2277 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2278 ADD_OF_PORTS([br0], [1], [2])
2279 ADD_OF_PORTS([br1], [3])
2281 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2288 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2289 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2290 ADD_OF_PORTS([br0], [1], [2])
2291 ADD_OF_PORTS([br1], [3])
2293 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2294 dummy@ovs-dummy: hit:0 missed:0
2295 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2297 br0 65534/100: (dummy)
2301 br1 65534/101: (dummy)
2307 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2308 OVS_VSWITCHD_START([add-br br1 -- \
2309 set bridge br1 datapath-type=dummy fail-mode=secure])
2310 ADD_OF_PORTS([br0], [1], [2])
2311 ADD_OF_PORTS([br1], [3])
2313 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)'])
2314 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)'])
2315 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)'])
2317 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2318 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))
2319 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))
2322 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2323 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))
2329 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2330 OVS_VSWITCHD_START([add-br br1 -- \
2331 set bridge br1 datapath-type=dummy fail-mode=secure])
2332 ADD_OF_PORTS([br0], [1], [2])
2333 ADD_OF_PORTS([br1], [3])
2335 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)'])
2336 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)'])
2337 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)'])
2339 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2340 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))
2341 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))
2344 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2345 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))
2348 AT_CHECK([ovs-appctl dpif/del-flows br0])
2349 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2352 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2353 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))
2359 AT_SETUP([ofproto-dpif - patch ports])
2360 OVS_VSWITCHD_START([add-br br1 \
2361 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2362 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2363 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2365 ADD_OF_PORTS([br0], [2])
2366 ADD_OF_PORTS([br1], [3])
2368 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2370 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2371 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2373 for i in $(seq 1 10); do
2374 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)'
2377 for i in $(seq 1 5); do
2378 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)'
2381 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2385 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2386 dummy@ovs-dummy: hit:13 missed:2
2387 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2389 br0 65534/100: (dummy)
2391 pbr0 1/none: (patch: peer=pbr1)
2393 br1 65534/101: (dummy)
2395 pbr1 1/none: (patch: peer=pbr0)
2398 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2399 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
2401 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2402 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
2405 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2406 OFPST_PORT reply (xid=0x4): 1 ports
2407 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2408 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2411 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2412 OFPST_PORT reply (xid=0x4): 1 ports
2413 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2414 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2420 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2421 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2422 ADD_OF_PORTS([br0], 1, 2)
2424 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2425 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2427 for i in $(seq 1 61); do
2428 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)'
2429 ovs-appctl time/warp 10000
2430 ovs-appctl time/warp 50000
2433 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2436 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2437 dummy@ovs-dummy: hit:0 missed:61
2438 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2439 br0: hit:0 missed:61
2440 br0 65534/100: (dummy)
2448 AT_SETUP([ofproto-dpif - port duration])
2449 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2450 ADD_OF_PORTS([br0], 1, 2)
2452 ovs-appctl time/stop
2453 ovs-appctl time/warp 10000
2455 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2456 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2458 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2459 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2460 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2462 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2463 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2465 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2466 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2472 dnl ----------------------------------------------------------------------
2473 AT_BANNER([ofproto-dpif -- megaflows])
2475 # Strips out uninteresting parts of megaflow output, as well as parts
2476 # that vary from one run to another (e.g., timing and bond actions).
2477 m4_define([STRIP_USED], [[sed '
2478 s/used:[0-9]*\.[0-9]*/used:0.0/
2480 m4_define([STRIP_XOUT], [[sed '
2481 s/used:[0-9]*\.[0-9]*/used:0.0/
2482 s/Datapath actions:.*/Datapath actions: <del>/
2485 AT_SETUP([ofproto-dpif megaflow - port classification])
2487 ADD_OF_PORTS([br0], [1], [2])
2488 AT_DATA([flows.txt], [dnl
2489 table=0 in_port=1 actions=output(2)
2491 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2492 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)'])
2493 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)'])
2494 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2495 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2500 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2502 ADD_OF_PORTS([br0], [1], [2])
2503 AT_DATA([flows.txt], [dnl
2504 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2506 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2507 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)'])
2508 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)'])
2509 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2510 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>
2511 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>
2516 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2518 ADD_OF_PORTS([br0], [1], [2])
2519 AT_DATA([flows.txt], [dnl
2520 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2522 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2523 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)'])
2524 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)'])
2525 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2526 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>
2527 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>
2532 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2534 ADD_OF_PORTS([br0], [1], [2])
2535 AT_DATA([flows.txt], [dnl
2536 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2538 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2539 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)'])
2540 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)'])
2541 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2542 skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2547 AT_SETUP([ofproto-dpif megaflow - normal])
2549 ADD_OF_PORTS([br0], [1], [2])
2550 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2551 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)'])
2552 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)'])
2553 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2554 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>
2555 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>
2560 AT_SETUP([ofproto-dpif megaflow - mpls])
2562 ADD_OF_PORTS([br0], [1], [2])
2563 AT_DATA([flows.txt], [dnl
2564 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2565 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2567 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2568 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)'])
2569 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)'])
2570 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2571 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>
2572 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>
2577 AT_SETUP([ofproto-dpif megaflow - netflow])
2579 ADD_OF_PORTS([br0], [1], [2])
2581 dnl NetFlow configuration disables wildcarding relevant fields
2582 ON_EXIT([kill `cat test-netflow.pid`])
2583 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2584 AT_CAPTURE_FILE([netflow.log])
2585 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2587 set Bridge br0 netflow=@nf -- \
2588 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2589 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2591 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
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(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)'])
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: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)'])
2594 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2595 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>
2596 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>
2601 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2603 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2604 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2605 set interface p2 type=dummy ofport_request=2 -- \
2606 set interface p3 type=dummy ofport_request=3])
2607 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2610 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2611 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)'])
2612 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)'])
2613 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2614 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>
2615 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>
2620 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2622 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2623 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2624 set interface p2 type=dummy ofport_request=2 -- \
2625 set interface p3 type=dummy ofport_request=3])
2626 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2629 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2630 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)'])
2631 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)'])
2632 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2633 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>
2634 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>
2639 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2640 # Create bond0 on br0 with interfaces p0 and p1
2641 # and bond1 on br1 with interfaces p2 and p3
2642 # with p0 patched to p2 and p1 patched to p3.
2644 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2645 other-config:lacp-time=fast \
2646 other-config:bond-rebalance-interval=0 -- \
2647 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2648 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2650 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2651 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2652 fail-mode=secure -- \
2653 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2654 other-config:lacp-time=fast \
2655 other-config:bond-rebalance-interval=0 -- \
2656 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2657 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2659 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2661 ADD_OF_PORTS([br0], [7])
2662 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2663 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2664 ovs-appctl time/stop
2665 ovs-appctl time/warp 5000
2666 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)'])
2667 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)'])
2669 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2670 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>
2671 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>
2676 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2678 ADD_OF_PORTS([br0], [1], [2])
2679 AT_DATA([flows.txt], [dnl
2680 table=0 in_port=1,ip actions=resubmit(90)
2681 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2683 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2684 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)'])
2685 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)'])
2686 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2687 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>
2688 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>
2693 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2695 ADD_OF_PORTS([br0], [1], [2])
2696 AT_DATA([flows.txt], [dnl
2697 table=0 in_port=1,ip actions=resubmit(,1)
2698 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2700 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2701 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)'])
2702 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=
2703 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2704 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2705 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>
2706 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>
2711 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2713 ADD_OF_PORTS([br0], [1], [2])
2714 AT_DATA([flows.txt], [dnl
2715 table=0 in_port=1,ip actions=goto_table(1)
2716 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2718 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2719 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)'])
2720 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)'])
2721 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2722 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>
2723 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>
2728 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2730 ADD_OF_PORTS([br0], [1], [2], [3])
2732 set Bridge br0 mirrors=@m --\
2733 --id=@p3 get Port p3 --\
2734 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2736 AT_DATA([flows.txt], [dnl
2737 in_port=1 actions=output:2
2739 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2740 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)'])
2741 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)'])
2742 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2743 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2748 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2750 ADD_OF_PORTS([br0], [1], [2], [3])
2752 set Bridge br0 mirrors=@m --\
2753 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2754 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2756 AT_DATA([flows.txt], [dnl
2757 in_port=1 actions=output:2
2759 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2760 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))'])
2761 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)'])
2762 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2763 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2764 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2769 AT_SETUP([ofproto-dpif megaflow - move action])
2771 ADD_OF_PORTS([br0], [1], [2])
2772 AT_DATA([flows.txt], [dnl
2773 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2774 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2775 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2777 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2778 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)'])
2779 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)'])
2780 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2781 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>
2782 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>
2787 AT_SETUP([ofproto-dpif megaflow - push action])
2789 ADD_OF_PORTS([br0], [1], [2])
2790 AT_DATA([flows.txt], [dnl
2791 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2793 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2794 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)'])
2795 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)'])
2796 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2797 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>
2798 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>
2803 AT_SETUP([ofproto-dpif megaflow - learning])
2805 ADD_OF_PORTS([br0], [1], [2])
2806 AT_DATA([flows.txt], [dnl
2807 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
2809 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2810 ovs-appctl time/stop
2811 # We send each packet twice because the first packet in each flow causes the
2812 # flow table to change and thus revalidations, which (depending on timing)
2813 # can keep a megaflow from being installed. The revalidations are done by
2814 # the second iteration, allowing the flows to be installed.
2816 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)'])
2817 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)'])
2818 ovs-appctl time/warp 100
2820 dnl The original flow is missing due to a revalidation.
2821 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2822 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>
2823 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>
2828 AT_SETUP([ofproto-dpif megaflow - tunnels])
2830 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2831 ofport_request=1 -- \
2832 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2833 ofport_request=2 options:key=flow -- \
2834 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2835 ofport_request=3 -- \
2836 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2837 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2838 AT_DATA([flows.txt], [dnl
2839 in_port=1,actions=output(2)
2840 in_port=3,actions=output(4)
2842 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2843 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2844 dnl will cause the packet to be dropped.
2845 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)'])
2846 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)'])
2847 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)'])
2848 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)'])
2849 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2850 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2851 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>
2852 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>
2857 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2859 ADD_OF_PORTS([br0], [1], [2])
2860 AT_DATA([flows.txt], [dnl
2861 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2863 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2864 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)'])
2865 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)'])
2866 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2867 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>
2868 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>
2873 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2875 ADD_OF_PORTS([br0], [1], [2])
2876 AT_DATA([flows.txt], [dnl
2877 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2879 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2880 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)'])
2881 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)'])
2882 dnl The megaflows do not match the same fields, since the first packet
2883 dnl is essentially a no-op. (The new destination MAC is the same as the
2884 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2885 dnl so that a packet that doesn't need its MAC address changed doesn't
2886 dnl hide one that does. Since the first entry doesn't need to change,
2887 dnl only the destination MAC address is matched (as decided by
2888 dnl ofproto-dpif). The second entry actually updates the destination
2889 dnl MAC, so both the source and destination MAC addresses are
2890 dnl un-wildcarded, since the ODP commit functions update both the source
2891 dnl and destination MAC addresses.
2892 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_USED], [0], [dnl
2893 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
2894 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
2899 AT_SETUP([ofproto-dpif - datapath port number change])
2900 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2901 ADD_OF_PORTS([br0], 1)
2903 # Trace a flow that should output to p1.
2904 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2906 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
2909 # Change p1's port number to 5.
2910 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
2912 # Trace a flow that should output to p1 in its new location.
2913 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2915 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
2920 # Tests the bundling with various bfd and cfm configurations.
2921 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
2922 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
2923 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
2924 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
2925 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
2926 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
2927 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
2928 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
2929 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
2930 set Interface p0 cfm_mpid=1 -- \
2931 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
2933 ovs-appctl time/stop
2934 # advance the clock to stablize everything.
2935 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2936 # cfm/show should show 'recv' fault.
2937 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2940 # bfd/show should show 'up'.
2941 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2942 Local Session State: up
2943 Remote Session State: up
2944 Local Session State: up
2945 Remote Session State: up
2947 # bond/show should show 'may-enable: true' for all slaves.
2948 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2955 # now disable the bfd on p1.
2956 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
2957 # advance the clock to stablize everything.
2958 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2959 # cfm/show should show 'recv' fault.
2960 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2963 # bfd/show should show 'down'.
2964 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2965 Local Session State: down
2966 Remote Session State: down
2968 # bond/show should show 'may-enable: false' for p0.
2969 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2976 # now enable the bfd on p1 and disable bfd on p0.
2977 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
2978 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
2979 # advance the clock to stablize everything.
2980 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2981 # cfm/show should show 'recv' fault.
2982 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2985 # bfd/show should show 'down'.
2986 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2987 Local Session State: down
2988 Remote Session State: down
2990 # bond/show should show 'may-enable: false' for p0 and p1.
2991 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
3001 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
3002 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
3005 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3007 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3008 monitor thread created
3010 # disable bfd on p0.
3011 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3013 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3014 monitor thread terminated
3016 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3019 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
3021 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3022 monitor thread created
3024 # disable cfm on p0.
3025 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
3027 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3028 monitor thread terminated
3030 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
3032 # enable both bfd and cfm on p0.
3033 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
3035 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3036 monitor thread created
3038 # disable bfd on p0.
3039 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
3040 # check log, there should not be the log of thread terminated.
3041 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3043 # reenable bfd on p0.
3044 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
3045 # check log, should still be on log of thread created.
3046 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3047 monitor thread created
3049 # disable bfd and cfm together.
3050 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
3052 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
3053 monitor thread terminated
3059 # this test helps avoid the deadlock between the main thread and monitor thread.
3060 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
3063 for i in `seq 1 199`
3065 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])
3071 AT_BANNER([ofproto-dpif - flow translation resource limits])
3073 AT_SETUP([ofproto-dpif - infinite resubmit])
3075 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
3076 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
3078 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
3080 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
3083 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
3086 AT_SETUP([ofproto-dpif - exponential resubmit chain])
3088 ADD_OF_PORTS([br0], 1)
3089 (for i in `seq 1 64`; do
3091 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3093 echo "in_port=65, actions=local") > flows
3094 AT_CHECK([ovs-ofctl add-flows br0 flows])
3095 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3096 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
3098 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
3101 AT_SETUP([ofproto-dpif - too many output actions])
3103 ADD_OF_PORTS([br0], 1)
3104 (for i in `seq 1 12`; do
3106 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3108 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
3109 AT_CHECK([ovs-ofctl add-flows br0 flows])
3110 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3111 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
3114 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
3116 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
3119 AT_SETUP([ofproto-dpif - stack too deep])
3121 ADD_OF_PORTS([br0], 1)
3122 (for i in `seq 1 12`; do
3124 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
3126 push="push:NXM_NX_REG0[[]]"
3127 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
3128 AT_CHECK([ovs-ofctl add-flows br0 flows])
3129 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
3130 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
3132 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])