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
649 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
652 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
655 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'
658 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
659 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
660 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
661 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
663 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
664 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
666 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)
667 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
669 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)
670 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
672 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)
673 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
675 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)
676 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
678 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)
679 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
681 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)
682 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
684 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)
685 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
688 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
689 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
690 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
691 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)
692 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)
693 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)
694 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)
695 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)
696 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
697 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
698 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
699 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
700 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
701 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
702 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
703 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
704 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
705 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
706 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
707 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
708 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
709 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
716 AT_SETUP([ofproto-dpif - VLAN handling])
718 [set Bridge br0 fail-mode=standalone -- \
719 add-port br0 p1 trunks=10,12 -- \
720 add-port br0 p2 tag=10 -- \
721 add-port br0 p3 tag=12 \
722 other-config:priority-tags=true -- \
723 add-port br0 p4 tag=12 -- \
724 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
725 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
726 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
727 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
728 other-config:priority-tags=true -- \
729 set Interface p1 type=dummy -- \
730 set Interface p2 type=dummy -- \
731 set Interface p3 type=dummy -- \
732 set Interface p4 type=dummy -- \
733 set Interface p5 type=dummy -- \
734 set Interface p6 type=dummy -- \
735 set Interface p7 type=dummy -- \
736 set Interface p8 type=dummy --])
738 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
739 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
745 "100 10 0 1,5,6,7,8,pop_vlan,2" \
746 "100 10 1 1,5,6,7,8,pop_vlan,2" \
749 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
750 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
754 "1 10 0 5,6,7,8,100,pop_vlan,2" \
755 "1 10 1 5,6,7,8,100,pop_vlan,2" \
758 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
759 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
760 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
761 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
762 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
769 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
770 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
771 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
778 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
779 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
780 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
787 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
788 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
789 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
790 "5 10 0 1,6,7,8,100,pop_vlan,2" \
791 "5 10 1 1,6,7,8,100,pop_vlan,2" \
794 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
795 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
796 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
797 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
798 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
799 "6 10 0 1,5,7,8,100,pop_vlan,2" \
800 "6 10 1 1,5,7,8,100,pop_vlan,2" \
803 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
804 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
805 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
806 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
807 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
808 "7 10 0 1,5,6,8,100,pop_vlan,2" \
809 "7 10 1 1,5,6,8,100,pop_vlan,2" \
812 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
813 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
814 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
815 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
816 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
817 "8 10 0 1,5,6,7,100,pop_vlan,2" \
818 "8 10 1 1,5,6,7,100,pop_vlan,2" \
821 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
822 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
830 if test $vlan = none; then
831 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
833 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))"
836 echo "----------------------------------------------------------------------"
837 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
839 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
840 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
842 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
844 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
850 AT_SETUP([ofproto-dpif - fragment handling])
852 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
853 AT_DATA([flows.txt], [dnl
854 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
855 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
856 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
857 priority=50 tcp ip_frag=no actions=output:4
858 priority=50 tcp ip_frag=first actions=output:5
859 priority=50 tcp ip_frag=later actions=output:6
861 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
863 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"
864 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
865 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
866 later_flow="$base_flow,frag=later)"
868 # mode no first later
880 AT_CHECK([ovs-ofctl set-frags br0 $mode])
881 for type in no first later; do
882 eval flow=\$${type}_flow exp_output=\$$type
883 printf "\n%s\n" "----$mode $type-----"
884 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
886 if test $mode = drop && test $type != no; then
887 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
889 echo "Datapath actions: $exp_output" >> expout
890 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
896 AT_SETUP([ofproto-dpif - exit])
898 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
899 AT_DATA([flows.txt], [dnl
900 in_port=1 actions=output:10,exit,output:11
901 in_port=2 actions=output:12,resubmit:1,output:12
902 in_port=3 actions=output:13,resubmit:2,output:14
904 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
905 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])
906 AT_CHECK([tail -1 stdout], [0],
907 [Datapath actions: 10
909 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])
910 AT_CHECK([tail -1 stdout], [0],
911 [Datapath actions: 12,10
913 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])
914 AT_CHECK([tail -1 stdout], [0],
915 [Datapath actions: 13,12,10
921 AT_SETUP([ofproto-dpif - mirroring, select_all])
923 ADD_OF_PORTS([br0], 1, 2, 3)
925 set Bridge br0 mirrors=@m --\
926 --id=@p3 get Port p3 --\
927 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
929 AT_DATA([flows.txt], [dnl
930 in_port=1 actions=output:2
931 in_port=2 actions=output:1
933 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
935 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)"
936 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
937 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
938 [Datapath actions: 2,3
941 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)"
942 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
943 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
944 [Datapath actions: 1,3
951 AT_SETUP([ofproto-dpif - mirroring, select_src])
953 ADD_OF_PORTS([br0], 1, 2, 3)
955 set Bridge br0 mirrors=@m --\
956 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
957 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
959 AT_DATA([flows.txt], [dnl
960 in_port=1 actions=output:2
961 in_port=2 actions=output:1
963 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
965 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)"
966 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
967 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
968 [Datapath actions: 2,3
971 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)"
972 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
973 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
979 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
981 ADD_OF_PORTS([br0], 1, 2)
983 set Bridge br0 mirrors=@m --\
984 --id=@p2 get Port p2 --\
985 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
987 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
989 # "in_port" defaults to OFPP_NONE if it's not specified.
990 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"
991 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
992 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
993 [Datapath actions: 1,2
1000 AT_SETUP([ofproto-dpif - mirroring, select_dst])
1002 ADD_OF_PORTS([br0], 1, 2, 3)
1004 set Bridge br0 mirrors=@m --\
1005 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1006 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
1008 AT_DATA([flows.txt], [dnl
1009 in_port=1 actions=output:2
1010 in_port=2 actions=output:1
1012 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1014 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)"
1015 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1016 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1017 [Datapath actions: 2,3
1020 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)"
1021 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1022 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1023 [Datapath actions: 1
1030 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
1032 ADD_OF_PORTS([br0], 1, 2, 3)
1034 set Bridge br0 mirrors=@m --\
1035 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
1036 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
1038 AT_DATA([flows.txt], [dnl
1039 in_port=1, actions=output:2
1041 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1043 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)"
1044 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1045 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1046 [Datapath actions: 2
1049 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))"
1050 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1051 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1052 [Datapath actions: 2
1055 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))"
1056 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1057 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1058 [Datapath actions: 2,3
1065 AT_SETUP([ofproto-dpif - mirroring, output_port])
1067 ADD_OF_PORTS([br0], 1, 2, 3)
1069 set Bridge br0 mirrors=@m --\
1070 --id=@p3 get Port p3 --\
1071 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1073 AT_DATA([flows.txt], [dnl
1074 in_port=1 actions=mod_vlan_vid:17,output:2
1075 in_port=2 actions=output:1
1077 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1079 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)"
1080 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1081 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1082 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1085 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)"
1086 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1087 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1088 [Datapath actions: 1,3
1094 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1096 ADD_OF_PORTS([br0], 1, 2)
1098 set Bridge br0 mirrors=@m --\
1099 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1101 AT_DATA([flows.txt], [dnl
1102 in_port=1 actions=output:2
1103 in_port=2 actions=mod_vlan_vid:17,output:1
1105 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1107 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)"
1108 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1109 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1111 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1112 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1114 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1116 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)"
1117 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1118 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1120 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1121 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1123 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1128 # Two testcases below are for the ofproto/trace command
1129 # The first one tests all correct syntax:
1130 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1131 # ofproto/trace br_name br_flow [-generate|packet]
1132 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1133 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1134 ADD_OF_PORTS([br0], 1, 2, 3)
1136 AT_DATA([flows.txt], [dnl
1137 in_port=1 actions=output:2
1138 in_port=2 actions=output:1
1140 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1142 odp_flow="in_port(1)"
1144 # Test command: ofproto/trace odp_flow
1145 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1146 AT_CHECK([tail -1 stdout], [0], [dnl
1150 # Test command: ofproto/trace dp_name odp_flow
1151 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1152 AT_CHECK([tail -1 stdout], [0], [dnl
1155 # Test commmand: ofproto/trace br_name br_flow
1156 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1157 AT_CHECK([tail -1 stdout], [0], [dnl
1161 # Delete the inserted flows
1162 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1163 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1165 # This section beflow tests the [-generate] option
1166 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1167 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"
1169 # Test command: ofproto/trace odp_flow
1170 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1171 # Check for no MAC learning entry
1172 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1176 # Test command: ofproto/trace br_name br_flow
1177 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1178 # Check for no MAC learning entry
1179 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1183 # Test command: ofproto/trace odp_flow -generate
1184 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1185 # Check for the MAC learning entry
1186 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1188 3 0 50:54:00:00:00:05 ?
1191 # Test command: ofproto/trace dp_name odp_flow -generate
1192 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1193 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1194 -generate], [0], [stdout])
1195 # Check for both MAC learning entries
1196 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1198 3 0 50:54:00:00:00:05 ?
1199 1 0 50:54:00:00:00:06 ?
1202 # Test command: ofproto/trace br_name br_flow -generate
1203 AT_CHECK([ovs-appctl ofproto/trace br0 \
1204 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1205 -generate], [0], [stdout])
1206 # Check for both MAC learning entries.
1207 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1209 3 0 50:54:00:00:00:05 ?
1210 1 0 50:54:00:00:00:06 ?
1211 2 0 50:54:00:00:00:07 ?
1214 # This section beflow tests the [packet] option
1215 # The ovs-tcpundump of packets between port1 and port2
1216 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1217 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1219 # Construct the MAC learning table
1220 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1221 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1222 -generate], [0], [stdout])
1224 # Construct the MAC learning table
1225 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1226 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1227 -generate], [0], [stdout])
1229 # Test command: ofproto/trace odp_flow packet
1230 AT_CHECK([ovs-appctl ofproto/trace \
1231 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1232 AT_CHECK([tail -1 stdout], [0], [dnl
1235 AT_CHECK([head -n 3 stdout], [0], [dnl
1237 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
1238 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
1241 # Test command: ofproto/trace dp_name odp_flow packet
1242 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1243 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1244 AT_CHECK([tail -1 stdout], [0], [dnl
1247 AT_CHECK([head -n 3 stdout], [0], [dnl
1249 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
1250 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
1253 # Test command: ofproto/trace br_name br_flow packet
1254 AT_CHECK([ovs-appctl ofproto/trace br0 \
1255 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1256 AT_CHECK([tail -1 stdout], [0], [dnl
1259 AT_CHECK([head -n 2 stdout], [0], [dnl
1260 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
1261 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
1267 # The second test tests the corner cases
1268 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1270 ADD_OF_PORTS([br0], 1, 2)
1273 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1274 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1276 generate="-generate"
1277 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1279 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1285 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1287 AT_CHECK([tail -2 stderr], [0], [dnl
1288 Cannot find datapath of this name
1289 ovs-appctl: ovs-vswitchd: server returned an error
1292 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1298 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1300 AT_CHECK([tail -2 stderr], [0], [dnl
1301 Cannot find datapath of this name
1302 ovs-appctl: ovs-vswitchd: server returned an error
1305 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1311 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1313 AT_CHECK([tail -2 stderr], [0], [dnl
1314 Cannot find datapath of this name
1315 ovs-appctl: ovs-vswitchd: server returned an error
1318 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1324 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1326 AT_CHECK([tail -2 stderr], [0], [dnl
1327 Cannot find datapath of this name
1328 ovs-appctl: ovs-vswitchd: server returned an error
1331 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1337 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1339 AT_CHECK([tail -2 stderr], [0], [dnl
1341 ovs-appctl: ovs-vswitchd: server returned an error
1344 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1350 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1352 AT_CHECK([tail -2 stderr], [0], [dnl
1353 Must specify bridge name
1354 ovs-appctl: ovs-vswitchd: server returned an error
1357 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1358 AT_CHECK([ovs-appctl ofproto/trace \
1359 ovs-dummy "$odp_flow" garbage_option],
1360 [2], [stdout],[stderr])
1361 AT_CHECK([tail -2 stderr], [0], [dnl
1362 Trailing garbage in packet data
1363 ovs-appctl: ovs-vswitchd: server returned an error
1366 # Test incorrect command: ofproto/trace with 4 arguments
1367 AT_CHECK([ovs-appctl ofproto/trace \
1368 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1369 AT_CHECK([tail -2 stderr], [0], [dnl
1370 "ofproto/trace" command takes at most 3 arguments
1371 ovs-appctl: ovs-vswitchd: server returned an error
1374 # Test incorrect command: ofproto/trace with 0 argument
1375 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1376 AT_CHECK([tail -2 stderr], [0], [dnl
1377 "ofproto/trace" command requires at least 1 arguments
1378 ovs-appctl: ovs-vswitchd: server returned an error
1384 m4_define([OFPROTO_TRACE],
1386 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1387 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1389 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1392 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1395 AT_SETUP([ofproto-dpif - MAC learning])
1396 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1397 ADD_OF_PORTS([br0], 1, 2, 3)
1399 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)'
1401 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1404 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1408 # Check for the MAC learning entry.
1409 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1411 3 0 50:54:00:00:00:05 ?
1414 # Trace a packet arrival destined for the learned MAC.
1415 # (This will also learn a MAC.)
1418 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1422 # Check for both MAC learning entries.
1423 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1425 3 0 50:54:00:00:00:05 ?
1426 1 0 50:54:00:00:00:06 ?
1429 # Trace a packet arrival that updates the first learned MAC entry.
1432 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1436 # Check that the MAC learning entry was updated.
1437 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1439 1 0 50:54:00:00:00:06 ?
1440 2 0 50:54:00:00:00:05 ?
1443 # Add another bridge.
1447 -- set bridge br1 datapath-type=dummy])
1448 ADD_OF_PORTS([br1], 4, 5)
1450 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1453 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1458 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1462 # Check that the MAC learning entries were added.
1463 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1465 4 0 50:54:00:00:00:06 ?
1466 5 0 50:54:00:00:00:07 ?
1469 # Delete port p1 and see that its MAC learning entry disappeared, and
1470 # that the MAC learning entry for the same MAC was also deleted from br1.
1471 AT_CHECK([ovs-vsctl del-port p1])
1472 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1474 2 0 50:54:00:00:00:05 ?
1476 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1478 5 0 50:54:00:00:00:07 ?
1484 AT_SETUP([ofproto-dpif - MAC table overflow])
1486 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1487 ADD_OF_PORTS([br0], 1, 2, 3)
1489 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)'
1491 AT_CHECK([ovs-appctl time/stop])
1493 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1494 for i in 0 1 2 3 4 5 6 7 8 9; do
1497 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1500 ovs-appctl time/warp 1000
1503 # Check for the MAC learning entries.
1504 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1506 3 0 50:54:00:00:00:00
1507 3 0 50:54:00:00:00:01
1508 3 0 50:54:00:00:00:02
1509 3 0 50:54:00:00:00:03
1510 3 0 50:54:00:00:00:04
1511 3 0 50:54:00:00:00:05
1512 3 0 50:54:00:00:00:06
1513 3 0 50:54:00:00:00:07
1514 3 0 50:54:00:00:00:08
1515 3 0 50:54:00:00:00:09
1519 # Trace another ARP packet on another MAC.
1522 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1526 # Check that the new one chased the oldest one out of the table.
1527 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1529 3 0 50:54:00:00:00:01 ?
1530 3 0 50:54:00:00:00:02 ?
1531 3 0 50:54:00:00:00:03 ?
1532 3 0 50:54:00:00:00:04 ?
1533 3 0 50:54:00:00:00:05 ?
1534 3 0 50:54:00:00:00:06 ?
1535 3 0 50:54:00:00:00:07 ?
1536 3 0 50:54:00:00:00:08 ?
1537 3 0 50:54:00:00:00:09 ?
1538 3 0 50:54:00:00:00:10 ?
1544 dnl Test that sFlow samples packets correctly.
1545 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1546 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1548 ON_EXIT([kill `cat test-sflow.pid`])
1549 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1550 AT_CAPTURE_FILE([sflow.log])
1551 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1553 ovs-appctl time/stop
1555 ADD_OF_PORTS([br0], 1, 2)
1557 set Interface br0 options:ifindex=1002 -- \
1558 set Interface p1 options:ifindex=1004 -- \
1559 set Interface p2 options:ifindex=1003 -- \
1560 set Bridge br0 sflow=@sf -- \
1561 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1562 header=128 sampling=1 polling=1
1564 dnl open with ARP packets to seed the bridge-learning. The output
1565 dnl ifIndex numbers should be reported predictably after that.
1566 dnl Since we set sampling=1 we should see all of these packets
1567 dnl reported. Sorting the output by data-source and seqNo makes
1568 dnl it deterministic. Ensuring that we send at least two packets
1569 dnl into each port means we get to check the seq nos are
1570 dnl incrementing correctly.
1572 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)'
1573 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)'
1574 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)'
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(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)'
1576 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)'
1578 dnl sleep long enough to get more than one counter sample
1579 dnl from each datasource so we can check sequence numbers
1580 for i in `seq 1 30`; do
1581 ovs-appctl time/warp 100
1584 ovs-appctl -t test-sflow exit
1586 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1607 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
1627 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
1647 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
1667 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
1687 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
1690 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1704 in_broadcasts=4294967295
1707 in_unknownprotos=4294967295
1710 out_multicasts=4294967295
1711 out_broadcasts=4294967295
1727 in_broadcasts=4294967295
1730 in_unknownprotos=4294967295
1733 out_multicasts=4294967295
1734 out_broadcasts=4294967295
1750 in_broadcasts=4294967295
1753 in_unknownprotos=4294967295
1756 out_multicasts=4294967295
1757 out_broadcasts=4294967295
1773 in_broadcasts=4294967295
1776 in_unknownprotos=4294967295
1779 out_multicasts=4294967295
1780 out_broadcasts=4294967295
1796 in_broadcasts=4294967295
1799 in_unknownprotos=4294967295
1802 out_multicasts=4294967295
1803 out_broadcasts=4294967295
1819 in_broadcasts=4294967295
1822 in_unknownprotos=4294967295
1825 out_multicasts=4294967295
1826 out_broadcasts=4294967295
1835 dnl Test that basic NetFlow reports flow statistics correctly:
1836 dnl - The initial packet of a flow are correctly accounted.
1837 dnl - Later packets within a flow are correctly accounted.
1838 dnl - Flow actions changing (in this case, due to MAC learning)
1839 dnl cause a record to be sent.
1840 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1842 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1843 ADD_OF_PORTS([br0], 1, 2)
1845 ovs-appctl time/stop
1846 ON_EXIT([kill `cat test-netflow.pid`])
1847 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1848 AT_CAPTURE_FILE([netflow.log])
1849 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1852 set Bridge br0 netflow=@nf -- \
1853 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1854 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1856 for delay in 1000 30000; do
1857 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)'
1858 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)'
1860 ovs-appctl time/warp $delay
1865 ovs-appctl -t test-netflow exit
1867 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1869 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1870 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1871 ' netflow.log | sort]], [0],
1873 header: v5, seq 0, engine 2,1
1874 header: v5, seq 1, engine 2,1
1875 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1876 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1877 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1881 dnl Test that basic NetFlow reports active expirations correctly.
1882 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1884 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1885 ADD_OF_PORTS([br0], 1, 2)
1887 ON_EXIT([kill `cat test-netflow.pid`])
1888 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1889 AT_CAPTURE_FILE([netflow.log])
1890 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1893 set Bridge br0 netflow=@nf -- \
1894 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1895 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1897 AT_CHECK([ovs-appctl time/stop])
1899 while test $n -le 60; do
1902 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)'
1903 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)'
1905 ovs-appctl time/warp 1000
1908 ovs-appctl time/warp 10000
1912 ovs-appctl -t test-netflow exit
1914 # Count the number of reported packets:
1915 # - From source to destination before MAC learning kicks in (just one).
1916 # - From source to destination after that.
1917 # - From destination to source.
1925 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1932 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1935 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1938 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1945 eval $counter=\`expr \$$counter + \$pkts\`
1946 n_recs=`expr $n_recs + 1`
1949 # There should be exactly 1 MAC learning packet,
1950 # exactly 59 other packets in that direction,
1951 # and exactly 60 packets in the other direction.
1952 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1955 # There should be 1 expiration for MAC learning,
1956 # at least 5 active and a final expiration in one direction,
1957 # and at least 5 active and a final expiration in the other direction.
1959 AT_CHECK([test $n_recs -ge 13])
1963 AT_SETUP([idle_age and hard_age increase over time])
1966 # get_ages DURATION HARD IDLE
1968 # Fetch the flow duration, hard age, and idle age into the variables
1969 # whose names are given as arguments. Rounds DURATION down to the
1970 # nearest integer. If hard_age doesn't appear in the output, sets
1971 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1974 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1976 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1977 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1978 AS_VAR_COPY([$1], [duration])
1980 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1981 if test X"$hard" = X; then
1984 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1986 AS_VAR_COPY([$2], [hard])
1988 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1989 if test X"$idle" = X; then
1992 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1994 AS_VAR_COPY([$3], [idle])
1997 # Add a flow and get its initial hard and idle age.
1998 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1999 get_ages duration1 hard1 idle1
2001 ovs-appctl time/stop
2002 # Warp time forward by 10 seconds, then modify the flow's actions.
2003 ovs-appctl time/warp 10000
2004 get_ages duration2 hard2 idle2
2005 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
2007 # Warp time forward by 10 seconds.
2008 ovs-appctl time/warp 10000
2009 get_ages duration3 hard3 idle3
2011 # Warp time forward 10 more seconds, then pass some packets through the flow,
2012 # then warp forward a few more times because idle times are only updated
2014 ovs-appctl time/warp 10000
2015 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)'
2016 ovs-appctl time/warp 1000
2017 ovs-appctl time/warp 1000
2018 ovs-appctl time/warp 1000
2019 get_ages duration4 hard4 idle4
2021 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
2022 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
2023 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
2025 # Duration should increase steadily over time.
2026 AT_CHECK([test $duration1 -lt $duration2])
2027 AT_CHECK([test $duration2 -lt $duration3])
2028 AT_CHECK([test $duration3 -lt $duration4])
2030 # Hard age should be "none" initially because it's the same as flow_duration,
2031 # then it should increase.
2032 AT_CHECK([test $hard1 = none])
2033 AT_CHECK([test $hard2 = none])
2034 AT_CHECK([test $hard3 != none])
2035 AT_CHECK([test $hard4 != none])
2036 AT_CHECK([test $hard3 -lt $hard4])
2038 # Idle age should increase from 1 to 2 to 3, then decrease.
2039 AT_CHECK([test $idle1 -lt $idle2])
2040 AT_CHECK([test $idle2 -lt $idle3])
2041 AT_CHECK([test $idle3 -gt $idle4])
2043 # Check some invariant relationships.
2044 AT_CHECK([test $duration1 = $idle1])
2045 AT_CHECK([test $duration2 = $idle2])
2046 AT_CHECK([test $duration3 = $idle3])
2047 AT_CHECK([test $idle3 -gt $hard3])
2048 AT_CHECK([test $idle4 -lt $hard4])
2049 AT_CHECK([test $hard4 -lt $duration4])
2054 AT_SETUP([ofproto-dpif - fin_timeout])
2056 AT_DATA([flows.txt], [dnl
2057 in_port=1 actions=output:2
2058 in_port=2 actions=mod_vlan_vid:17,output:1
2060 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2061 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2063 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2066 ovs-appctl time/stop
2067 # Check that a TCP SYN packet does not change the timeout. (Because
2068 # flow stats updates are mainly what implements the fin_timeout
2069 # feature, we warp forward a couple of times to ensure that flow stats
2070 # run before re-checking the flow table.)
2071 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2072 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2075 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2077 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2079 # Check that a TCP FIN packet does change the timeout.
2080 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2081 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2084 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2086 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2091 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2092 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2093 ADD_OF_PORTS([br0], [1], [2])
2094 ADD_OF_PORTS([br1], [3])
2096 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2103 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2104 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2105 ADD_OF_PORTS([br0], [1], [2])
2106 ADD_OF_PORTS([br1], [3])
2108 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2109 dummy@ovs-dummy: hit:0 missed:0
2110 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2111 overall avg: add rate: 0.000/min, del rate: 0.000/min
2113 br0 65534/100: (dummy)
2117 br1 65534/101: (dummy)
2123 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2124 OVS_VSWITCHD_START([add-br br1 -- \
2125 set bridge br1 datapath-type=dummy fail-mode=secure])
2126 ADD_OF_PORTS([br0], [1], [2])
2127 ADD_OF_PORTS([br1], [3])
2129 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)'])
2130 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)'])
2131 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)'])
2133 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2134 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))
2135 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))
2138 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2139 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))
2145 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2146 OVS_VSWITCHD_START([add-br br1 -- \
2147 set bridge br1 datapath-type=dummy fail-mode=secure])
2148 ADD_OF_PORTS([br0], [1], [2])
2149 ADD_OF_PORTS([br1], [3])
2151 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2152 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'])
2153 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2155 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2156 skb_priority(0),in_port(1),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2157 skb_priority(0),in_port(2),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2160 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2161 skb_priority(0),in_port(3),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2164 AT_CHECK([ovs-appctl dpif/del-flows br0])
2165 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2168 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2169 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))
2175 AT_SETUP([ofproto-dpif - patch ports])
2176 OVS_VSWITCHD_START([add-br br1 \
2177 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2178 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2179 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2181 ADD_OF_PORTS([br0], [2])
2182 ADD_OF_PORTS([br1], [3])
2184 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2186 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2187 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2189 for i in $(seq 1 10); do
2190 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)'
2193 for i in $(seq 1 5); do
2194 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)'
2197 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2201 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2202 dummy@ovs-dummy: hit:13 missed:2
2203 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2204 overall avg: add rate: 0.000/min, del rate: 0.000/min
2206 br0 65534/100: (dummy)
2208 pbr0 1/none: (patch: peer=pbr1)
2210 br1 65534/101: (dummy)
2212 pbr1 1/none: (patch: peer=pbr0)
2215 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2216 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
2218 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2219 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
2222 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2223 OFPST_PORT reply (xid=0x4): 1 ports
2224 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2225 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2228 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2229 OFPST_PORT reply (xid=0x4): 1 ports
2230 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2231 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2237 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2238 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2239 ADD_OF_PORTS([br0], 1, 2)
2241 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2242 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2244 for i in $(seq 1 61); do
2245 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)'
2246 ovs-appctl time/warp 10000
2247 ovs-appctl time/warp 50000
2250 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2253 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2254 dummy@ovs-dummy: hit:0 missed:61
2255 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2256 hourly avg: add rate: 0.641/min, del rate: 0.641/min
2257 overall avg: add rate: 1.000/min, del rate: 1.000/min
2258 br0: hit:0 missed:61
2259 br0 65534/100: (dummy)
2267 AT_SETUP([ofproto-dpif - port duration])
2268 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2269 ADD_OF_PORTS([br0], 1, 2)
2271 ovs-appctl time/stop
2272 ovs-appctl time/warp 10000
2274 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2275 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2277 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2278 port 1: 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
2281 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2282 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2284 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2285 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2291 dnl ----------------------------------------------------------------------
2292 AT_BANNER([ofproto-dpif -- megaflows])
2294 # Strips out uninteresting parts of megaflow output, as well as parts
2295 # that vary from one run to another (e.g., timing and bond actions).
2296 m4_define([STRIP_USED], [[sed '
2297 s/used:[0-9]*\.[0-9]*/used:0.0/
2299 m4_define([STRIP_XOUT], [[sed '
2300 s/used:[0-9]*\.[0-9]*/used:0.0/
2301 s/Datapath actions:.*/Datapath actions: <del>/
2304 AT_SETUP([ofproto-dpif megaflow - port classification])
2306 ADD_OF_PORTS([br0], [1], [2])
2307 AT_DATA([flows.txt], [dnl
2308 table=0 in_port=1 actions=output(2)
2310 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2311 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)'])
2312 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)'])
2313 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2314 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2319 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2321 ADD_OF_PORTS([br0], [1], [2])
2322 AT_DATA([flows.txt], [dnl
2323 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2325 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2326 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)'])
2327 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)'])
2328 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2329 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>
2330 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>
2335 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2337 ADD_OF_PORTS([br0], [1], [2])
2338 AT_DATA([flows.txt], [dnl
2339 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2341 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2342 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)'])
2343 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)'])
2344 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2345 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>
2346 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>
2351 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2353 ADD_OF_PORTS([br0], [1], [2])
2354 AT_DATA([flows.txt], [dnl
2355 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2357 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2358 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)'])
2359 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)'])
2360 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2361 skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2366 AT_SETUP([ofproto-dpif megaflow - normal])
2368 ADD_OF_PORTS([br0], [1], [2])
2369 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2370 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)'])
2371 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)'])
2372 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2373 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>
2374 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>
2379 AT_SETUP([ofproto-dpif megaflow - mpls])
2381 ADD_OF_PORTS([br0], [1], [2])
2382 AT_DATA([flows.txt], [dnl
2383 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2384 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2386 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2387 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)'])
2388 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)'])
2389 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2390 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>
2391 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>
2396 AT_SETUP([ofproto-dpif megaflow - netflow])
2398 ADD_OF_PORTS([br0], [1], [2])
2400 dnl NetFlow configuration disables wildcarding relevant fields
2401 ON_EXIT([kill `cat test-netflow.pid`])
2402 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2403 AT_CAPTURE_FILE([netflow.log])
2404 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2406 set Bridge br0 netflow=@nf -- \
2407 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2408 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2410 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2411 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)'])
2412 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)'])
2413 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2414 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>
2415 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>
2420 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2422 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2423 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2424 set interface p2 type=dummy ofport_request=2 -- \
2425 set interface p3 type=dummy ofport_request=3])
2426 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2429 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2430 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)'])
2431 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)'])
2432 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2433 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>
2434 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>
2439 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2441 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2442 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2443 set interface p2 type=dummy ofport_request=2 -- \
2444 set interface p3 type=dummy ofport_request=3])
2445 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2448 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2449 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)'])
2450 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)'])
2451 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2452 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>
2453 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>
2458 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2459 # Create bond0 on br0 with interfaces p0 and p1
2460 # and bond1 on br1 with interfaces p2 and p3
2461 # with p0 patched to p2 and p1 patched to p3.
2463 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2464 other-config:lacp-time=fast \
2465 other-config:bond-rebalance-interval=0 -- \
2466 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2467 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2469 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2470 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2471 fail-mode=secure -- \
2472 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2473 other-config:lacp-time=fast \
2474 other-config:bond-rebalance-interval=0 -- \
2475 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2476 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2478 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2480 ADD_OF_PORTS([br0], [7])
2481 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2482 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2483 ovs-appctl time/stop
2484 ovs-appctl time/warp 5000
2485 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)'])
2486 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)'])
2488 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2489 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>
2490 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>
2495 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2497 ADD_OF_PORTS([br0], [1], [2])
2498 AT_DATA([flows.txt], [dnl
2499 table=0 in_port=1,ip actions=resubmit(90)
2500 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2502 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2503 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)'])
2504 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)'])
2505 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2506 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>
2507 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>
2512 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2514 ADD_OF_PORTS([br0], [1], [2])
2515 AT_DATA([flows.txt], [dnl
2516 table=0 in_port=1,ip actions=resubmit(,1)
2517 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2519 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2520 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)'])
2521 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=
2522 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2523 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2524 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2525 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2530 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2532 ADD_OF_PORTS([br0], [1], [2])
2533 AT_DATA([flows.txt], [dnl
2534 table=0 in_port=1,ip actions=goto_table(1)
2535 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2537 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2538 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2539 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2540 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2541 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>
2542 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>
2547 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2549 ADD_OF_PORTS([br0], [1], [2], [3])
2551 set Bridge br0 mirrors=@m --\
2552 --id=@p3 get Port p3 --\
2553 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2555 AT_DATA([flows.txt], [dnl
2556 in_port=1 actions=output:2
2558 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2559 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)'])
2560 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)'])
2561 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2562 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2567 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2569 ADD_OF_PORTS([br0], [1], [2], [3])
2571 set Bridge br0 mirrors=@m --\
2572 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2573 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2575 AT_DATA([flows.txt], [dnl
2576 in_port=1 actions=output:2
2578 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2579 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))'])
2580 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)'])
2581 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2582 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2583 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2588 AT_SETUP([ofproto-dpif megaflow - move action])
2590 ADD_OF_PORTS([br0], [1], [2])
2591 AT_DATA([flows.txt], [dnl
2592 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2593 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2594 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2596 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2597 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2598 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2599 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2600 skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2601 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>
2606 AT_SETUP([ofproto-dpif megaflow - push action])
2608 ADD_OF_PORTS([br0], [1], [2])
2609 AT_DATA([flows.txt], [dnl
2610 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2612 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2613 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)'])
2614 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)'])
2615 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2616 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>
2617 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>
2622 AT_SETUP([ofproto-dpif megaflow - learning])
2624 ADD_OF_PORTS([br0], [1], [2])
2625 AT_DATA([flows.txt], [dnl
2626 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
2628 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2629 ovs-appctl time/stop
2630 # We send each packet twice because the first packet in each flow causes the
2631 # flow table to change and thus revalidations, which (depending on timing)
2632 # can keep a megaflow from being installed. The revalidations are done by
2633 # the second iteration, allowing the flows to be installed.
2635 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2636 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2637 ovs-appctl time/warp 100
2639 dnl The original flow is missing due to a revalidation.
2640 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2641 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>
2642 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>
2647 AT_SETUP([ofproto-dpif megaflow - tunnels])
2649 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2650 ofport_request=1 -- \
2651 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2652 ofport_request=2 options:key=flow -- \
2653 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2654 ofport_request=3 -- \
2655 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2656 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2657 AT_DATA([flows.txt], [dnl
2658 in_port=1,actions=output(2)
2659 in_port=3,actions=output(4)
2661 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2662 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2663 dnl will cause the packet to be dropped.
2664 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)'])
2665 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)'])
2666 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)'])
2667 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)'])
2668 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2669 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2670 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>
2671 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>
2676 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2678 ADD_OF_PORTS([br0], [1], [2])
2679 AT_DATA([flows.txt], [dnl
2680 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2682 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2683 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)'])
2684 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)'])
2685 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2686 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>
2687 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>
2692 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2694 ADD_OF_PORTS([br0], [1], [2])
2695 AT_DATA([flows.txt], [dnl
2696 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2698 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2699 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)'])
2700 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)'])
2701 dnl The megaflows do not match the same fields, since the first packet
2702 dnl is essentially a no-op. (The new destination MAC is the same as the
2703 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2704 dnl so that a packet that doesn't need its MAC address changed doesn't
2705 dnl hide one that does. Since the first entry doesn't need to change,
2706 dnl only the destination MAC address is matched (as decided by
2707 dnl ofproto-dpif). The second entry actually updates the destination
2708 dnl MAC, so both the source and destination MAC addresses are
2709 dnl un-wildcarded, since the ODP commit functions update both the source
2710 dnl and destination MAC addresses.
2711 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_USED], [0], [dnl
2712 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
2713 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
2718 AT_SETUP([ofproto-dpif - datapath port number change])
2719 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
2720 ADD_OF_PORTS([br0], 1)
2722 # Trace a flow that should output to p1.
2723 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2725 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
2728 # Change p1's port number to 5.
2729 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
2731 # Trace a flow that should output to p1 in its new location.
2732 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
2734 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
2739 # Tests the bundling with various bfd and cfm configurations.
2740 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
2741 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
2742 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
2743 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
2744 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
2745 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
2746 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
2747 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
2748 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
2749 set Interface p0 cfm_mpid=1 -- \
2750 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
2752 ovs-appctl time/stop
2753 # advance the clock to stablize everything.
2754 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2755 # cfm/show should show 'recv' fault.
2756 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2759 # bfd/show should show 'up'.
2760 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2761 Local Session State: up
2762 Remote Session State: up
2763 Local Session State: up
2764 Remote Session State: up
2766 # bond/show should show 'may-enable: true' for all slaves.
2767 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2774 # now disable the bfd on p1.
2775 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
2776 # advance the clock to stablize everything.
2777 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2778 # cfm/show should show 'recv' fault.
2779 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2782 # bfd/show should show 'down'.
2783 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2784 Local Session State: down
2785 Remote Session State: down
2787 # bond/show should show 'may-enable: false' for p0.
2788 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2795 # now enable the bfd on p1 and disable bfd on p0.
2796 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
2797 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
2798 # advance the clock to stablize everything.
2799 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
2800 # cfm/show should show 'recv' fault.
2801 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
2804 # bfd/show should show 'down'.
2805 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
2806 Local Session State: down
2807 Remote Session State: down
2809 # bond/show should show 'may-enable: false' for p0 and p1.
2810 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl