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=40:44:44:44:44:43 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
272 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
273 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
274 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
275 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
276 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
277 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
278 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
279 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
281 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
284 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
287 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)'
289 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
290 ovs-appctl -t ovs-ofctl exit
292 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
293 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
294 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
296 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
297 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
299 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
300 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
303 dnl Singleton controller action.
304 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
307 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)'
309 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
310 ovs-appctl -t ovs-ofctl exit
312 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
313 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
314 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
316 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
317 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
319 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
320 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
323 dnl Modified controller action.
324 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
327 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)'
329 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
330 ovs-appctl -t ovs-ofctl exit
332 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
333 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
334 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
336 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
337 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
339 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
340 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
343 dnl Modified VLAN controller action.
344 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
347 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)'
349 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
350 ovs-appctl -t ovs-ofctl exit
352 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
353 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
354 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
356 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
357 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
359 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
360 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
363 dnl Modified MPLS controller action.
364 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
367 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)'
369 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
370 ovs-appctl -t ovs-ofctl exit
372 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
373 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
374 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
376 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
377 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
379 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
380 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
383 dnl Modified MPLS controller action.
384 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
386 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)
389 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)'
392 OVS_WAIT_UNTIL([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=64 in_port=1 (via action) data_len=64 (unbuffered)
395 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
397 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
398 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
400 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
401 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
404 dnl Modified MPLS controller action.
405 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
408 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))'
410 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
411 ovs-appctl -t ovs-ofctl exit
413 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
414 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
415 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
417 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
418 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
420 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
421 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
424 dnl Modified MPLS controller action.
425 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
428 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)'
430 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
431 ovs-appctl -t ovs-ofctl exit
433 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
434 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
435 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
437 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
438 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
440 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
441 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
444 dnl Modified MPLS controller action.
445 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
448 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)'
450 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
451 ovs-appctl -t ovs-ofctl exit
453 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
454 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
455 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
457 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
458 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
460 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
461 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
464 dnl Modified MPLS controller action.
465 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
468 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)'
470 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
471 ovs-appctl -t ovs-ofctl exit
473 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
474 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
475 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
477 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
478 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
480 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
481 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
484 dnl Modified MPLS controller action.
485 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
488 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)'
490 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
491 ovs-appctl -t ovs-ofctl exit
493 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
494 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
495 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
497 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
498 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
500 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
501 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
504 dnl Modified MPLS actions.
505 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
508 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)'
510 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
511 ovs-appctl -t ovs-ofctl exit
513 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
514 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
515 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
517 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
518 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
520 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
521 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
524 dnl Modified MPLS ipv6 controller action.
525 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
528 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)'
530 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
531 ovs-appctl -t ovs-ofctl exit
533 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
534 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
535 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
537 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
538 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
540 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
541 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
545 dnl Modified MPLS pop action.
546 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
547 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)
548 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
550 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
553 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'
556 # 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)'
558 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
559 ovs-appctl -t ovs-ofctl exit
561 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
562 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
563 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
565 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
566 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
568 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
569 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
573 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
576 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)'
578 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
579 ovs-appctl -t ovs-ofctl exit
581 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
582 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
583 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
585 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
586 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
588 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)
589 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
591 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)
592 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
594 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)
595 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
597 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)
598 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
600 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)
601 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
603 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)
604 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
606 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)
607 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
611 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
614 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'
616 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
617 ovs-appctl -t ovs-ofctl exit
619 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
620 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
621 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
623 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
624 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
626 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)
627 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
629 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)
630 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
632 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)
633 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
635 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)
636 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
638 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)
639 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
641 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)
642 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
644 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)
645 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
648 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
651 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
654 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'
657 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
658 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
659 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
660 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
662 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
663 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
665 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)
666 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
668 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)
669 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
671 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)
672 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
674 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)
675 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
677 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)
678 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
680 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)
681 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
683 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)
684 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
687 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
688 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
689 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
690 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)
691 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)
692 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)
693 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)
694 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)
695 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
696 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
697 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
698 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
699 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
700 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
701 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
702 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
703 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
704 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
705 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
706 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
707 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
708 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
715 AT_SETUP([ofproto-dpif - VLAN handling])
717 [set Bridge br0 fail-mode=standalone -- \
718 add-port br0 p1 trunks=10,12 -- \
719 add-port br0 p2 tag=10 -- \
720 add-port br0 p3 tag=12 \
721 other-config:priority-tags=true -- \
722 add-port br0 p4 tag=12 -- \
723 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
724 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
725 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
726 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
727 other-config:priority-tags=true -- \
728 set Interface p1 type=dummy -- \
729 set Interface p2 type=dummy -- \
730 set Interface p3 type=dummy -- \
731 set Interface p4 type=dummy -- \
732 set Interface p5 type=dummy -- \
733 set Interface p6 type=dummy -- \
734 set Interface p7 type=dummy -- \
735 set Interface p8 type=dummy --])
737 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
738 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
744 "100 10 0 1,5,6,7,8,pop_vlan,2" \
745 "100 10 1 1,5,6,7,8,pop_vlan,2" \
748 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
749 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
753 "1 10 0 5,6,7,8,100,pop_vlan,2" \
754 "1 10 1 5,6,7,8,100,pop_vlan,2" \
757 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
758 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
759 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
760 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
761 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
768 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
769 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
770 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
777 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
778 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
779 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
786 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
787 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
788 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
789 "5 10 0 1,6,7,8,100,pop_vlan,2" \
790 "5 10 1 1,6,7,8,100,pop_vlan,2" \
793 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
794 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
795 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
796 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
797 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
798 "6 10 0 1,5,7,8,100,pop_vlan,2" \
799 "6 10 1 1,5,7,8,100,pop_vlan,2" \
802 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
803 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
804 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
805 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
806 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
807 "7 10 0 1,5,6,8,100,pop_vlan,2" \
808 "7 10 1 1,5,6,8,100,pop_vlan,2" \
811 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
812 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
813 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
814 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
815 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
816 "8 10 0 1,5,6,7,100,pop_vlan,2" \
817 "8 10 1 1,5,6,7,100,pop_vlan,2" \
820 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
821 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
829 if test $vlan = none; then
830 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
832 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))"
835 echo "----------------------------------------------------------------------"
836 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
838 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
839 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
841 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
843 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
849 AT_SETUP([ofproto-dpif - fragment handling])
851 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
852 AT_DATA([flows.txt], [dnl
853 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
854 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
855 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
856 priority=50 tcp ip_frag=no actions=output:4
857 priority=50 tcp ip_frag=first actions=output:5
858 priority=50 tcp ip_frag=later actions=output:6
860 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
862 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"
863 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
864 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
865 later_flow="$base_flow,frag=later)"
867 # mode no first later
879 AT_CHECK([ovs-ofctl set-frags br0 $mode])
880 for type in no first later; do
881 eval flow=\$${type}_flow exp_output=\$$type
882 printf "\n%s\n" "----$mode $type-----"
883 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
885 if test $mode = drop && test $type != no; then
886 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
888 echo "Datapath actions: $exp_output" >> expout
889 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
895 AT_SETUP([ofproto-dpif - exit])
897 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
898 AT_DATA([flows.txt], [dnl
899 in_port=1 actions=output:10,exit,output:11
900 in_port=2 actions=output:12,resubmit:1,output:12
901 in_port=3 actions=output:13,resubmit:2,output:14
903 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
904 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])
905 AT_CHECK([tail -1 stdout], [0],
906 [Datapath actions: 10
908 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])
909 AT_CHECK([tail -1 stdout], [0],
910 [Datapath actions: 12,10
912 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])
913 AT_CHECK([tail -1 stdout], [0],
914 [Datapath actions: 13,12,10
920 AT_SETUP([ofproto-dpif - mirroring, select_all])
922 ADD_OF_PORTS([br0], 1, 2, 3)
924 set Bridge br0 mirrors=@m --\
925 --id=@p3 get Port p3 --\
926 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
928 AT_DATA([flows.txt], [dnl
929 in_port=1 actions=output:2
930 in_port=2 actions=output:1
932 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
934 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)"
935 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
936 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
937 [Datapath actions: 2,3
940 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)"
941 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
942 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
943 [Datapath actions: 1,3
950 AT_SETUP([ofproto-dpif - mirroring, select_src])
952 ADD_OF_PORTS([br0], 1, 2, 3)
954 set Bridge br0 mirrors=@m --\
955 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
956 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
958 AT_DATA([flows.txt], [dnl
959 in_port=1 actions=output:2
960 in_port=2 actions=output:1
962 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
964 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)"
965 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
966 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
967 [Datapath actions: 2,3
970 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)"
971 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
972 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
978 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
980 ADD_OF_PORTS([br0], 1, 2)
982 set Bridge br0 mirrors=@m --\
983 --id=@p2 get Port p2 --\
984 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
986 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
988 # "in_port" defaults to OFPP_NONE if it's not specified.
989 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"
990 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
991 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
992 [Datapath actions: 1,2
999 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1001 ADD_OF_PORTS([br0], 1, 2, 3)
1003 set Bridge br0 mirrors=@m --\
1004 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1005 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1007 AT_DATA([flows.txt], [dnl
1008 in_port=1 actions=output:2
1009 in_port=2 actions=output:1
1011 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1013 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)"
1014 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1015 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1016 [Datapath actions: 2,3
1019 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)"
1020 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1021 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1022 [Datapath actions: 1
1029 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1031 ADD_OF_PORTS([br0], 1, 2, 3)
1033 set Bridge br0 mirrors=@m --\
1034 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1035 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1037 AT_DATA([flows.txt], [dnl
1038 in_port=1, actions=output:2
1040 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1042 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)"
1043 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1044 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1045 [Datapath actions: 2
1048 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))"
1049 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1050 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1051 [Datapath actions: 2
1054 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))"
1055 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1056 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1057 [Datapath actions: 2,3
1064 AT_SETUP([ofproto-dpif - mirroring, output_port])
1066 ADD_OF_PORTS([br0], 1, 2, 3)
1068 set Bridge br0 mirrors=@m --\
1069 --id=@p3 get Port p3 --\
1070 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1072 AT_DATA([flows.txt], [dnl
1073 in_port=1 actions=mod_vlan_vid:17,output:2
1074 in_port=2 actions=output:1
1076 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1078 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)"
1079 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1080 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1081 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1084 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)"
1085 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1086 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1087 [Datapath actions: 1,3
1093 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1095 ADD_OF_PORTS([br0], 1, 2)
1097 set Bridge br0 mirrors=@m --\
1098 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1100 AT_DATA([flows.txt], [dnl
1101 in_port=1 actions=output:2
1102 in_port=2 actions=mod_vlan_vid:17,output:1
1104 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1106 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)"
1107 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1108 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1110 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1111 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1113 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1115 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)"
1116 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1117 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1119 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1120 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1122 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1127 # Two testcases below are for the ofproto/trace command
1128 # The first one tests all correct syntax:
1129 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1130 # ofproto/trace br_name br_flow [-generate|packet]
1131 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1132 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1133 ADD_OF_PORTS([br0], 1, 2, 3)
1135 AT_DATA([flows.txt], [dnl
1136 in_port=1 actions=output:2
1137 in_port=2 actions=output:1
1139 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1141 odp_flow="in_port(1)"
1143 # Test command: ofproto/trace odp_flow
1144 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1145 AT_CHECK([tail -1 stdout], [0], [dnl
1149 # Test command: ofproto/trace dp_name odp_flow
1150 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1151 AT_CHECK([tail -1 stdout], [0], [dnl
1154 # Test commmand: ofproto/trace br_name br_flow
1155 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1156 AT_CHECK([tail -1 stdout], [0], [dnl
1160 # Delete the inserted flows
1161 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1162 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1164 # This section beflow tests the [-generate] option
1165 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1166 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"
1168 # Test command: ofproto/trace odp_flow
1169 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1170 # Check for no MAC learning entry
1171 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1175 # Test command: ofproto/trace br_name br_flow
1176 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1177 # Check for no MAC learning entry
1178 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1182 # Test command: ofproto/trace odp_flow -generate
1183 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1184 # Check for the MAC learning entry
1185 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1187 3 0 50:54:00:00:00:05 ?
1190 # Test command: ofproto/trace dp_name odp_flow -generate
1191 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1192 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1193 -generate], [0], [stdout])
1194 # Check for both MAC learning entries
1195 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1197 3 0 50:54:00:00:00:05 ?
1198 1 0 50:54:00:00:00:06 ?
1201 # Test command: ofproto/trace br_name br_flow -generate
1202 AT_CHECK([ovs-appctl ofproto/trace br0 \
1203 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1204 -generate], [0], [stdout])
1205 # Check for both MAC learning entries.
1206 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1208 3 0 50:54:00:00:00:05 ?
1209 1 0 50:54:00:00:00:06 ?
1210 2 0 50:54:00:00:00:07 ?
1213 # This section beflow tests the [packet] option
1214 # The ovs-tcpundump of packets between port1 and port2
1215 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1216 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1218 # Construct the MAC learning table
1219 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1220 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1221 -generate], [0], [stdout])
1223 # Construct the MAC learning table
1224 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1225 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1226 -generate], [0], [stdout])
1228 # Test command: ofproto/trace odp_flow packet
1229 AT_CHECK([ovs-appctl ofproto/trace \
1230 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1231 AT_CHECK([tail -1 stdout], [0], [dnl
1234 AT_CHECK([head -n 3 stdout], [0], [dnl
1236 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
1237 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
1240 # Test command: ofproto/trace dp_name odp_flow packet
1241 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1242 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1243 AT_CHECK([tail -1 stdout], [0], [dnl
1246 AT_CHECK([head -n 3 stdout], [0], [dnl
1248 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
1249 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
1252 # Test command: ofproto/trace br_name br_flow packet
1253 AT_CHECK([ovs-appctl ofproto/trace br0 \
1254 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1255 AT_CHECK([tail -1 stdout], [0], [dnl
1258 AT_CHECK([head -n 2 stdout], [0], [dnl
1259 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
1260 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
1266 # The second test tests the corner cases
1267 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1269 ADD_OF_PORTS([br0], 1, 2)
1272 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1273 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1275 generate="-generate"
1276 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1278 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1284 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1286 AT_CHECK([tail -2 stderr], [0], [dnl
1287 Cannot find datapath of this name
1288 ovs-appctl: ovs-vswitchd: server returned an error
1291 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1297 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1299 AT_CHECK([tail -2 stderr], [0], [dnl
1300 Cannot find datapath of this name
1301 ovs-appctl: ovs-vswitchd: server returned an error
1304 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1310 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1312 AT_CHECK([tail -2 stderr], [0], [dnl
1313 Cannot find datapath of this name
1314 ovs-appctl: ovs-vswitchd: server returned an error
1317 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1323 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1325 AT_CHECK([tail -2 stderr], [0], [dnl
1326 Cannot find datapath of this name
1327 ovs-appctl: ovs-vswitchd: server returned an error
1330 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1336 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1338 AT_CHECK([tail -2 stderr], [0], [dnl
1340 ovs-appctl: ovs-vswitchd: server returned an error
1343 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1349 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1351 AT_CHECK([tail -2 stderr], [0], [dnl
1352 Must specify bridge name
1353 ovs-appctl: ovs-vswitchd: server returned an error
1356 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1357 AT_CHECK([ovs-appctl ofproto/trace \
1358 ovs-dummy "$odp_flow" garbage_option],
1359 [2], [stdout],[stderr])
1360 AT_CHECK([tail -2 stderr], [0], [dnl
1361 Trailing garbage in packet data
1362 ovs-appctl: ovs-vswitchd: server returned an error
1365 # Test incorrect command: ofproto/trace with 4 arguments
1366 AT_CHECK([ovs-appctl ofproto/trace \
1367 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1368 AT_CHECK([tail -2 stderr], [0], [dnl
1369 "ofproto/trace" command takes at most 3 arguments
1370 ovs-appctl: ovs-vswitchd: server returned an error
1373 # Test incorrect command: ofproto/trace with 0 argument
1374 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1375 AT_CHECK([tail -2 stderr], [0], [dnl
1376 "ofproto/trace" command requires at least 1 arguments
1377 ovs-appctl: ovs-vswitchd: server returned an error
1383 m4_define([OFPROTO_TRACE],
1385 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1386 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1388 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1391 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1394 AT_SETUP([ofproto-dpif - MAC learning])
1395 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1396 ADD_OF_PORTS([br0], 1, 2, 3)
1398 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)'
1400 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1403 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1407 # Check for the MAC learning entry.
1408 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1410 3 0 50:54:00:00:00:05 ?
1413 # Trace a packet arrival destined for the learned MAC.
1414 # (This will also learn a MAC.)
1417 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1421 # Check for both MAC learning entries.
1422 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1424 3 0 50:54:00:00:00:05 ?
1425 1 0 50:54:00:00:00:06 ?
1428 # Trace a packet arrival that updates the first learned MAC entry.
1431 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1435 # Check that the MAC learning entry was updated.
1436 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1438 1 0 50:54:00:00:00:06 ?
1439 2 0 50:54:00:00:00:05 ?
1442 # Add another bridge.
1446 -- set bridge br1 datapath-type=dummy])
1447 ADD_OF_PORTS([br1], 4, 5)
1449 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1452 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1457 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1461 # Check that the MAC learning entries were added.
1462 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1464 4 0 50:54:00:00:00:06 ?
1465 5 0 50:54:00:00:00:07 ?
1468 # Delete port p1 and see that its MAC learning entry disappeared, and
1469 # that the MAC learning entry for the same MAC was also deleted from br1.
1470 AT_CHECK([ovs-vsctl del-port p1])
1471 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1473 2 0 50:54:00:00:00:05 ?
1475 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1477 5 0 50:54:00:00:00:07 ?
1483 AT_SETUP([ofproto-dpif - MAC table overflow])
1485 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1486 ADD_OF_PORTS([br0], 1, 2, 3)
1488 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)'
1490 AT_CHECK([ovs-appctl time/stop])
1492 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1493 for i in 0 1 2 3 4 5 6 7 8 9; do
1496 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1499 ovs-appctl time/warp 1000
1502 # Check for the MAC learning entries.
1503 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1505 3 0 50:54:00:00:00:00
1506 3 0 50:54:00:00:00:01
1507 3 0 50:54:00:00:00:02
1508 3 0 50:54:00:00:00:03
1509 3 0 50:54:00:00:00:04
1510 3 0 50:54:00:00:00:05
1511 3 0 50:54:00:00:00:06
1512 3 0 50:54:00:00:00:07
1513 3 0 50:54:00:00:00:08
1514 3 0 50:54:00:00:00:09
1518 # Trace another ARP packet on another MAC.
1521 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1525 # Check that the new one chased the oldest one out of the table.
1526 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1528 3 0 50:54:00:00:00:01 ?
1529 3 0 50:54:00:00:00:02 ?
1530 3 0 50:54:00:00:00:03 ?
1531 3 0 50:54:00:00:00:04 ?
1532 3 0 50:54:00:00:00:05 ?
1533 3 0 50:54:00:00:00:06 ?
1534 3 0 50:54:00:00:00:07 ?
1535 3 0 50:54:00:00:00:08 ?
1536 3 0 50:54:00:00:00:09 ?
1537 3 0 50:54:00:00:00:10 ?
1543 dnl Test that sFlow samples packets correctly.
1544 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1545 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1547 ON_EXIT([kill `cat test-sflow.pid`])
1548 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1549 AT_CAPTURE_FILE([sflow.log])
1550 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1552 ovs-appctl time/stop
1554 ADD_OF_PORTS([br0], 1, 2)
1556 set Interface br0 options:ifindex=1002 -- \
1557 set Interface p1 options:ifindex=1004 -- \
1558 set Interface p2 options:ifindex=1003 -- \
1559 set Bridge br0 sflow=@sf -- \
1560 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1561 header=128 sampling=1 polling=1
1563 dnl open with ARP packets to seed the bridge-learning. The output
1564 dnl ifIndex numbers should be reported predictably after that.
1565 dnl Since we set sampling=1 we should see all of these packets
1566 dnl reported. Sorting the output by data-source and seqNo makes
1567 dnl it deterministic. Ensuring that we send at least two packets
1568 dnl into each port means we get to check the seq nos are
1569 dnl incrementing correctly.
1571 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)'
1572 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)'
1573 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)'
1574 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)'
1575 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)'
1577 dnl sleep long enough to get more than one counter sample
1578 dnl from each datasource so we can check sequence numbers
1579 for i in `seq 1 30`; do
1580 ovs-appctl time/warp 100
1583 ovs-appctl -t test-sflow exit
1585 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1606 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
1626 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
1646 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
1666 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
1686 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
1689 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1703 in_broadcasts=4294967295
1706 in_unknownprotos=4294967295
1709 out_multicasts=4294967295
1710 out_broadcasts=4294967295
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
1834 dnl Test that basic NetFlow reports flow statistics correctly:
1835 dnl - The initial packet of a flow are correctly accounted.
1836 dnl - Later packets within a flow are correctly accounted.
1837 dnl - Flow actions changing (in this case, due to MAC learning)
1838 dnl cause a record to be sent.
1839 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1841 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1842 ADD_OF_PORTS([br0], 1, 2)
1844 ON_EXIT([kill `cat test-netflow.pid`])
1845 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1846 AT_CAPTURE_FILE([netflow.log])
1847 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1850 set Bridge br0 netflow=@nf -- \
1851 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1852 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1854 for delay in 1000 30000; do
1855 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)'
1856 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)'
1858 ovs-appctl time/warp $delay
1863 ovs-appctl -t test-netflow exit
1865 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1867 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1868 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1869 ' netflow.log | sort]], [0],
1871 header: v5, seq 0, engine 2,1
1872 header: v5, seq 1, engine 2,1
1873 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1874 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1875 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1879 dnl Test that basic NetFlow reports active expirations correctly.
1880 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1882 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1883 ADD_OF_PORTS([br0], 1, 2)
1885 ON_EXIT([kill `cat test-netflow.pid`])
1886 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1887 AT_CAPTURE_FILE([netflow.log])
1888 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1891 set Bridge br0 netflow=@nf -- \
1892 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1893 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1895 AT_CHECK([ovs-appctl time/stop])
1897 while test $n -le 60; do
1900 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)'
1901 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)'
1903 ovs-appctl time/warp 1000
1906 ovs-appctl time/warp 10000
1910 ovs-appctl -t test-netflow exit
1912 # Count the number of reported packets:
1913 # - From source to destination before MAC learning kicks in (just one).
1914 # - From source to destination after that.
1915 # - From destination to source.
1923 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1930 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1933 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1936 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1943 eval $counter=\`expr \$$counter + \$pkts\`
1944 n_recs=`expr $n_recs + 1`
1947 # There should be exactly 1 MAC learning packet,
1948 # exactly 59 other packets in that direction,
1949 # and exactly 60 packets in the other direction.
1950 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1953 # There should be 1 expiration for MAC learning,
1954 # at least 5 active and a final expiration in one direction,
1955 # and at least 5 active and a final expiration in the other direction.
1957 AT_CHECK([test $n_recs -ge 13])
1961 AT_SETUP([idle_age and hard_age increase over time])
1964 # get_ages DURATION HARD IDLE
1966 # Fetch the flow duration, hard age, and idle age into the variables
1967 # whose names are given as arguments. Rounds DURATION down to the
1968 # nearest integer. If hard_age doesn't appear in the output, sets
1969 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1972 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1974 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1975 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1976 AS_VAR_COPY([$1], [duration])
1978 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1979 if test X"$hard" = X; then
1982 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1984 AS_VAR_COPY([$2], [hard])
1986 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1987 if test X"$idle" = X; then
1990 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1992 AS_VAR_COPY([$3], [idle])
1995 # Add a flow and get its initial hard and idle age.
1996 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1997 get_ages duration1 hard1 idle1
1999 # Warp time forward by 10 seconds, then modify the flow's actions.
2000 ovs-appctl time/warp 10000
2001 get_ages duration2 hard2 idle2
2002 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2004 # Warp time forward by 10 seconds.
2005 ovs-appctl time/warp 10000
2006 get_ages duration3 hard3 idle3
2008 # Warp time forward 10 more seconds, then pass some packets through the flow,
2009 # then warp forward a few more times because idle times are only updated
2011 ovs-appctl time/warp 10000
2012 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)'
2013 ovs-appctl time/warp 1000
2014 ovs-appctl time/warp 1000
2015 ovs-appctl time/warp 1000
2016 get_ages duration4 hard4 idle4
2018 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2019 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2020 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2022 # Duration should increase steadily over time.
2023 AT_CHECK([test $duration1 -lt $duration2])
2024 AT_CHECK([test $duration2 -lt $duration3])
2025 AT_CHECK([test $duration3 -lt $duration4])
2027 # Hard age should be "none" initially because it's the same as flow_duration,
2028 # then it should increase.
2029 AT_CHECK([test $hard1 = none])
2030 AT_CHECK([test $hard2 = none])
2031 AT_CHECK([test $hard3 != none])
2032 AT_CHECK([test $hard4 != none])
2033 AT_CHECK([test $hard3 -lt $hard4])
2035 # Idle age should increase from 1 to 2 to 3, then decrease.
2036 AT_CHECK([test $idle1 -lt $idle2])
2037 AT_CHECK([test $idle2 -lt $idle3])
2038 AT_CHECK([test $idle3 -gt $idle4])
2040 # Check some invariant relationships.
2041 AT_CHECK([test $duration1 = $idle1])
2042 AT_CHECK([test $duration2 = $idle2])
2043 AT_CHECK([test $duration3 = $idle3])
2044 AT_CHECK([test $idle3 -gt $hard3])
2045 AT_CHECK([test $idle4 -lt $hard4])
2046 AT_CHECK([test $hard4 -lt $duration4])
2051 AT_SETUP([ofproto-dpif - fin_timeout])
2053 AT_DATA([flows.txt], [dnl
2054 in_port=1 actions=output:2
2055 in_port=2 actions=mod_vlan_vid:17,output:1
2057 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2058 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2060 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2062 # Check that a TCP SYN packet does not change the timeout. (Because
2063 # flow stats updates are mainly what implements the fin_timeout
2064 # feature, we warp forward a couple of times to ensure that flow stats
2065 # run before re-checking the flow table.)
2066 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2067 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2070 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2072 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2074 # Check that a TCP FIN packet does change the timeout.
2075 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2076 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2079 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2081 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2086 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2087 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2088 ADD_OF_PORTS([br0], [1], [2])
2089 ADD_OF_PORTS([br1], [3])
2091 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2098 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2099 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2100 ADD_OF_PORTS([br0], [1], [2])
2101 ADD_OF_PORTS([br1], [3])
2103 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2104 dummy@ovs-dummy: hit:0 missed:0
2105 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2106 overall avg: add rate: 0.000/min, del rate: 0.000/min
2108 br0 65534/100: (dummy)
2112 br1 65534/101: (dummy)
2118 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2119 OVS_VSWITCHD_START([add-br br1 -- \
2120 set bridge br1 datapath-type=dummy fail-mode=secure])
2121 ADD_OF_PORTS([br0], [1], [2])
2122 ADD_OF_PORTS([br1], [3])
2124 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)'])
2125 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)'])
2126 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)'])
2128 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2129 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))
2130 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))
2133 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2134 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))
2140 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2141 OVS_VSWITCHD_START([add-br br1 -- \
2142 set bridge br1 datapath-type=dummy fail-mode=secure])
2143 ADD_OF_PORTS([br0], [1], [2])
2144 ADD_OF_PORTS([br1], [3])
2146 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)'])
2147 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)'])
2148 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)'])
2150 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2151 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))
2152 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))
2155 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2156 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))
2159 AT_CHECK([ovs-appctl dpif/del-flows br0])
2160 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2163 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2164 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))
2170 AT_SETUP([ofproto-dpif - patch ports])
2171 OVS_VSWITCHD_START([add-br br1 \
2172 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2173 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2174 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2176 ADD_OF_PORTS([br0], [2])
2177 ADD_OF_PORTS([br1], [3])
2179 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2181 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2182 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2184 for i in $(seq 1 10); do
2185 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)'
2188 for i in $(seq 1 5); do
2189 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)'
2192 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2196 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2197 dummy@ovs-dummy: hit:13 missed:2
2198 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2199 overall avg: add rate: 0.000/min, del rate: 0.000/min
2201 br0 65534/100: (dummy)
2203 pbr0 1/none: (patch: peer=pbr1)
2205 br1 65534/101: (dummy)
2207 pbr1 1/none: (patch: peer=pbr0)
2210 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2211 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
2213 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2214 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
2217 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2218 OFPST_PORT reply (xid=0x4): 1 ports
2219 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2220 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2223 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2224 OFPST_PORT reply (xid=0x4): 1 ports
2225 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2226 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2232 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2233 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2234 ADD_OF_PORTS([br0], 1, 2)
2236 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2237 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2239 for i in $(seq 1 61); do
2240 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)'
2241 ovs-appctl time/warp 10000
2242 ovs-appctl time/warp 50000
2245 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2248 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2249 dummy@ovs-dummy: hit:0 missed:61
2250 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2251 hourly avg: add rate: 0.641/min, del rate: 0.641/min
2252 overall avg: add rate: 1.000/min, del rate: 1.000/min
2253 br0: hit:0 missed:61
2254 br0 65534/100: (dummy)
2262 AT_SETUP([ofproto-dpif - port duration])
2263 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2264 ADD_OF_PORTS([br0], 1, 2)
2266 ovs-appctl time/warp 10000
2268 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2269 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2271 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2272 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2273 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2275 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2276 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2278 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2279 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2285 dnl ----------------------------------------------------------------------
2286 AT_BANNER([ofproto-dpif -- megaflows])
2288 # Strips out uninteresting parts of megaflow output, as well as parts
2289 # that vary from one run to another (e.g., timing and bond actions).
2290 m4_define([STRIP_USED], [[sed '
2291 s/used:[0-9]*\.[0-9]*/used:0.0/
2293 m4_define([STRIP_XOUT], [[sed '
2294 s/used:[0-9]*\.[0-9]*/used:0.0/
2295 s/Datapath actions:.*/Datapath actions: <del>/
2298 AT_SETUP([ofproto-dpif megaflow - port classification])
2300 ADD_OF_PORTS([br0], [1], [2])
2301 AT_DATA([flows.txt], [dnl
2302 table=0 in_port=1 actions=output(2)
2304 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2305 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)'])
2306 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)'])
2307 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2308 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2313 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2315 ADD_OF_PORTS([br0], [1], [2])
2316 AT_DATA([flows.txt], [dnl
2317 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2319 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2320 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)'])
2321 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)'])
2322 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2323 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>
2324 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>
2329 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2331 ADD_OF_PORTS([br0], [1], [2])
2332 AT_DATA([flows.txt], [dnl
2333 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2335 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2336 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2337 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2338 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2339 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2340 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>
2345 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2347 ADD_OF_PORTS([br0], [1], [2])
2348 AT_DATA([flows.txt], [dnl
2349 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2351 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2352 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)'])
2353 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)'])
2354 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2355 skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2360 AT_SETUP([ofproto-dpif megaflow - normal])
2362 ADD_OF_PORTS([br0], [1], [2])
2363 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2364 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2365 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2366 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2367 skb_priority=0,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>
2368 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>
2373 AT_SETUP([ofproto-dpif megaflow - mpls])
2375 ADD_OF_PORTS([br0], [1], [2])
2376 AT_DATA([flows.txt], [dnl
2377 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2378 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2380 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2381 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)'])
2382 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)'])
2383 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2384 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>
2385 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>
2390 AT_SETUP([ofproto-dpif megaflow - netflow])
2392 ADD_OF_PORTS([br0], [1], [2])
2394 dnl NetFlow configuration disables wildcarding relevant fields
2395 ON_EXIT([kill `cat test-netflow.pid`])
2396 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2397 AT_CAPTURE_FILE([netflow.log])
2398 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2400 set Bridge br0 netflow=@nf -- \
2401 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2402 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2404 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
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(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)'])
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: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)'])
2407 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2408 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>
2409 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>
2414 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2416 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2417 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2418 set interface p2 type=dummy ofport_request=2 -- \
2419 set interface p3 type=dummy ofport_request=3])
2420 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2423 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2424 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)'])
2425 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)'])
2426 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2427 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>
2428 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>
2433 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2435 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2436 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2437 set interface p2 type=dummy ofport_request=2 -- \
2438 set interface p3 type=dummy ofport_request=3])
2439 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2442 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2443 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)'])
2444 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)'])
2445 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2446 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>
2447 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>
2452 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2453 # Create bond0 on br0 with interfaces p0 and p1
2454 # and bond1 on br1 with interfaces p2 and p3
2455 # with p0 patched to p2 and p1 patched to p3.
2457 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2458 other-config:lacp-time=fast \
2459 other-config:bond-rebalance-interval=0 -- \
2460 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2461 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2463 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2464 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2465 fail-mode=secure -- \
2466 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2467 other-config:lacp-time=fast \
2468 other-config:bond-rebalance-interval=0 -- \
2469 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2470 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2472 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2474 ADD_OF_PORTS([br0], [7])
2475 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2476 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2477 ovs-appctl time/warp 5000
2478 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)'])
2479 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)'])
2481 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2482 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>
2483 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>
2488 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2490 ADD_OF_PORTS([br0], [1], [2])
2491 AT_DATA([flows.txt], [dnl
2492 table=0 in_port=1,ip actions=resubmit(90)
2493 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2495 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2496 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)'])
2497 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)'])
2498 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2499 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>
2500 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>
2505 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2507 ADD_OF_PORTS([br0], [1], [2])
2508 AT_DATA([flows.txt], [dnl
2509 table=0 in_port=1,ip actions=resubmit(,1)
2510 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2512 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2513 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)'])
2514 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=
2515 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2516 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2517 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>
2518 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>
2523 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2525 ADD_OF_PORTS([br0], [1], [2])
2526 AT_DATA([flows.txt], [dnl
2527 table=0 in_port=1,ip actions=goto_table(1)
2528 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2530 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2531 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2532 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2533 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2534 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2535 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2540 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2542 ADD_OF_PORTS([br0], [1], [2], [3])
2544 set Bridge br0 mirrors=@m --\
2545 --id=@p3 get Port p3 --\
2546 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2548 AT_DATA([flows.txt], [dnl
2549 in_port=1 actions=output:2
2551 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2552 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)'])
2553 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)'])
2554 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2555 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2560 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2562 ADD_OF_PORTS([br0], [1], [2], [3])
2564 set Bridge br0 mirrors=@m --\
2565 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2566 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2568 AT_DATA([flows.txt], [dnl
2569 in_port=1 actions=output:2
2571 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2572 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))'])
2573 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)'])
2574 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2575 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2576 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2581 AT_SETUP([ofproto-dpif megaflow - move action])
2583 ADD_OF_PORTS([br0], [1], [2])
2584 AT_DATA([flows.txt], [dnl
2585 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2586 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2587 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2589 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2590 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)'])
2591 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)'])
2592 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2593 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>
2594 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>
2599 AT_SETUP([ofproto-dpif megaflow - push action])
2601 ADD_OF_PORTS([br0], [1], [2])
2602 AT_DATA([flows.txt], [dnl
2603 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2605 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2606 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)'])
2607 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)'])
2608 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2609 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>
2610 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>
2615 AT_SETUP([ofproto-dpif megaflow - learning])
2617 ADD_OF_PORTS([br0], [1], [2])
2618 AT_DATA([flows.txt], [dnl
2619 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
2621 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2622 # We send each packet twice because the first packet in each flow causes the
2623 # flow table to change and thus revalidations, which (depending on timing)
2624 # can keep a megaflow from being installed. The revalidations are done by
2625 # the second iteration, allowing the flows to be installed.
2627 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)'])
2628 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)'])
2629 ovs-appctl time/warp 100
2631 dnl The original flow is missing due to a revalidation.
2632 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2633 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>
2634 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>
2639 AT_SETUP([ofproto-dpif megaflow - tunnels])
2641 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2642 ofport_request=1 -- \
2643 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2644 ofport_request=2 options:key=flow -- \
2645 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2646 ofport_request=3 -- \
2647 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2648 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2649 AT_DATA([flows.txt], [dnl
2650 in_port=1,actions=output(2)
2651 in_port=3,actions=output(4)
2653 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2654 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2655 dnl will cause the packet to be dropped.
2656 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)'])
2657 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)'])
2658 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)'])
2659 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)'])
2660 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2661 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2662 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>
2663 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>
2668 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2670 ADD_OF_PORTS([br0], [1], [2])
2671 AT_DATA([flows.txt], [dnl
2672 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2674 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2675 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)'])
2676 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)'])
2677 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2678 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>
2679 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>
2684 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2686 ADD_OF_PORTS([br0], [1], [2])
2687 AT_DATA([flows.txt], [dnl
2688 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2690 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2691 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)'])
2692 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)'])
2693 dnl The megaflows do not match the same fields, since the first packet
2694 dnl is essentially a no-op. (The new destination MAC is the same as the
2695 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2696 dnl so that a packet that doesn't need its MAC address changed doesn't
2697 dnl hide one that does. Since the first entry doesn't need to change,
2698 dnl only the destination MAC address is matched (as decided by
2699 dnl ofproto-dpif). The second entry actually updates the destination
2700 dnl MAC, so both the source and destination MAC addresses are
2701 dnl un-wildcarded, since the ODP commit functions update both the source
2702 dnl and destination MAC addresses.
2703 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_USED], [0], [dnl
2704 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
2705 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
2710 AT_SETUP([ofproto-dpif - datapath port number change])
2711 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2712 ADD_OF_PORTS([br0], 1)
2714 # Trace a flow that should output to p1.
2715 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2717 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
2720 # Change p1's port number to 5.
2721 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
2723 # Trace a flow that should output to p1 in its new location.
2724 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2726 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
2731 # Tests the bundling with various bfd and cfm configurations.
2732 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
2733 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
2734 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
2735 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
2736 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
2737 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
2738 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
2739 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
2740 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
2741 set Interface p0 cfm_mpid=1 -- \
2742 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
2744 ovs-appctl time/stop
2745 # advance the clock to stablize everything.
2746 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2747 # cfm/show should show 'recv' fault.
2748 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2751 # bfd/show should show 'up'.
2752 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2753 Local Session State: up
2754 Remote Session State: up
2755 Local Session State: up
2756 Remote Session State: up
2758 # bond/show should show 'may-enable: true' for all slaves.
2759 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2766 # now disable the bfd on p1.
2767 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
2768 # advance the clock to stablize everything.
2769 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2770 # cfm/show should show 'recv' fault.
2771 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2774 # bfd/show should show 'down'.
2775 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2776 Local Session State: down
2777 Remote Session State: down
2779 # bond/show should show 'may-enable: false' for p0.
2780 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2787 # now enable the bfd on p1 and disable bfd on p0.
2788 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
2789 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
2790 # advance the clock to stablize everything.
2791 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2792 # cfm/show should show 'recv' fault.
2793 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2796 # bfd/show should show 'down'.
2797 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2798 Local Session State: down
2799 Remote Session State: down
2801 # bond/show should show 'may-enable: false' for p0 and p1.
2802 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl