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 - registers])
39 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
40 AT_DATA([flows.txt], [dnl
41 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
42 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
43 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
44 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
46 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
47 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
48 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
49 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
50 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
51 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
52 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
53 in_port=9,reg0=0xdeadbeef actions=output:20
54 in_port=10,reg1=0xdeadbeef actions=output:21
55 in_port=11,reg2=0xeef22dea actions=output:22
57 dnl Sanilty check all registers
58 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
59 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
60 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
61 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
64 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
65 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
66 AT_CHECK([tail -1 stdout], [0],
67 [Datapath actions: 20,21,22,33
72 AT_SETUP([ofproto-dpif - push-pop])
74 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
75 AT_DATA([flows.txt], [dnl
76 in_port=90 actions=load:20->NXM_NX_REG0[[0..7]],load:21->NXM_NX_REG1[[0..7]],load:22->NXM_NX_REG2[[0..7]], load:33->NXM_NX_REG3[[0..7]], push:NXM_NX_REG0[[]], push:NXM_NX_REG1[[0..7]],push:NXM_NX_REG2[[0..15]], push:NXM_NX_REG3[[]], resubmit:2, resubmit:3, resubmit:4, resubmit:5
77 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
78 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
79 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
80 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
83 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
84 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
85 AT_CHECK([tail -1 stdout], [0],
86 [Datapath actions: 33,22,21,20
91 AT_SETUP([ofproto-dpif - output])
93 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
94 AT_DATA([flows.txt], [dnl
95 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
96 in_port=2 actions=output:9
97 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
98 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
99 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
100 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
101 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
102 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
104 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
105 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
106 AT_CHECK([tail -1 stdout], [0],
107 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
112 AT_SETUP([ofproto-dpif - dec_ttl])
114 ADD_OF_PORTS([br0], [1], [2], [3], [4])
115 AT_DATA([flows.txt], [dnl
116 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
117 table=1 in_port=1 action=dec_ttl,output:3
119 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
120 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
121 AT_CHECK([tail -3 stdout], [0],
122 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
123 This flow is handled by the userspace slow path because it:
124 - Sends "packet-in" messages to the OpenFlow controller.
126 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=3,frag=no)'], [0], [stdout])
127 AT_CHECK([tail -1 stdout], [0],
128 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),3,4
130 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
131 AT_CHECK([tail -1 stdout], [0],
132 [Datapath actions: set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=127,frag=no)),2,set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=126,frag=no)),3,4
135 AT_CAPTURE_FILE([ofctl_monitor.log])
136 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
137 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
138 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
139 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
140 NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
141 icmp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=1,icmp_type=0,icmp_code=0
147 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
149 ADD_OF_PORTS([br0], [1], [2])
151 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
153 # "in_port" defaults to OFPP_NONE if it's not specified.
154 flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,icmp_type=8,icmp_code=0"
155 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
156 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
165 AT_SETUP([ofproto-dpif - DSCP])
166 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
167 ADD_OF_PORTS([br0], [9])
168 AT_DATA([flows.txt], [dnl
169 actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
171 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
172 AT_CHECK([ovs-vsctl -- \
173 set Port p1 qos=@newqos --\
174 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
175 --id=@q1 create Queue dscp=1 --\
176 --id=@q2 create Queue dscp=2], [0], [ignore])
177 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
178 AT_CHECK([tail -1 stdout], [0],
179 [Datapath actions: dnl
181 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
182 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(skb_priority(0x2)),1,dnl
184 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(skb_priority(0x1)),1,dnl
185 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(skb_priority(0)),1,dnl
186 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
192 AT_SETUP([ofproto-dpif - output/flood flags])
194 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
196 AT_DATA([flows.txt], [dnl
197 in_port=local actions=local,flood
198 in_port=1 actions=flood
199 in_port=2 actions=all
200 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
201 in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
203 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
204 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
205 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
207 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
208 AT_CHECK([tail -1 stdout \
209 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
217 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
218 AT_CHECK([tail -1 stdout \
219 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
227 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
228 AT_CHECK([tail -1 stdout \
229 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
238 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
239 AT_CHECK([tail -1 stdout], [0],
240 [Datapath actions: 100,1,2,4,6,7
243 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
244 AT_CHECK([tail -1 stdout], [0],
245 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
250 AT_SETUP([ofproto-dpif - controller])
251 OVS_VSWITCHD_START([dnl
252 add-port br0 p1 -- set Interface p1 type=dummy
254 ON_EXIT([kill `cat ovs-ofctl.pid`])
256 AT_CAPTURE_FILE([ofctl_monitor.log])
257 AT_DATA([flows.txt], [dnl
258 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
259 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
260 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
262 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
263 cookie=0x4 table=2 in_port=81 actions=load:2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,controller,resubmit(82,3)
264 cookie=0x5 table=3 in_port=82 actions=load:3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,controller,resubmit(83,4)
265 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
266 cookie=0x7 table=5 in_port=84 actions=load:5->NXM_NX_REG4[[]],load:6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,controller,resubmit(85,6)
267 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
268 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
269 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
270 cookie=0xa dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
271 cookie=0xa dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,controller
272 cookie=0xa dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
273 cookie=0xa dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
274 cookie=0xa dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,controller
275 cookie=0xa dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),controller
276 cookie=0xa dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),controller
277 cookie=0xa dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,controller
278 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
279 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
280 cookie=0xc dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:1000->OXM_OF_MPLS_LABEL[[]],load:7->OXM_OF_MPLS_TC[[]],controller
282 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
285 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
288 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'
290 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
291 ovs-appctl -t ovs-ofctl exit
293 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
294 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
295 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
297 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
298 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
300 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
301 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
304 dnl Singleton controller action.
305 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
308 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=10:11:11:11:11:11,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10)'
310 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
311 ovs-appctl -t ovs-ofctl exit
313 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
314 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
315 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
317 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
318 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
320 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
321 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
324 dnl Modified controller action.
325 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
328 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=30:33:33:33:33:33,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=10)'
330 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
331 ovs-appctl -t ovs-ofctl exit
333 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
334 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
335 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
337 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
338 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
340 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
341 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
344 dnl Modified VLAN controller action.
345 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
348 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:41,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
350 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
351 ovs-appctl -t ovs-ofctl exit
353 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
354 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
355 tcp,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64 tcp_csum:0
357 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
358 tcp,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64 tcp_csum:0
360 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
361 tcp,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64 tcp_csum:0
364 dnl Modified MPLS controller action.
365 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
368 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
370 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
371 ovs-appctl -t ovs-ofctl exit
373 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
374 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
375 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
377 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
378 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
380 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
381 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
384 dnl Modified MPLS controller action.
385 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
388 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=41:44:44:44:44:42,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
390 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
391 ovs-appctl -t ovs-ofctl exit
393 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
394 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
395 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64 tcp_csum:0
397 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
398 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64 tcp_csum:0
400 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
401 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64 tcp_csum:0
404 dnl Modified MPLS controller action.
405 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
407 dnl in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=3,ttl=64,bos=1)
410 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:43,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'
413 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
414 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
415 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
416 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
418 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
419 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
421 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
422 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
425 dnl Modified MPLS controller action.
426 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
429 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:44,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=99,pcp=7),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no))'
431 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
432 ovs-appctl -t ovs-ofctl exit
434 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
435 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
436 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
438 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
439 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
441 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
442 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
445 dnl Modified MPLS controller action.
446 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
449 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:45,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
451 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
452 ovs-appctl -t ovs-ofctl exit
454 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
455 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
456 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
458 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
459 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
461 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
462 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
465 dnl Modified MPLS controller action.
466 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
469 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:46,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
471 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
472 ovs-appctl -t ovs-ofctl exit
474 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
475 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
476 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
478 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
479 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
481 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
482 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
485 dnl Modified MPLS controller action.
486 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
489 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:47,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
491 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
492 ovs-appctl -t ovs-ofctl exit
494 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
495 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
496 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
498 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
499 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
501 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
502 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
505 dnl Modified MPLS controller action.
506 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
509 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:48,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
511 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
512 ovs-appctl -t ovs-ofctl exit
514 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
515 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
516 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
518 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
519 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
521 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
522 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
525 dnl Modified MPLS actions.
526 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
529 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:55:55:55:55:55,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=100,tc=7,ttl=64,bos=1)'
531 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
532 ovs-appctl -t ovs-ofctl exit
534 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
535 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
536 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
538 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
539 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
541 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
542 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
545 dnl Modified MPLS ipv6 controller action.
546 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
549 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=70:77:77:77:77:77,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
551 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
552 ovs-appctl -t ovs-ofctl exit
554 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
555 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
556 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
558 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
559 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
561 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
562 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
566 dnl Modified MPLS pop action.
567 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
568 dnl 60:66:66:66:66:66 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
569 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
571 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
574 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 66 66 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
577 # ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=60:66:66:66:66:66,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=3,ttl=100,bos=1)'
579 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
580 ovs-appctl -t ovs-ofctl exit
582 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
583 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
584 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0 tcp_csum:7744
586 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
587 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0 tcp_csum:7744
589 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
590 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:66:66,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=80,tp_dst=0 tcp_csum:7744
594 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
597 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=20:22:22:22:22:22,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=11)'
599 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
600 ovs-appctl -t ovs-ofctl exit
602 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
603 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
604 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:0
606 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
607 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:0
609 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered)
610 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:0
612 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered)
613 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:0
615 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered)
616 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:1a03
618 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
619 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=11 tcp_csum:3205
621 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
622 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=11 tcp_csum:31b8
624 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
625 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86 tcp_csum:316d
627 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
628 tcp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=85,tp_dst=86 tcp_csum:316d
632 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
635 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 1C 00 00 00 00 00 11 00 00 C0 A8 00 01 C0 A8 00 02 00 08 00 0B 00 00 12 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
637 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
638 ovs-appctl -t ovs-ofctl exit
640 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
641 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
642 udp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
644 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
645 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
647 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered)
648 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
650 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered)
651 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:1234
653 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered)
654 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:2c37
656 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
657 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=8,tp_dst=11 udp_csum:4439
659 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
660 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=11 udp_csum:43ec
662 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
663 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
665 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
666 udp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 udp_csum:43a1
670 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
673 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
676 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 24 00 00 00 00 00 84 00 00 C0 A8 00 01 C0 A8 00 02 04 58 08 af 00 00 00 00 d9 d7 91 57 01 00 00 34 cf 28 ec 4e 00 01 40 00 00 0a ff ff b7 53 24 19 00 05 00 08 7f 00 00 01 00 05 00 08 c0 a8 02 07 00 0c 00 06 00 05 00 00 80 00 00 04 c0 00 00 04'
679 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
680 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
681 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
682 sctp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
684 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
685 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=20:22:22:22:22:22,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
687 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=102 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=102 (unbuffered)
688 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
690 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=102 (unbuffered)
691 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
693 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=102 (unbuffered)
694 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
696 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
697 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1112,tp_dst=2223 sctp_csum:d9d79157
699 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
700 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=2223 sctp_csum:7f12662e
702 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
703 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
705 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
706 sctp,metadata=0,in_port=0,dl_vlan=80,dl_vlan_pcp=0,dl_src=80:81:81:81:81:81,dl_dst=82:82:82:82:82:82,nw_src=83.83.83.83,nw_dst=84.84.84.84,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=85,tp_dst=86 sctp_csum:a7e86f67
709 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
710 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
711 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
712 cookie=0x3, table=1, n_packets=3, n_bytes=218, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
713 cookie=0x4, table=2, n_packets=3, n_bytes=218, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
714 cookie=0x5, table=3, n_packets=3, n_bytes=218, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
715 cookie=0x6, table=4, n_packets=3, n_bytes=218, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
716 cookie=0x7, table=5, n_packets=3, n_bytes=218, in_port=84 actions=load:0x5->NXM_NX_REG4[[]],load:0x6->NXM_NX_TUN_ID[[]],mod_nw_dst:84.84.84.84,CONTROLLER:65535,resubmit(85,6)
717 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
718 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
719 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
720 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
721 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:43 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
722 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:44 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
723 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:45 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,CONTROLLER:65535
724 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:46 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),CONTROLLER:65535
725 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:47 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],dec_mpls_ttl,set_mpls_ttl(10),CONTROLLER:65535
726 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:48 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],set_mpls_ttl(10),dec_mpls_ttl,CONTROLLER:65535
727 cookie=0xa, n_packets=3, n_bytes=180, dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,CONTROLLER:65535
728 cookie=0xb, n_packets=3, n_bytes=180, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
729 cookie=0xc, n_packets=3, n_bytes=180, dl_src=70:77:77:77:77:77 actions=push_mpls:0x8848,load:0x3e8->OXM_OF_MPLS_LABEL[[]],load:0x7->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
730 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
731 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
738 AT_SETUP([ofproto-dpif - VLAN handling])
740 [set Bridge br0 fail-mode=standalone -- \
741 add-port br0 p1 trunks=10,12 -- \
742 add-port br0 p2 tag=10 -- \
743 add-port br0 p3 tag=12 \
744 other-config:priority-tags=true -- \
745 add-port br0 p4 tag=12 -- \
746 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
747 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
748 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
749 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
750 other-config:priority-tags=true -- \
751 set Interface p1 type=dummy -- \
752 set Interface p2 type=dummy -- \
753 set Interface p3 type=dummy -- \
754 set Interface p4 type=dummy -- \
755 set Interface p5 type=dummy -- \
756 set Interface p6 type=dummy -- \
757 set Interface p7 type=dummy -- \
758 set Interface p8 type=dummy --])
760 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
761 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
767 "100 10 0 1,5,6,7,8,pop_vlan,2" \
768 "100 10 1 1,5,6,7,8,pop_vlan,2" \
771 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
772 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
776 "1 10 0 5,6,7,8,100,pop_vlan,2" \
777 "1 10 1 5,6,7,8,100,pop_vlan,2" \
780 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
781 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
782 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
783 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
784 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
791 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
792 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
793 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
800 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
801 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
802 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
809 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
810 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
811 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
812 "5 10 0 1,6,7,8,100,pop_vlan,2" \
813 "5 10 1 1,6,7,8,100,pop_vlan,2" \
816 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
817 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
818 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
819 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
820 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
821 "6 10 0 1,5,7,8,100,pop_vlan,2" \
822 "6 10 1 1,5,7,8,100,pop_vlan,2" \
825 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
826 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
827 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
828 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
829 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
830 "7 10 0 1,5,6,8,100,pop_vlan,2" \
831 "7 10 1 1,5,6,8,100,pop_vlan,2" \
834 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
835 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
836 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
837 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
838 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
839 "8 10 0 1,5,6,7,100,pop_vlan,2" \
840 "8 10 1 1,5,6,7,100,pop_vlan,2" \
843 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
844 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
852 if test $vlan = none; then
853 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
855 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8100),vlan(vid=$vlan,pcp=$pcp),encap(eth_type(0xabcd))"
858 echo "----------------------------------------------------------------------"
859 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
861 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
862 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
864 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
866 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
872 AT_SETUP([ofproto-dpif - fragment handling])
874 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
875 AT_DATA([flows.txt], [dnl
876 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
877 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
878 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
879 priority=50 tcp ip_frag=no actions=output:4
880 priority=50 tcp ip_frag=first actions=output:5
881 priority=50 tcp ip_frag=later actions=output:6
883 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
885 base_flow="in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=128"
886 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
887 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
888 later_flow="$base_flow,frag=later)"
890 # mode no first later
902 AT_CHECK([ovs-ofctl set-frags br0 $mode])
903 for type in no first later; do
904 eval flow=\$${type}_flow exp_output=\$$type
905 printf "\n%s\n" "----$mode $type-----"
906 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
908 if test $mode = drop && test $type != no; then
909 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
911 echo "Datapath actions: $exp_output" >> expout
912 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
918 AT_SETUP([ofproto-dpif - exit])
920 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
921 AT_DATA([flows.txt], [dnl
922 in_port=1 actions=output:10,exit,output:11
923 in_port=2 actions=output:12,resubmit:1,output:12
924 in_port=3 actions=output:13,resubmit:2,output:14
926 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
927 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
928 AT_CHECK([tail -1 stdout], [0],
929 [Datapath actions: 10
931 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
932 AT_CHECK([tail -1 stdout], [0],
933 [Datapath actions: 12,10
935 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
936 AT_CHECK([tail -1 stdout], [0],
937 [Datapath actions: 13,12,10
943 AT_SETUP([ofproto-dpif - mirroring, select_all])
945 ADD_OF_PORTS([br0], 1, 2, 3)
947 set Bridge br0 mirrors=@m --\
948 --id=@p3 get Port p3 --\
949 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
951 AT_DATA([flows.txt], [dnl
952 in_port=1 actions=output:2
953 in_port=2 actions=output:1
955 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
957 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
958 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
959 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
960 [Datapath actions: 2,3
963 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
964 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
965 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
966 [Datapath actions: 1,3
973 AT_SETUP([ofproto-dpif - mirroring, select_src])
975 ADD_OF_PORTS([br0], 1, 2, 3)
977 set Bridge br0 mirrors=@m --\
978 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
979 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
981 AT_DATA([flows.txt], [dnl
982 in_port=1 actions=output:2
983 in_port=2 actions=output:1
985 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
987 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
988 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
989 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
990 [Datapath actions: 2,3
993 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
994 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
995 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1001 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
1003 ADD_OF_PORTS([br0], 1, 2)
1005 set Bridge br0 mirrors=@m --\
1006 --id=@p2 get Port p2 --\
1007 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
1009 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
1011 # "in_port" defaults to OFPP_NONE if it's not specified.
1012 flow="icmp,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_ttl=128,icmp_type=8,icmp_code=0"
1013 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1014 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1015 [Datapath actions: 1,2
1022 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1024 ADD_OF_PORTS([br0], 1, 2, 3)
1026 set Bridge br0 mirrors=@m --\
1027 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1028 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1030 AT_DATA([flows.txt], [dnl
1031 in_port=1 actions=output:2
1032 in_port=2 actions=output:1
1034 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1036 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
1037 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1038 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1039 [Datapath actions: 2,3
1042 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
1043 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1044 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1045 [Datapath actions: 1
1052 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1054 ADD_OF_PORTS([br0], 1, 2, 3)
1056 set Bridge br0 mirrors=@m --\
1057 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1058 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1060 AT_DATA([flows.txt], [dnl
1061 in_port=1, actions=output:2
1063 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1065 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
1066 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1067 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1068 [Datapath actions: 2
1071 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=10,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
1072 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1073 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1074 [Datapath actions: 2
1077 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=11,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0))"
1078 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1079 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1080 [Datapath actions: 2,3
1087 AT_SETUP([ofproto-dpif - mirroring, output_port])
1089 ADD_OF_PORTS([br0], 1, 2, 3)
1091 set Bridge br0 mirrors=@m --\
1092 --id=@p3 get Port p3 --\
1093 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1095 AT_DATA([flows.txt], [dnl
1096 in_port=1 actions=mod_vlan_vid:17,output:2
1097 in_port=2 actions=output:1
1099 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1101 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
1102 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1103 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1104 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1107 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
1108 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1109 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1110 [Datapath actions: 1,3
1116 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1118 ADD_OF_PORTS([br0], 1, 2)
1120 set Bridge br0 mirrors=@m --\
1121 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1123 AT_DATA([flows.txt], [dnl
1124 in_port=1 actions=output:2
1125 in_port=2 actions=mod_vlan_vid:17,output:1
1127 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1129 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
1130 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1131 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1133 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1134 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1136 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1138 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
1139 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1140 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1142 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1143 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1145 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1150 # Two testcases below are for the ofproto/trace command
1151 # The first one tests all correct syntax:
1152 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1153 # ofproto/trace br_name br_flow [-generate|packet]
1154 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1155 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1156 ADD_OF_PORTS([br0], 1, 2, 3)
1158 AT_DATA([flows.txt], [dnl
1159 in_port=1 actions=output:2
1160 in_port=2 actions=output:1
1162 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1164 odp_flow="in_port(1)"
1166 # Test command: ofproto/trace odp_flow
1167 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1168 AT_CHECK([tail -1 stdout], [0], [dnl
1172 # Test command: ofproto/trace dp_name odp_flow
1173 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1174 AT_CHECK([tail -1 stdout], [0], [dnl
1177 # Test commmand: ofproto/trace br_name br_flow
1178 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1179 AT_CHECK([tail -1 stdout], [0], [dnl
1183 # Delete the inserted flows
1184 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1185 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1187 # This section beflow tests the [-generate] option
1188 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1189 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"
1191 # Test command: ofproto/trace odp_flow
1192 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1193 # Check for no MAC learning entry
1194 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1198 # Test command: ofproto/trace br_name br_flow
1199 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1200 # Check for no MAC learning entry
1201 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1205 # Test command: ofproto/trace odp_flow -generate
1206 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1207 # Check for the MAC learning entry
1208 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1210 3 0 50:54:00:00:00:05 ?
1213 # Test command: ofproto/trace dp_name odp_flow -generate
1214 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1215 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1216 -generate], [0], [stdout])
1217 # Check for both MAC learning entries
1218 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1220 3 0 50:54:00:00:00:05 ?
1221 1 0 50:54:00:00:00:06 ?
1224 # Test command: ofproto/trace br_name br_flow -generate
1225 AT_CHECK([ovs-appctl ofproto/trace br0 \
1226 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1227 -generate], [0], [stdout])
1228 # Check for both MAC learning entries.
1229 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1231 3 0 50:54:00:00:00:05 ?
1232 1 0 50:54:00:00:00:06 ?
1233 2 0 50:54:00:00:00:07 ?
1236 # This section beflow tests the [packet] option
1237 # The ovs-tcpundump of packets between port1 and port2
1238 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1239 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1241 # Construct the MAC learning table
1242 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1243 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1244 -generate], [0], [stdout])
1246 # Construct the MAC learning table
1247 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1248 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1249 -generate], [0], [stdout])
1251 # Test command: ofproto/trace odp_flow packet
1252 AT_CHECK([ovs-appctl ofproto/trace \
1253 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1254 AT_CHECK([tail -1 stdout], [0], [dnl
1257 AT_CHECK([head -n 3 stdout], [0], [dnl
1259 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
1260 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
1263 # Test command: ofproto/trace dp_name odp_flow packet
1264 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1265 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1266 AT_CHECK([tail -1 stdout], [0], [dnl
1269 AT_CHECK([head -n 3 stdout], [0], [dnl
1271 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
1272 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
1275 # Test command: ofproto/trace br_name br_flow packet
1276 AT_CHECK([ovs-appctl ofproto/trace br0 \
1277 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1278 AT_CHECK([tail -1 stdout], [0], [dnl
1281 AT_CHECK([head -n 2 stdout], [0], [dnl
1282 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
1283 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
1289 # The second test tests the corner cases
1290 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1292 ADD_OF_PORTS([br0], 1, 2)
1295 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1296 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1298 generate="-generate"
1299 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1301 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1307 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1309 AT_CHECK([tail -2 stderr], [0], [dnl
1310 Cannot find datapath of this name
1311 ovs-appctl: ovs-vswitchd: server returned an error
1314 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1320 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1322 AT_CHECK([tail -2 stderr], [0], [dnl
1323 Cannot find datapath of this name
1324 ovs-appctl: ovs-vswitchd: server returned an error
1327 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1333 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1335 AT_CHECK([tail -2 stderr], [0], [dnl
1336 Cannot find datapath of this name
1337 ovs-appctl: ovs-vswitchd: server returned an error
1340 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1346 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1348 AT_CHECK([tail -2 stderr], [0], [dnl
1349 Cannot find datapath of this name
1350 ovs-appctl: ovs-vswitchd: server returned an error
1353 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1359 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1361 AT_CHECK([tail -2 stderr], [0], [dnl
1363 ovs-appctl: ovs-vswitchd: server returned an error
1366 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1372 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1374 AT_CHECK([tail -2 stderr], [0], [dnl
1375 Must specify bridge name
1376 ovs-appctl: ovs-vswitchd: server returned an error
1379 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1380 AT_CHECK([ovs-appctl ofproto/trace \
1381 ovs-dummy "$odp_flow" garbage_option],
1382 [2], [stdout],[stderr])
1383 AT_CHECK([tail -2 stderr], [0], [dnl
1384 Trailing garbage in packet data
1385 ovs-appctl: ovs-vswitchd: server returned an error
1388 # Test incorrect command: ofproto/trace with 4 arguments
1389 AT_CHECK([ovs-appctl ofproto/trace \
1390 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1391 AT_CHECK([tail -2 stderr], [0], [dnl
1392 "ofproto/trace" command takes at most 3 arguments
1393 ovs-appctl: ovs-vswitchd: server returned an error
1396 # Test incorrect command: ofproto/trace with 0 argument
1397 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1398 AT_CHECK([tail -2 stderr], [0], [dnl
1399 "ofproto/trace" command requires at least 1 arguments
1400 ovs-appctl: ovs-vswitchd: server returned an error
1406 m4_define([OFPROTO_TRACE],
1408 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1409 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1411 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1414 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1417 AT_SETUP([ofproto-dpif - MAC learning])
1418 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1419 ADD_OF_PORTS([br0], 1, 2, 3)
1421 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)'
1423 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1426 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1430 # Check for the MAC learning entry.
1431 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1433 3 0 50:54:00:00:00:05 ?
1436 # Trace a packet arrival destined for the learned MAC.
1437 # (This will also learn a MAC.)
1440 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1444 # Check for both MAC learning entries.
1445 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1447 3 0 50:54:00:00:00:05 ?
1448 1 0 50:54:00:00:00:06 ?
1451 # Trace a packet arrival that updates the first learned MAC entry.
1454 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1458 # Check that the MAC learning entry was updated.
1459 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1461 1 0 50:54:00:00:00:06 ?
1462 2 0 50:54:00:00:00:05 ?
1465 # Add another bridge.
1469 -- set bridge br1 datapath-type=dummy])
1470 ADD_OF_PORTS([br1], 4, 5)
1472 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1475 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1480 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1484 # Check that the MAC learning entries were added.
1485 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1487 4 0 50:54:00:00:00:06 ?
1488 5 0 50:54:00:00:00:07 ?
1491 # Delete port p1 and see that its MAC learning entry disappeared, and
1492 # that the MAC learning entry for the same MAC was also deleted from br1.
1493 AT_CHECK([ovs-vsctl del-port p1])
1494 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1496 2 0 50:54:00:00:00:05 ?
1498 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1500 5 0 50:54:00:00:00:07 ?
1506 AT_SETUP([ofproto-dpif - MAC table overflow])
1508 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1509 ADD_OF_PORTS([br0], 1, 2, 3)
1511 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)'
1513 AT_CHECK([ovs-appctl time/stop])
1515 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1516 for i in 0 1 2 3 4 5 6 7 8 9; do
1519 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1522 ovs-appctl time/warp 1000
1525 # Check for the MAC learning entries.
1526 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1528 3 0 50:54:00:00:00:00
1529 3 0 50:54:00:00:00:01
1530 3 0 50:54:00:00:00:02
1531 3 0 50:54:00:00:00:03
1532 3 0 50:54:00:00:00:04
1533 3 0 50:54:00:00:00:05
1534 3 0 50:54:00:00:00:06
1535 3 0 50:54:00:00:00:07
1536 3 0 50:54:00:00:00:08
1537 3 0 50:54:00:00:00:09
1541 # Trace another ARP packet on another MAC.
1544 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1548 # Check that the new one chased the oldest one out of the table.
1549 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1551 3 0 50:54:00:00:00:01 ?
1552 3 0 50:54:00:00:00:02 ?
1553 3 0 50:54:00:00:00:03 ?
1554 3 0 50:54:00:00:00:04 ?
1555 3 0 50:54:00:00:00:05 ?
1556 3 0 50:54:00:00:00:06 ?
1557 3 0 50:54:00:00:00:07 ?
1558 3 0 50:54:00:00:00:08 ?
1559 3 0 50:54:00:00:00:09 ?
1560 3 0 50:54:00:00:00:10 ?
1566 dnl Test that sFlow samples packets correctly.
1567 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1568 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1570 ON_EXIT([kill `cat test-sflow.pid`])
1571 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1572 AT_CAPTURE_FILE([sflow.log])
1573 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1575 ovs-appctl time/stop
1577 ADD_OF_PORTS([br0], 1, 2)
1579 set Interface br0 options:ifindex=1002 -- \
1580 set Interface p1 options:ifindex=1004 -- \
1581 set Interface p2 options:ifindex=1003 -- \
1582 set Bridge br0 sflow=@sf -- \
1583 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1584 header=128 sampling=1 polling=1
1586 dnl open with ARP packets to seed the bridge-learning. The output
1587 dnl ifIndex numbers should be reported predictably after that.
1588 dnl Since we set sampling=1 we should see all of these packets
1589 dnl reported. Sorting the output by data-source and seqNo makes
1590 dnl it deterministic. Ensuring that we send at least two packets
1591 dnl into each port means we get to check the seq nos are
1592 dnl incrementing correctly.
1594 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)'
1595 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)'
1596 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)'
1597 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)'
1598 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)'
1600 dnl sleep long enough to get more than one counter sample
1601 dnl from each datasource so we can check sequence numbers
1602 for i in `seq 1 30`; do
1603 ovs-appctl time/warp 100
1606 ovs-appctl -t test-sflow exit
1608 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1629 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
1649 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
1669 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
1689 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
1709 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
1712 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1726 in_broadcasts=4294967295
1729 in_unknownprotos=4294967295
1732 out_multicasts=4294967295
1733 out_broadcasts=4294967295
1749 in_broadcasts=4294967295
1752 in_unknownprotos=4294967295
1755 out_multicasts=4294967295
1756 out_broadcasts=4294967295
1772 in_broadcasts=4294967295
1775 in_unknownprotos=4294967295
1778 out_multicasts=4294967295
1779 out_broadcasts=4294967295
1795 in_broadcasts=4294967295
1798 in_unknownprotos=4294967295
1801 out_multicasts=4294967295
1802 out_broadcasts=4294967295
1818 in_broadcasts=4294967295
1821 in_unknownprotos=4294967295
1824 out_multicasts=4294967295
1825 out_broadcasts=4294967295
1841 in_broadcasts=4294967295
1844 in_unknownprotos=4294967295
1847 out_multicasts=4294967295
1848 out_broadcasts=4294967295
1857 dnl Test that basic NetFlow reports flow statistics correctly:
1858 dnl - The initial packet of a flow are correctly accounted.
1859 dnl - Later packets within a flow are correctly accounted.
1860 dnl - Flow actions changing (in this case, due to MAC learning)
1861 dnl cause a record to be sent.
1862 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1864 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1865 ADD_OF_PORTS([br0], 1, 2)
1867 ovs-appctl time/stop
1868 ON_EXIT([kill `cat test-netflow.pid`])
1869 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1870 AT_CAPTURE_FILE([netflow.log])
1871 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1874 set Bridge br0 netflow=@nf -- \
1875 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1876 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1878 for delay in 1000 30000; do
1879 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)'
1880 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)'
1882 ovs-appctl time/warp $delay
1887 ovs-appctl -t test-netflow exit
1889 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1891 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1892 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1893 ' netflow.log | sort]], [0],
1895 header: v5, seq 0, engine 2,1
1896 header: v5, seq 1, engine 2,1
1897 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1898 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1899 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1903 dnl Test that basic NetFlow reports active expirations correctly.
1904 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1906 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1907 ADD_OF_PORTS([br0], 1, 2)
1909 ON_EXIT([kill `cat test-netflow.pid`])
1910 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1911 AT_CAPTURE_FILE([netflow.log])
1912 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1915 set Bridge br0 netflow=@nf -- \
1916 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1917 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1919 AT_CHECK([ovs-appctl time/stop])
1921 while test $n -le 60; do
1924 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)'
1925 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)'
1927 ovs-appctl time/warp 1000
1930 ovs-appctl time/warp 10000
1934 ovs-appctl -t test-netflow exit
1936 # Count the number of reported packets:
1937 # - From source to destination before MAC learning kicks in (just one).
1938 # - From source to destination after that.
1939 # - From destination to source.
1947 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1954 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1957 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1960 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1967 eval $counter=\`expr \$$counter + \$pkts\`
1968 n_recs=`expr $n_recs + 1`
1971 # There should be exactly 1 MAC learning packet,
1972 # exactly 59 other packets in that direction,
1973 # and exactly 60 packets in the other direction.
1974 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1977 # There should be 1 expiration for MAC learning,
1978 # at least 5 active and a final expiration in one direction,
1979 # and at least 5 active and a final expiration in the other direction.
1981 AT_CHECK([test $n_recs -ge 13])
1985 AT_SETUP([idle_age and hard_age increase over time])
1988 # get_ages DURATION HARD IDLE
1990 # Fetch the flow duration, hard age, and idle age into the variables
1991 # whose names are given as arguments. Rounds DURATION down to the
1992 # nearest integer. If hard_age doesn't appear in the output, sets
1993 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1996 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1998 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1999 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2000 AS_VAR_COPY([$1], [duration])
2002 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2003 if test X"$hard" = X; then
2006 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2008 AS_VAR_COPY([$2], [hard])
2010 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2011 if test X"$idle" = X; then
2014 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2016 AS_VAR_COPY([$3], [idle])
2019 # Add a flow and get its initial hard and idle age.
2020 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2021 get_ages duration1 hard1 idle1
2023 ovs-appctl time/stop
2024 # Warp time forward by 10 seconds, then modify the flow's actions.
2025 ovs-appctl time/warp 10000
2026 get_ages duration2 hard2 idle2
2027 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2029 # Warp time forward by 10 seconds.
2030 ovs-appctl time/warp 10000
2031 get_ages duration3 hard3 idle3
2033 # Warp time forward 10 more seconds, then pass some packets through the flow,
2034 # then warp forward a few more times because idle times are only updated
2036 ovs-appctl time/warp 10000
2037 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)'
2038 ovs-appctl time/warp 1000
2039 ovs-appctl time/warp 1000
2040 ovs-appctl time/warp 1000
2041 get_ages duration4 hard4 idle4
2043 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2044 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2045 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2047 # Duration should increase steadily over time.
2048 AT_CHECK([test $duration1 -lt $duration2])
2049 AT_CHECK([test $duration2 -lt $duration3])
2050 AT_CHECK([test $duration3 -lt $duration4])
2052 # Hard age should be "none" initially because it's the same as flow_duration,
2053 # then it should increase.
2054 AT_CHECK([test $hard1 = none])
2055 AT_CHECK([test $hard2 = none])
2056 AT_CHECK([test $hard3 != none])
2057 AT_CHECK([test $hard4 != none])
2058 AT_CHECK([test $hard3 -lt $hard4])
2060 # Idle age should increase from 1 to 2 to 3, then decrease.
2061 AT_CHECK([test $idle1 -lt $idle2])
2062 AT_CHECK([test $idle2 -lt $idle3])
2063 AT_CHECK([test $idle3 -gt $idle4])
2065 # Check some invariant relationships.
2066 AT_CHECK([test $duration1 = $idle1])
2067 AT_CHECK([test $duration2 = $idle2])
2068 AT_CHECK([test $duration3 = $idle3])
2069 AT_CHECK([test $idle3 -gt $hard3])
2070 AT_CHECK([test $idle4 -lt $hard4])
2071 AT_CHECK([test $hard4 -lt $duration4])
2076 AT_SETUP([ofproto-dpif - fin_timeout])
2078 AT_DATA([flows.txt], [dnl
2079 in_port=1 actions=output:2
2080 in_port=2 actions=mod_vlan_vid:17,output:1
2082 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2083 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2085 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2088 ovs-appctl time/stop
2089 # Check that a TCP SYN packet does not change the timeout. (Because
2090 # flow stats updates are mainly what implements the fin_timeout
2091 # feature, we warp forward a couple of times to ensure that flow stats
2092 # run before re-checking the flow table.)
2093 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2094 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2097 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2099 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2101 # Check that a TCP FIN packet does change the timeout.
2102 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2103 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2106 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2108 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2113 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2114 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2115 ADD_OF_PORTS([br0], [1], [2])
2116 ADD_OF_PORTS([br1], [3])
2118 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2125 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2126 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2127 ADD_OF_PORTS([br0], [1], [2])
2128 ADD_OF_PORTS([br1], [3])
2130 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2131 dummy@ovs-dummy: hit:0 missed:0
2132 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2133 overall avg: add rate: 0.000/min, del rate: 0.000/min
2135 br0 65534/100: (dummy)
2139 br1 65534/101: (dummy)
2145 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2146 OVS_VSWITCHD_START([add-br br1 -- \
2147 set bridge br1 datapath-type=dummy fail-mode=secure])
2148 ADD_OF_PORTS([br0], [1], [2])
2149 ADD_OF_PORTS([br1], [3])
2151 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)'])
2152 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)'])
2153 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)'])
2155 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2156 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))
2157 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))
2160 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2161 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))
2167 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2168 OVS_VSWITCHD_START([add-br br1 -- \
2169 set bridge br1 datapath-type=dummy fail-mode=secure])
2170 ADD_OF_PORTS([br0], [1], [2])
2171 ADD_OF_PORTS([br1], [3])
2173 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)'])
2174 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)'])
2175 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)'])
2177 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2178 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))
2179 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))
2182 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2183 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))
2186 AT_CHECK([ovs-appctl dpif/del-flows br0])
2187 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2190 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2191 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))
2197 AT_SETUP([ofproto-dpif - patch ports])
2198 OVS_VSWITCHD_START([add-br br1 \
2199 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2200 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2201 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2203 ADD_OF_PORTS([br0], [2])
2204 ADD_OF_PORTS([br1], [3])
2206 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2208 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2209 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2211 for i in $(seq 1 10); do
2212 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)'
2215 for i in $(seq 1 5); do
2216 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)'
2219 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2223 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2224 dummy@ovs-dummy: hit:13 missed:2
2225 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2226 overall avg: add rate: 0.000/min, del rate: 0.000/min
2228 br0 65534/100: (dummy)
2230 pbr0 1/none: (patch: peer=pbr1)
2232 br1 65534/101: (dummy)
2234 pbr1 1/none: (patch: peer=pbr0)
2237 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2238 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
2240 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2241 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
2244 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2245 OFPST_PORT reply (xid=0x4): 1 ports
2246 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2247 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2250 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2251 OFPST_PORT reply (xid=0x4): 1 ports
2252 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2253 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2259 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2260 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2261 ADD_OF_PORTS([br0], 1, 2)
2263 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2264 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2266 for i in $(seq 1 61); do
2267 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)'
2268 ovs-appctl time/warp 10000
2269 ovs-appctl time/warp 50000
2272 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2275 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2276 dummy@ovs-dummy: hit:0 missed:61
2277 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2278 hourly avg: add rate: 0.641/min, del rate: 0.641/min
2279 overall avg: add rate: 1.000/min, del rate: 1.000/min
2280 br0: hit:0 missed:61
2281 br0 65534/100: (dummy)
2289 AT_SETUP([ofproto-dpif - port duration])
2290 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2291 ADD_OF_PORTS([br0], 1, 2)
2293 ovs-appctl time/stop
2294 ovs-appctl time/warp 10000
2296 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2297 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2299 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2300 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2301 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2303 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2304 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2306 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2307 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2313 dnl ----------------------------------------------------------------------
2314 AT_BANNER([ofproto-dpif -- megaflows])
2316 # Strips out uninteresting parts of megaflow output, as well as parts
2317 # that vary from one run to another (e.g., timing and bond actions).
2318 m4_define([STRIP_USED], [[sed '
2319 s/used:[0-9]*\.[0-9]*/used:0.0/
2321 m4_define([STRIP_XOUT], [[sed '
2322 s/used:[0-9]*\.[0-9]*/used:0.0/
2323 s/Datapath actions:.*/Datapath actions: <del>/
2326 AT_SETUP([ofproto-dpif megaflow - port classification])
2328 ADD_OF_PORTS([br0], [1], [2])
2329 AT_DATA([flows.txt], [dnl
2330 table=0 in_port=1 actions=output(2)
2332 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2333 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)'])
2334 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)'])
2335 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2336 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2341 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2343 ADD_OF_PORTS([br0], [1], [2])
2344 AT_DATA([flows.txt], [dnl
2345 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2347 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2348 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)'])
2349 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)'])
2350 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2351 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>
2352 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>
2357 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2359 ADD_OF_PORTS([br0], [1], [2])
2360 AT_DATA([flows.txt], [dnl
2361 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2363 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2364 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)'])
2365 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)'])
2366 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2367 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>
2368 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>
2373 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2375 ADD_OF_PORTS([br0], [1], [2])
2376 AT_DATA([flows.txt], [dnl
2377 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2379 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2380 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)'])
2381 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)'])
2382 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2383 skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2388 AT_SETUP([ofproto-dpif megaflow - normal])
2390 ADD_OF_PORTS([br0], [1], [2])
2391 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2392 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)'])
2393 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)'])
2394 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2395 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>
2396 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>
2401 AT_SETUP([ofproto-dpif megaflow - mpls])
2403 ADD_OF_PORTS([br0], [1], [2])
2404 AT_DATA([flows.txt], [dnl
2405 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2406 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2408 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2409 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)'])
2410 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)'])
2411 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2412 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>
2413 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>
2418 AT_SETUP([ofproto-dpif megaflow - netflow])
2420 ADD_OF_PORTS([br0], [1], [2])
2422 dnl NetFlow configuration disables wildcarding relevant fields
2423 ON_EXIT([kill `cat test-netflow.pid`])
2424 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2425 AT_CAPTURE_FILE([netflow.log])
2426 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2428 set Bridge br0 netflow=@nf -- \
2429 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2430 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2432 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2433 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)'])
2434 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)'])
2435 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2436 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>
2437 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>
2442 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2444 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2445 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2446 set interface p2 type=dummy ofport_request=2 -- \
2447 set interface p3 type=dummy ofport_request=3])
2448 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2451 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2452 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)'])
2453 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)'])
2454 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2455 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>
2456 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>
2461 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2463 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2464 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2465 set interface p2 type=dummy ofport_request=2 -- \
2466 set interface p3 type=dummy ofport_request=3])
2467 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2470 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2471 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)'])
2472 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)'])
2473 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2474 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>
2475 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>
2480 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2481 # Create bond0 on br0 with interfaces p0 and p1
2482 # and bond1 on br1 with interfaces p2 and p3
2483 # with p0 patched to p2 and p1 patched to p3.
2485 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2486 other-config:lacp-time=fast \
2487 other-config:bond-rebalance-interval=0 -- \
2488 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2489 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2491 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2492 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2493 fail-mode=secure -- \
2494 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2495 other-config:lacp-time=fast \
2496 other-config:bond-rebalance-interval=0 -- \
2497 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2498 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2500 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2502 ADD_OF_PORTS([br0], [7])
2503 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2504 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2505 ovs-appctl time/stop
2506 ovs-appctl time/warp 5000
2507 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)'])
2508 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)'])
2510 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2511 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>
2512 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>
2517 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2519 ADD_OF_PORTS([br0], [1], [2])
2520 AT_DATA([flows.txt], [dnl
2521 table=0 in_port=1,ip actions=resubmit(90)
2522 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2524 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2525 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)'])
2526 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)'])
2527 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2528 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>
2529 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>
2534 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2536 ADD_OF_PORTS([br0], [1], [2])
2537 AT_DATA([flows.txt], [dnl
2538 table=0 in_port=1,ip actions=resubmit(,1)
2539 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2541 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2542 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)'])
2543 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=
2544 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2545 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2546 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>
2547 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>
2552 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2554 ADD_OF_PORTS([br0], [1], [2])
2555 AT_DATA([flows.txt], [dnl
2556 table=0 in_port=1,ip actions=goto_table(1)
2557 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2559 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2560 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)'])
2561 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)'])
2562 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2563 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>
2564 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>
2569 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2571 ADD_OF_PORTS([br0], [1], [2], [3])
2573 set Bridge br0 mirrors=@m --\
2574 --id=@p3 get Port p3 --\
2575 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2577 AT_DATA([flows.txt], [dnl
2578 in_port=1 actions=output:2
2580 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2581 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)'])
2582 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)'])
2583 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2584 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2589 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2591 ADD_OF_PORTS([br0], [1], [2], [3])
2593 set Bridge br0 mirrors=@m --\
2594 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2595 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2597 AT_DATA([flows.txt], [dnl
2598 in_port=1 actions=output:2
2600 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2601 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))'])
2602 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)'])
2603 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2604 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2605 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2610 AT_SETUP([ofproto-dpif megaflow - move action])
2612 ADD_OF_PORTS([br0], [1], [2])
2613 AT_DATA([flows.txt], [dnl
2614 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2615 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2616 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2618 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2619 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)'])
2620 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)'])
2621 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2622 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>
2623 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>
2628 AT_SETUP([ofproto-dpif megaflow - push action])
2630 ADD_OF_PORTS([br0], [1], [2])
2631 AT_DATA([flows.txt], [dnl
2632 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2634 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2635 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2636 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2637 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2638 skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2639 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>
2644 AT_SETUP([ofproto-dpif megaflow - learning])
2646 ADD_OF_PORTS([br0], [1], [2])
2647 AT_DATA([flows.txt], [dnl
2648 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
2650 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2651 ovs-appctl time/stop
2652 # We send each packet twice because the first packet in each flow causes the
2653 # flow table to change and thus revalidations, which (depending on timing)
2654 # can keep a megaflow from being installed. The revalidations are done by
2655 # the second iteration, allowing the flows to be installed.
2657 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)'])
2658 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)'])
2659 ovs-appctl time/warp 100
2661 dnl The original flow is missing due to a revalidation.
2662 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2663 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>
2664 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>
2669 AT_SETUP([ofproto-dpif megaflow - tunnels])
2671 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2672 ofport_request=1 -- \
2673 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2674 ofport_request=2 options:key=flow -- \
2675 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2676 ofport_request=3 -- \
2677 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2678 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2679 AT_DATA([flows.txt], [dnl
2680 in_port=1,actions=output(2)
2681 in_port=3,actions=output(4)
2683 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2684 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2685 dnl will cause the packet to be dropped.
2686 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)'])
2687 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)'])
2688 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)'])
2689 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)'])
2690 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2691 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2692 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>
2693 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>
2698 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2700 ADD_OF_PORTS([br0], [1], [2])
2701 AT_DATA([flows.txt], [dnl
2702 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2704 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2705 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)'])
2706 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)'])
2707 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2708 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>
2709 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>
2714 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2716 ADD_OF_PORTS([br0], [1], [2])
2717 AT_DATA([flows.txt], [dnl
2718 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2720 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2721 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)'])
2722 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)'])
2723 dnl The megaflows do not match the same fields, since the first packet
2724 dnl is essentially a no-op. (The new destination MAC is the same as the
2725 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2726 dnl so that a packet that doesn't need its MAC address changed doesn't
2727 dnl hide one that does. Since the first entry doesn't need to change,
2728 dnl only the destination MAC address is matched (as decided by
2729 dnl ofproto-dpif). The second entry actually updates the destination
2730 dnl MAC, so both the source and destination MAC addresses are
2731 dnl un-wildcarded, since the ODP commit functions update both the source
2732 dnl and destination MAC addresses.
2733 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_USED], [0], [dnl
2734 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
2735 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
2740 AT_SETUP([ofproto-dpif - datapath port number change])
2741 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2742 ADD_OF_PORTS([br0], 1)
2744 # Trace a flow that should output to p1.
2745 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2747 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
2750 # Change p1's port number to 5.
2751 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
2753 # Trace a flow that should output to p1 in its new location.
2754 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2756 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
2761 # Tests the bundling with various bfd and cfm configurations.
2762 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
2763 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
2764 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
2765 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
2766 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
2767 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
2768 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
2769 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
2770 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
2771 set Interface p0 cfm_mpid=1 -- \
2772 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
2774 ovs-appctl time/stop
2775 # advance the clock to stablize everything.
2776 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2777 # cfm/show should show 'recv' fault.
2778 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2781 # bfd/show should show 'up'.
2782 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2783 Local Session State: up
2784 Remote Session State: up
2785 Local Session State: up
2786 Remote Session State: up
2788 # bond/show should show 'may-enable: true' for all slaves.
2789 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2796 # now disable the bfd on p1.
2797 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
2798 # advance the clock to stablize everything.
2799 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2800 # cfm/show should show 'recv' fault.
2801 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2804 # bfd/show should show 'down'.
2805 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2806 Local Session State: down
2807 Remote Session State: down
2809 # bond/show should show 'may-enable: false' for p0.
2810 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2817 # now enable the bfd on p1 and disable bfd on p0.
2818 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
2819 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
2820 # advance the clock to stablize everything.
2821 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2822 # cfm/show should show 'recv' fault.
2823 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2826 # bfd/show should show 'down'.
2827 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2828 Local Session State: down
2829 Remote Session State: down
2831 # bond/show should show 'may-enable: false' for p0 and p1.
2832 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl