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