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(p1)"
1166 # Test command: ofproto/trace odp_flow with in_port as a name.
1167 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1168 AT_CHECK([tail -1 stdout], [0], [dnl
1172 odp_flow="in_port(1)"
1173 # Test command: ofproto/trace odp_flow
1174 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1175 AT_CHECK([tail -1 stdout], [0], [dnl
1179 # Test command: ofproto/trace dp_name odp_flow
1180 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1181 AT_CHECK([tail -1 stdout], [0], [dnl
1184 # Test commmand: ofproto/trace br_name br_flow
1185 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1186 AT_CHECK([tail -1 stdout], [0], [dnl
1190 # Delete the inserted flows
1191 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1192 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1194 # This section beflow tests the [-generate] option
1195 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1196 br_flow="arp,metadata=0,in_port=3,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=ff:ff:ff:ff:ff:ff"
1198 # Test command: ofproto/trace odp_flow
1199 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1200 # Check for no MAC learning entry
1201 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1205 # Test command: ofproto/trace br_name br_flow
1206 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1207 # Check for no MAC learning entry
1208 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1212 # Test command: ofproto/trace odp_flow -generate
1213 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1214 # Check for the MAC learning entry
1215 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1217 3 0 50:54:00:00:00:05 ?
1220 # Test command: ofproto/trace dp_name odp_flow -generate
1221 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1222 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1223 -generate], [0], [stdout])
1224 # Check for both MAC learning entries
1225 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1227 3 0 50:54:00:00:00:05 ?
1228 1 0 50:54:00:00:00:06 ?
1231 # Test command: ofproto/trace br_name br_flow -generate
1232 AT_CHECK([ovs-appctl ofproto/trace br0 \
1233 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1234 -generate], [0], [stdout])
1235 # Check for both MAC learning entries.
1236 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1238 3 0 50:54:00:00:00:05 ?
1239 1 0 50:54:00:00:00:06 ?
1240 2 0 50:54:00:00:00:07 ?
1243 # This section beflow tests the [packet] option
1244 # The ovs-tcpundump of packets between port1 and port2
1245 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1246 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1248 # Construct the MAC learning table
1249 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1250 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1251 -generate], [0], [stdout])
1253 # Construct the MAC learning table
1254 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1255 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1256 -generate], [0], [stdout])
1258 # Test command: ofproto/trace odp_flow packet
1259 AT_CHECK([ovs-appctl ofproto/trace \
1260 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1261 AT_CHECK([tail -1 stdout], [0], [dnl
1264 AT_CHECK([head -n 3 stdout], [0], [dnl
1266 Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1267 Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1270 # Test command: ofproto/trace dp_name odp_flow packet
1271 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1272 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1273 AT_CHECK([tail -1 stdout], [0], [dnl
1276 AT_CHECK([head -n 3 stdout], [0], [dnl
1278 Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1279 Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1282 # Test command: ofproto/trace br_name br_flow packet
1283 AT_CHECK([ovs-appctl ofproto/trace br0 \
1284 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1285 AT_CHECK([tail -1 stdout], [0], [dnl
1288 AT_CHECK([head -n 2 stdout], [0], [dnl
1289 Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1290 Flow: pkt_mark=0x1,skb_priority=0x2,arp,metadata=0,in_port=2,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1296 # The second test tests the corner cases
1297 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1299 ADD_OF_PORTS([br0], 1, 2)
1302 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1303 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1305 generate="-generate"
1306 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1308 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1314 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1316 AT_CHECK([tail -2 stderr], [0], [dnl
1317 Cannot find the datapath
1318 ovs-appctl: ovs-vswitchd: server returned an error
1321 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1327 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1329 AT_CHECK([tail -2 stderr], [0], [dnl
1330 Cannot find the datapath
1331 ovs-appctl: ovs-vswitchd: server returned an error
1334 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1340 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1342 AT_CHECK([tail -2 stderr], [0], [dnl
1343 Cannot find the datapath
1344 ovs-appctl: ovs-vswitchd: server returned an error
1347 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1353 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1355 AT_CHECK([tail -2 stderr], [0], [dnl
1356 Cannot find the datapath
1357 ovs-appctl: ovs-vswitchd: server returned an error
1360 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1366 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1368 AT_CHECK([tail -2 stderr], [0], [dnl
1370 ovs-appctl: ovs-vswitchd: server returned an error
1373 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1379 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1381 AT_CHECK([tail -2 stderr], [0], [dnl
1382 Must specify bridge name
1383 ovs-appctl: ovs-vswitchd: server returned an error
1386 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1387 AT_CHECK([ovs-appctl ofproto/trace \
1388 ovs-dummy "$odp_flow" garbage_option],
1389 [2], [stdout],[stderr])
1390 AT_CHECK([tail -2 stderr], [0], [dnl
1391 Trailing garbage in packet data
1392 ovs-appctl: ovs-vswitchd: server returned an error
1395 # Test incorrect command: ofproto/trace with 4 arguments
1396 AT_CHECK([ovs-appctl ofproto/trace \
1397 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1398 AT_CHECK([tail -2 stderr], [0], [dnl
1399 "ofproto/trace" command takes at most 3 arguments
1400 ovs-appctl: ovs-vswitchd: server returned an error
1403 # Test incorrect command: ofproto/trace with 0 argument
1404 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1405 AT_CHECK([tail -2 stderr], [0], [dnl
1406 "ofproto/trace" command requires at least 1 arguments
1407 ovs-appctl: ovs-vswitchd: server returned an error
1413 m4_define([OFPROTO_TRACE],
1415 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1416 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1418 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1421 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1424 AT_SETUP([ofproto-dpif - MAC learning])
1425 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1426 ADD_OF_PORTS([br0], 1, 2, 3)
1428 arp='eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
1430 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1433 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1437 # Check for the MAC learning entry.
1438 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1440 3 0 50:54:00:00:00:05 ?
1443 # Trace a packet arrival destined for the learned MAC.
1444 # (This will also learn a MAC.)
1447 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1451 # Check for both MAC learning entries.
1452 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1454 3 0 50:54:00:00:00:05 ?
1455 1 0 50:54:00:00:00:06 ?
1458 # Trace a packet arrival that updates the first learned MAC entry.
1461 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1465 # Check that the MAC learning entry was updated.
1466 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1468 1 0 50:54:00:00:00:06 ?
1469 2 0 50:54:00:00:00:05 ?
1472 # Add another bridge.
1476 -- set bridge br1 datapath-type=dummy])
1477 ADD_OF_PORTS([br1], 4, 5)
1479 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1482 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1487 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1491 # Check that the MAC learning entries were added.
1492 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1494 4 0 50:54:00:00:00:06 ?
1495 5 0 50:54:00:00:00:07 ?
1498 # Delete port p1 and see that its MAC learning entry disappeared, and
1499 # that the MAC learning entry for the same MAC was also deleted from br1.
1500 AT_CHECK([ovs-vsctl del-port p1])
1501 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1503 2 0 50:54:00:00:00:05 ?
1505 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1507 5 0 50:54:00:00:00:07 ?
1513 AT_SETUP([ofproto-dpif - MAC table overflow])
1515 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1516 ADD_OF_PORTS([br0], 1, 2, 3)
1518 arp='eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
1520 AT_CHECK([ovs-appctl time/stop])
1522 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1523 for i in 0 1 2 3 4 5 6 7 8 9; do
1526 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1529 ovs-appctl time/warp 1000
1532 # Check for the MAC learning entries.
1533 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1535 3 0 50:54:00:00:00:00
1536 3 0 50:54:00:00:00:01
1537 3 0 50:54:00:00:00:02
1538 3 0 50:54:00:00:00:03
1539 3 0 50:54:00:00:00:04
1540 3 0 50:54:00:00:00:05
1541 3 0 50:54:00:00:00:06
1542 3 0 50:54:00:00:00:07
1543 3 0 50:54:00:00:00:08
1544 3 0 50:54:00:00:00:09
1548 # Trace another ARP packet on another MAC.
1551 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1555 # Check that the new one chased the oldest one out of the table.
1556 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1558 3 0 50:54:00:00:00:01 ?
1559 3 0 50:54:00:00:00:02 ?
1560 3 0 50:54:00:00:00:03 ?
1561 3 0 50:54:00:00:00:04 ?
1562 3 0 50:54:00:00:00:05 ?
1563 3 0 50:54:00:00:00:06 ?
1564 3 0 50:54:00:00:00:07 ?
1565 3 0 50:54:00:00:00:08 ?
1566 3 0 50:54:00:00:00:09 ?
1567 3 0 50:54:00:00:00:10 ?
1573 dnl Test that sFlow samples packets correctly.
1574 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1575 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1577 ON_EXIT([kill `cat test-sflow.pid`])
1578 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1579 AT_CAPTURE_FILE([sflow.log])
1580 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1582 ovs-appctl time/stop
1584 ADD_OF_PORTS([br0], 1, 2)
1586 set Interface br0 options:ifindex=1002 -- \
1587 set Interface p1 options:ifindex=1004 -- \
1588 set Interface p2 options:ifindex=1003 -- \
1589 set Bridge br0 sflow=@sf -- \
1590 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1591 header=128 sampling=1 polling=1
1593 dnl open with ARP packets to seed the bridge-learning. The output
1594 dnl ifIndex numbers should be reported predictably after that.
1595 dnl Since we set sampling=1 we should see all of these packets
1596 dnl reported. Sorting the output by data-source and seqNo makes
1597 dnl it deterministic. Ensuring that we send at least two packets
1598 dnl into each port means we get to check the seq nos are
1599 dnl incrementing correctly.
1601 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.2,tip=192.168.0.1,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
1602 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:07,tha=00:00:00:00:00:00)'
1603 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
1604 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'
1605 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x86dd),ipv6(src=fe80::1,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
1607 dnl sleep long enough to get more than one counter sample
1608 dnl from each datasource so we can check sequence numbers
1609 for i in `seq 1 30`; do
1610 ovs-appctl time/warp 100
1613 ovs-appctl -t test-sflow exit
1615 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1636 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-05-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-05-C0-A8-00-02-00-00-00-00-00-00-C0-A8-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1656 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-07-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-07-C0-A8-00-01-00-00-00-00-00-00-C0-A8-00-02-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1676 hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-01-C0-A8-00-02-08-00-F7-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1696 hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-02-C0-A8-00-01-00-00-FF-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1716 hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1719 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1733 in_broadcasts=4294967295
1736 in_unknownprotos=4294967295
1739 out_multicasts=4294967295
1740 out_broadcasts=4294967295
1756 in_broadcasts=4294967295
1759 in_unknownprotos=4294967295
1762 out_multicasts=4294967295
1763 out_broadcasts=4294967295
1779 in_broadcasts=4294967295
1782 in_unknownprotos=4294967295
1785 out_multicasts=4294967295
1786 out_broadcasts=4294967295
1802 in_broadcasts=4294967295
1805 in_unknownprotos=4294967295
1808 out_multicasts=4294967295
1809 out_broadcasts=4294967295
1825 in_broadcasts=4294967295
1828 in_unknownprotos=4294967295
1831 out_multicasts=4294967295
1832 out_broadcasts=4294967295
1848 in_broadcasts=4294967295
1851 in_unknownprotos=4294967295
1854 out_multicasts=4294967295
1855 out_broadcasts=4294967295
1864 dnl Test that basic NetFlow reports flow statistics correctly:
1865 dnl - The initial packet of a flow are correctly accounted.
1866 dnl - Later packets within a flow are correctly accounted.
1867 dnl - Flow actions changing (in this case, due to MAC learning)
1868 dnl cause a record to be sent.
1869 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1871 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1872 ADD_OF_PORTS([br0], 1, 2)
1874 ovs-appctl time/stop
1875 ON_EXIT([kill `cat test-netflow.pid`])
1876 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1877 AT_CAPTURE_FILE([netflow.log])
1878 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1881 set Bridge br0 netflow=@nf -- \
1882 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1883 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1885 for delay in 1000 30000; do
1886 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
1887 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'
1889 ovs-appctl time/warp $delay
1894 ovs-appctl -t test-netflow exit
1896 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1898 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1899 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1900 ' netflow.log | sort]], [0],
1902 header: v5, seq 0, engine 2,1
1903 header: v5, seq 1, engine 2,1
1904 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1905 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1906 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1910 dnl Test that basic NetFlow reports active expirations correctly.
1911 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1913 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1914 ADD_OF_PORTS([br0], 1, 2)
1916 ON_EXIT([kill `cat test-netflow.pid`])
1917 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1918 AT_CAPTURE_FILE([netflow.log])
1919 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1922 set Bridge br0 netflow=@nf -- \
1923 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1924 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1926 AT_CHECK([ovs-appctl time/stop])
1928 while test $n -le 60; do
1931 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=1234,dst=80)'
1932 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
1934 ovs-appctl time/warp 1000
1937 ovs-appctl time/warp 10000
1941 ovs-appctl -t test-netflow exit
1943 # Count the number of reported packets:
1944 # - From source to destination before MAC learning kicks in (just one).
1945 # - From source to destination after that.
1946 # - From destination to source.
1954 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1961 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1964 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1967 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1974 eval $counter=\`expr \$$counter + \$pkts\`
1975 n_recs=`expr $n_recs + 1`
1978 # There should be exactly 1 MAC learning packet,
1979 # exactly 59 other packets in that direction,
1980 # and exactly 60 packets in the other direction.
1981 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1984 # There should be 1 expiration for MAC learning,
1985 # at least 5 active and a final expiration in one direction,
1986 # and at least 5 active and a final expiration in the other direction.
1988 AT_CHECK([test $n_recs -ge 13])
1992 AT_SETUP([idle_age and hard_age increase over time])
1995 # get_ages DURATION HARD IDLE
1997 # Fetch the flow duration, hard age, and idle age into the variables
1998 # whose names are given as arguments. Rounds DURATION down to the
1999 # nearest integer. If hard_age doesn't appear in the output, sets
2000 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
2003 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
2005 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
2006 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
2007 AS_VAR_COPY([$1], [duration])
2009 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
2010 if test X"$hard" = X; then
2013 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
2015 AS_VAR_COPY([$2], [hard])
2017 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
2018 if test X"$idle" = X; then
2021 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
2023 AS_VAR_COPY([$3], [idle])
2026 # Add a flow and get its initial hard and idle age.
2027 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
2028 get_ages duration1 hard1 idle1
2030 ovs-appctl time/stop
2031 # Warp time forward by 10 seconds, then modify the flow's actions.
2032 ovs-appctl time/warp 10000
2033 get_ages duration2 hard2 idle2
2034 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2036 # Warp time forward by 10 seconds.
2037 ovs-appctl time/warp 10000
2038 get_ages duration3 hard3 idle3
2040 # Warp time forward 10 more seconds, then pass some packets through the flow,
2041 # then warp forward a few more times because idle times are only updated
2043 ovs-appctl time/warp 10000
2044 ovs-appctl netdev-dummy/receive br0 'in_port(0),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=80,dst=1234)'
2045 ovs-appctl time/warp 1000
2046 ovs-appctl time/warp 1000
2047 ovs-appctl time/warp 1000
2048 get_ages duration4 hard4 idle4
2050 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2051 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2052 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2054 # Duration should increase steadily over time.
2055 AT_CHECK([test $duration1 -lt $duration2])
2056 AT_CHECK([test $duration2 -lt $duration3])
2057 AT_CHECK([test $duration3 -lt $duration4])
2059 # Hard age should be "none" initially because it's the same as flow_duration,
2060 # then it should increase.
2061 AT_CHECK([test $hard1 = none])
2062 AT_CHECK([test $hard2 = none])
2063 AT_CHECK([test $hard3 != none])
2064 AT_CHECK([test $hard4 != none])
2065 AT_CHECK([test $hard3 -lt $hard4])
2067 # Idle age should increase from 1 to 2 to 3, then decrease.
2068 AT_CHECK([test $idle1 -lt $idle2])
2069 AT_CHECK([test $idle2 -lt $idle3])
2070 AT_CHECK([test $idle3 -gt $idle4])
2072 # Check some invariant relationships.
2073 AT_CHECK([test $duration1 = $idle1])
2074 AT_CHECK([test $duration2 = $idle2])
2075 AT_CHECK([test $duration3 = $idle3])
2076 AT_CHECK([test $idle3 -gt $hard3])
2077 AT_CHECK([test $idle4 -lt $hard4])
2078 AT_CHECK([test $hard4 -lt $duration4])
2083 AT_SETUP([ofproto-dpif - fin_timeout])
2085 AT_DATA([flows.txt], [dnl
2086 in_port=1 actions=output:2
2087 in_port=2 actions=mod_vlan_vid:17,output:1
2089 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2090 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2092 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2095 ovs-appctl time/stop
2096 # Check that a TCP SYN packet does not change the timeout. (Because
2097 # flow stats updates are mainly what implements the fin_timeout
2098 # feature, we warp forward a couple of times to ensure that flow stats
2099 # run before re-checking the flow table.)
2100 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2101 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2104 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2106 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2108 # Check that a TCP FIN packet does change the timeout.
2109 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2110 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2113 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2115 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2120 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2121 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2122 ADD_OF_PORTS([br0], [1], [2])
2123 ADD_OF_PORTS([br1], [3])
2125 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2132 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2133 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2134 ADD_OF_PORTS([br0], [1], [2])
2135 ADD_OF_PORTS([br1], [3])
2137 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2138 dummy@ovs-dummy: hit:0 missed:0
2139 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2141 br0 65534/100: (dummy)
2145 br1 65534/101: (dummy)
2151 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2152 OVS_VSWITCHD_START([add-br br1 -- \
2153 set bridge br1 datapath-type=dummy fail-mode=secure])
2154 ADD_OF_PORTS([br0], [1], [2])
2155 ADD_OF_PORTS([br1], [3])
2157 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2158 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'])
2159 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2161 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2162 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2163 skb_priority(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2166 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2167 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2173 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2174 OVS_VSWITCHD_START([add-br br1 -- \
2175 set bridge br1 datapath-type=dummy fail-mode=secure])
2176 ADD_OF_PORTS([br0], [1], [2])
2177 ADD_OF_PORTS([br1], [3])
2179 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2180 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'])
2181 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2183 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2184 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2185 skb_priority(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2188 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2189 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2192 AT_CHECK([ovs-appctl dpif/del-flows br0])
2193 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2196 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2197 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2203 AT_SETUP([ofproto-dpif - patch ports])
2204 OVS_VSWITCHD_START([add-br br1 \
2205 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2206 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2207 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2209 ADD_OF_PORTS([br0], [2])
2210 ADD_OF_PORTS([br1], [3])
2212 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2214 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2215 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2217 for i in $(seq 1 10); do
2218 ovs-appctl netdev-dummy/receive br0 'in_port(100),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
2221 for i in $(seq 1 5); do
2222 ovs-appctl netdev-dummy/receive br1 'in_port(101),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
2225 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2229 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2230 dummy@ovs-dummy: hit:13 missed:2
2231 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2233 br0 65534/100: (dummy)
2235 pbr0 1/none: (patch: peer=pbr1)
2237 br1 65534/101: (dummy)
2239 pbr1 1/none: (patch: peer=pbr0)
2242 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2243 skb_priority(0),in_port(100),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:9, bytes:540, used:0.0s, actions:101,3,2
2245 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2246 skb_priority(0),in_port(101),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:4, bytes:240, used:0.0s, actions:100,2,3
2249 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2250 OFPST_PORT reply (xid=0x4): 1 ports
2251 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2252 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2255 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2256 OFPST_PORT reply (xid=0x4): 1 ports
2257 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2258 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2264 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2265 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2266 ADD_OF_PORTS([br0], 1, 2)
2268 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2269 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2271 for i in $(seq 1 61); do
2272 ovs-appctl netdev-dummy/receive br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'
2273 ovs-appctl time/warp 10000
2274 ovs-appctl time/warp 50000
2277 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2280 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2281 dummy@ovs-dummy: hit:0 missed:61
2282 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2283 br0: hit:0 missed:61
2284 br0 65534/100: (dummy)
2292 AT_SETUP([ofproto-dpif - port duration])
2293 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2294 ADD_OF_PORTS([br0], 1, 2)
2296 ovs-appctl time/stop
2297 ovs-appctl time/warp 10000
2299 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2300 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2302 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2303 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2304 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2306 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2307 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2309 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2310 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2316 dnl ----------------------------------------------------------------------
2317 AT_BANNER([ofproto-dpif -- megaflows])
2319 # Strips out uninteresting parts of megaflow output, as well as parts
2320 # that vary from one run to another (e.g., timing and bond actions).
2321 m4_define([STRIP_USED], [[sed '
2322 s/used:[0-9]*\.[0-9]*/used:0.0/
2324 m4_define([STRIP_XOUT], [[sed '
2325 s/used:[0-9]*\.[0-9]*/used:0.0/
2326 s/Datapath actions:.*/Datapath actions: <del>/
2329 AT_SETUP([ofproto-dpif megaflow - port classification])
2331 ADD_OF_PORTS([br0], [1], [2])
2332 AT_DATA([flows.txt], [dnl
2333 table=0 in_port=1 actions=output(2)
2335 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2336 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2337 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2338 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2339 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2344 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2346 ADD_OF_PORTS([br0], [1], [2])
2347 AT_DATA([flows.txt], [dnl
2348 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2350 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2351 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2352 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2353 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2354 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2355 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2360 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2362 ADD_OF_PORTS([br0], [1], [2])
2363 AT_DATA([flows.txt], [dnl
2364 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2366 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2367 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2368 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2369 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2370 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2371 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2376 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2378 ADD_OF_PORTS([br0], [1], [2])
2379 AT_DATA([flows.txt], [dnl
2380 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2382 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2383 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2384 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2385 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2386 skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2391 AT_SETUP([ofproto-dpif megaflow - normal])
2393 ADD_OF_PORTS([br0], [1], [2])
2394 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2395 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2396 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2397 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2398 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2399 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2404 AT_SETUP([ofproto-dpif megaflow - mpls])
2406 ADD_OF_PORTS([br0], [1], [2])
2407 AT_DATA([flows.txt], [dnl
2408 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2409 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2411 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2412 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
2413 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
2414 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2415 skb_priority=0,mpls,in_port=1,dl_src=50:54:00:00:00:09,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2416 skb_priority=0,mpls,in_port=1,dl_src=50:54:00:00:00:0b,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2421 AT_SETUP([ofproto-dpif megaflow - netflow])
2423 ADD_OF_PORTS([br0], [1], [2])
2425 dnl NetFlow configuration disables wildcarding relevant fields
2426 ON_EXIT([kill `cat test-netflow.pid`])
2427 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2428 AT_CAPTURE_FILE([netflow.log])
2429 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2431 set Bridge br0 netflow=@nf -- \
2432 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2433 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2435 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2436 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2437 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2438 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2439 skb_priority=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2440 skb_priority=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2445 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2447 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2448 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2449 set interface p2 type=dummy ofport_request=2 -- \
2450 set interface p3 type=dummy ofport_request=3])
2451 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2454 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2455 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2456 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2457 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2458 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2459 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2464 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2466 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2467 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2468 set interface p2 type=dummy ofport_request=2 -- \
2469 set interface p3 type=dummy ofport_request=3])
2470 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2473 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2474 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2475 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2476 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2477 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2478 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2483 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2484 # Create bond0 on br0 with interfaces p0 and p1
2485 # and bond1 on br1 with interfaces p2 and p3
2486 # with p0 patched to p2 and p1 patched to p3.
2488 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2489 other-config:lacp-time=fast \
2490 other-config:bond-rebalance-interval=0 -- \
2491 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2492 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2494 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2495 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2496 fail-mode=secure -- \
2497 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2498 other-config:lacp-time=fast \
2499 other-config:bond-rebalance-interval=0 -- \
2500 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2501 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2503 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2505 ADD_OF_PORTS([br0], [7])
2506 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2507 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2508 ovs-appctl time/stop
2509 ovs-appctl time/warp 5000
2510 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2511 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2513 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2514 skb_priority=0,icmp,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2515 skb_priority=0,icmp,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2520 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2522 ADD_OF_PORTS([br0], [1], [2])
2523 AT_DATA([flows.txt], [dnl
2524 table=0 in_port=1,ip actions=resubmit(90)
2525 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2527 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2528 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2529 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2530 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2531 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2532 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2537 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2539 ADD_OF_PORTS([br0], [1], [2])
2540 AT_DATA([flows.txt], [dnl
2541 table=0 in_port=1,ip actions=resubmit(,1)
2542 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2544 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2545 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2546 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=
2547 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2548 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2549 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2550 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2555 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2557 ADD_OF_PORTS([br0], [1], [2])
2558 AT_DATA([flows.txt], [dnl
2559 table=0 in_port=1,ip actions=goto_table(1)
2560 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2562 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2563 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2564 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2565 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2566 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2567 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2572 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2574 ADD_OF_PORTS([br0], [1], [2], [3])
2576 set Bridge br0 mirrors=@m --\
2577 --id=@p3 get Port p3 --\
2578 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2580 AT_DATA([flows.txt], [dnl
2581 in_port=1 actions=output:2
2583 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2584 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2585 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2586 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2587 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2592 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2594 ADD_OF_PORTS([br0], [1], [2], [3])
2596 set Bridge br0 mirrors=@m --\
2597 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2598 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2600 AT_DATA([flows.txt], [dnl
2601 in_port=1 actions=output:2
2603 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2604 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=11,pcp=7),encap(eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0))'])
2605 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2606 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2607 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2608 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2613 AT_SETUP([ofproto-dpif megaflow - move action])
2615 ADD_OF_PORTS([br0], [1], [2])
2616 AT_DATA([flows.txt], [dnl
2617 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2618 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2619 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2621 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2622 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2623 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2624 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2625 skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2626 skb_priority=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2631 AT_SETUP([ofproto-dpif megaflow - push action])
2633 ADD_OF_PORTS([br0], [1], [2])
2634 AT_DATA([flows.txt], [dnl
2635 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2637 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2638 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2639 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2640 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2641 skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2642 skb_priority=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2647 AT_SETUP([ofproto-dpif megaflow - learning])
2649 ADD_OF_PORTS([br0], [1], [2])
2650 AT_DATA([flows.txt], [dnl
2651 table=0 in_port=1 actions=load:2->NXM_NX_REG0[[0..15]],learn(table=1,priority=65535,NXM_OF_ETH_SRC[[]],NXM_OF_VLAN_TCI[[0..11]],output:NXM_NX_REG0[[0..15]]),output:2
2653 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2654 ovs-appctl time/stop
2655 # We send each packet twice because the first packet in each flow causes the
2656 # flow table to change and thus revalidations, which (depending on timing)
2657 # can keep a megaflow from being installed. The revalidations are done by
2658 # the second iteration, allowing the flows to be installed.
2660 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2661 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2662 ovs-appctl time/warp 100
2664 dnl The original flow is missing due to a revalidation.
2665 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2666 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2667 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2672 AT_SETUP([ofproto-dpif megaflow - tunnels])
2674 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2675 ofport_request=1 -- \
2676 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2677 ofport_request=2 options:key=flow -- \
2678 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2679 ofport_request=3 -- \
2680 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2681 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2682 AT_DATA([flows.txt], [dnl
2683 in_port=1,actions=output(2)
2684 in_port=3,actions=output(4)
2686 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2687 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2688 dnl will cause the packet to be dropped.
2689 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
2690 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
2691 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
2692 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
2693 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2694 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2695 skb_priority=0,ip,in_port=3,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2696 skb_priority=0,ip,in_port=3,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2701 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2703 ADD_OF_PORTS([br0], [1], [2])
2704 AT_DATA([flows.txt], [dnl
2705 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2707 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2708 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2709 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2710 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2711 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2712 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_ecn=0,nw_ttl=64, n_subfacets:1, used:0.0s, Datapath actions: <del>
2717 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2719 ADD_OF_PORTS([br0], [1], [2])
2720 AT_DATA([flows.txt], [dnl
2721 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2723 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2724 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2725 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2726 dnl The megaflows do not match the same fields, since the first packet
2727 dnl is essentially a no-op. (The new destination MAC is the same as the
2728 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2729 dnl so that a packet that doesn't need its MAC address changed doesn't
2730 dnl hide one that does. Since the first entry doesn't need to change,
2731 dnl only the destination MAC address is matched (as decided by
2732 dnl ofproto-dpif). The second entry actually updates the destination
2733 dnl MAC, so both the source and destination MAC addresses are
2734 dnl un-wildcarded, since the ODP commit functions update both the source
2735 dnl and destination MAC addresses.
2736 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_USED], [0], [dnl
2737 skb_priority=0,ip,in_port=1,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: 2
2738 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
2743 AT_SETUP([ofproto-dpif - datapath port number change])
2744 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2745 ADD_OF_PORTS([br0], 1)
2747 # Trace a flow that should output to p1.
2748 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2750 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
2753 # Change p1's port number to 5.
2754 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
2756 # Trace a flow that should output to p1 in its new location.
2757 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2759 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
2764 # Tests the bundling with various bfd and cfm configurations.
2765 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
2766 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
2767 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
2768 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
2769 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
2770 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
2771 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
2772 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
2773 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
2774 set Interface p0 cfm_mpid=1 -- \
2775 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
2777 ovs-appctl time/stop
2778 # advance the clock to stablize everything.
2779 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2780 # cfm/show should show 'recv' fault.
2781 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2784 # bfd/show should show 'up'.
2785 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2786 Local Session State: up
2787 Remote Session State: up
2788 Local Session State: up
2789 Remote Session State: up
2791 # bond/show should show 'may-enable: true' for all slaves.
2792 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2799 # now disable the bfd on p1.
2800 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
2801 # advance the clock to stablize everything.
2802 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2803 # cfm/show should show 'recv' fault.
2804 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2807 # bfd/show should show 'down'.
2808 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2809 Local Session State: down
2810 Remote Session State: down
2812 # bond/show should show 'may-enable: false' for p0.
2813 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2820 # now enable the bfd on p1 and disable bfd on p0.
2821 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
2822 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
2823 # advance the clock to stablize everything.
2824 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2825 # cfm/show should show 'recv' fault.
2826 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2829 # bfd/show should show 'down'.
2830 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2831 Local Session State: down
2832 Remote Session State: down
2834 # bond/show should show 'may-enable: false' for p0 and p1.
2835 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2845 # Unit test for appctl coverage/show command
2846 AT_SETUP([ofproto-dpif - coverage/show])
2849 ovs-appctl time/stop
2850 # before the first 5 seconds, nothing can be calculated but the total count.
2851 # there should be two unixctl commands received, but the count of the "appctl
2852 # coverage/show" command is not updated to the total. so there show only 1.
2853 AT_CHECK([ovs-appctl coverage/show | sed -n '/^unixctl_received.*/p'], [], [dnl
2854 unixctl_received 0.0/sec 0.000/sec 0.0000/sec total: 1
2857 ovs-appctl time/warp 5000
2858 # at first 5 second time instant, should have stats.
2859 AT_CHECK([ovs-appctl coverage/show | sed -n '/^unixctl_received.*/p'], [], [dnl
2860 unixctl_received 0.6/sec 0.050/sec 0.0008/sec total: 3
2863 for i in `seq 0 10`; do ovs-appctl time/warp 5000; done
2864 # advance to first 1 minute time instant.
2865 AT_CHECK([ovs-appctl coverage/show | sed -n '/^unixctl_received.*/p'], [], [dnl
2866 unixctl_received 0.2/sec 0.250/sec 0.0042/sec total: 15
2869 ovs-appctl time/warp 60000
2870 # advance to next 1 minute time instant directly, should observe the per-minute
2872 AT_CHECK([ovs-appctl coverage/show | sed -n '/^unixctl_received.*/p'], [], [dnl
2873 unixctl_received 0.4/sec 0.033/sec 0.0047/sec total: 17
2879 AT_BANNER([ofproto-dpif - flow translation resource limits])
2881 AT_SETUP([ofproto-dpif - infinite resubmit])
2883 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
2884 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
2886 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
2888 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
2891 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
2894 AT_SETUP([ofproto-dpif - exponential resubmit chain])
2896 ADD_OF_PORTS([br0], 1)
2897 (for i in `seq 1 64`; do
2899 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
2901 echo "in_port=65, actions=local") > flows
2902 AT_CHECK([ovs-ofctl add-flows br0 flows])
2903 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
2904 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
2906 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
2909 AT_SETUP([ofproto-dpif - too many output actions])
2911 ADD_OF_PORTS([br0], 1)
2912 (for i in `seq 1 12`; do
2914 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
2916 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
2917 AT_CHECK([ovs-ofctl add-flows br0 flows])
2918 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
2919 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
2921 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
2924 AT_SETUP([ofproto-dpif - stack too deep])
2926 ADD_OF_PORTS([br0], 1)
2927 (for i in `seq 1 12`; do
2929 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
2931 push="push:NXM_NX_REG0[[]]"
2932 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
2933 AT_CHECK([ovs-ofctl add-flows br0 flows])
2934 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
2935 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
2937 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])