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 252`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
28 echo "table=253 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:65534,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:65534
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:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
201 in_port=4 actions=enqueue:65534: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
255 AT_CAPTURE_FILE([ofctl_monitor.log])
256 AT_DATA([flows.txt], [dnl
257 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
258 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
259 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
261 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
262 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)
263 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)
264 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
265 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)
266 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
267 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
268 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
269 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
270 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
271 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
272 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
273 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
274 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
275 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
276 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
277 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
279 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
282 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
285 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)'
288 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
289 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
290 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
291 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
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
300 dnl Singleton controller action.
301 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
304 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)'
307 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
308 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
309 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
310 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
312 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
313 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
315 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
316 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 dnl Modified controller action.
320 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
323 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)'
326 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
327 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
328 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
329 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
331 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
332 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
334 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
335 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
338 dnl Modified MPLS controller action.
339 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
342 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)'
345 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
346 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
347 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
348 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
350 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
351 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
353 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
354 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
357 dnl Modified MPLS controller action.
358 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
360 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)
363 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)'
366 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
367 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
368 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
369 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
371 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
372 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
374 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
375 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
378 dnl Modified MPLS controller action.
379 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
382 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))'
385 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
386 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
387 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
388 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
390 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
391 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
393 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
394 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
397 dnl Modified MPLS controller action.
398 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
401 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)'
404 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
405 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
406 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
407 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
409 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
410 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
412 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
413 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
416 dnl Modified MPLS controller action.
417 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
420 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)'
423 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
424 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
425 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
426 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
428 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
429 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
431 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
432 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
435 dnl Modified MPLS controller action.
436 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
439 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)'
442 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
443 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
444 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
445 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
447 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
448 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
450 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
451 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
454 dnl Modified MPLS controller action.
455 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
458 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)'
461 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
462 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
463 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
464 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
466 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
467 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
469 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
470 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
473 dnl Modified MPLS actions.
474 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
477 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)'
480 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
481 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
482 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
483 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
485 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
486 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
488 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
489 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
492 dnl Modified MPLS ipv6 controller action.
493 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
496 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)'
499 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
500 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
501 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
502 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
504 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
505 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
507 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
508 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
512 dnl Modified MPLS pop action.
513 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
514 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)
515 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
517 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
520 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'
523 # 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)'
526 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
527 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
528 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
529 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
531 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
532 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
534 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
535 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
539 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
542 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)'
545 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
546 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
547 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
548 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
550 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
551 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
553 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)
554 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
556 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)
557 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
559 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)
560 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
562 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)
563 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
565 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)
566 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
568 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)
569 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
571 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)
572 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
576 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
579 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'
582 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
583 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
584 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
585 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
587 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
588 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
590 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)
591 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
593 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)
594 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
596 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)
597 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
599 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)
600 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
602 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)
603 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
605 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)
606 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
608 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)
609 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
612 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
613 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
614 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
615 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
616 cookie=0x3, table=1, n_packets=2, n_bytes=120, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
617 cookie=0x4, table=2, n_packets=2, n_bytes=120, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
618 cookie=0x5, table=3, n_packets=2, n_bytes=120, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
619 cookie=0x6, table=4, n_packets=2, n_bytes=120, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
620 cookie=0x7, table=5, n_packets=2, n_bytes=120, 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)
621 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
622 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
623 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
624 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
625 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
626 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
627 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
628 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
629 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
630 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
631 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
632 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
633 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
640 AT_SETUP([ofproto-dpif - VLAN handling])
642 [set Bridge br0 fail-mode=standalone -- \
643 add-port br0 p1 trunks=10,12 -- \
644 add-port br0 p2 tag=10 -- \
645 add-port br0 p3 tag=12 \
646 other-config:priority-tags=true -- \
647 add-port br0 p4 tag=12 -- \
648 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
649 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
650 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
651 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
652 other-config:priority-tags=true -- \
653 set Interface p1 type=dummy -- \
654 set Interface p2 type=dummy -- \
655 set Interface p3 type=dummy -- \
656 set Interface p4 type=dummy -- \
657 set Interface p5 type=dummy -- \
658 set Interface p6 type=dummy -- \
659 set Interface p7 type=dummy -- \
660 set Interface p8 type=dummy --])
662 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
663 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
669 "100 10 0 1,5,6,7,8,pop_vlan,2" \
670 "100 10 1 1,5,6,7,8,pop_vlan,2" \
673 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
674 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
678 "1 10 0 5,6,7,8,100,pop_vlan,2" \
679 "1 10 1 5,6,7,8,100,pop_vlan,2" \
682 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
683 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
684 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
685 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
686 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
693 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
694 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
695 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
702 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
703 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
704 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
711 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
712 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
713 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
714 "5 10 0 1,6,7,8,100,pop_vlan,2" \
715 "5 10 1 1,6,7,8,100,pop_vlan,2" \
718 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
719 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
720 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
721 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
722 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
723 "6 10 0 1,5,7,8,100,pop_vlan,2" \
724 "6 10 1 1,5,7,8,100,pop_vlan,2" \
727 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
728 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
729 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
730 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
731 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
732 "7 10 0 1,5,6,8,100,pop_vlan,2" \
733 "7 10 1 1,5,6,8,100,pop_vlan,2" \
736 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
737 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
738 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
739 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
740 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
741 "8 10 0 1,5,6,7,100,pop_vlan,2" \
742 "8 10 1 1,5,6,7,100,pop_vlan,2" \
745 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
746 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
754 if test $vlan = none; then
755 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
757 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))"
760 echo "----------------------------------------------------------------------"
761 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
763 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
764 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
766 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
768 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
774 AT_SETUP([ofproto-dpif - fragment handling])
776 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
777 AT_DATA([flows.txt], [dnl
778 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
779 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
780 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
781 priority=50 tcp ip_frag=no actions=output:4
782 priority=50 tcp ip_frag=first actions=output:5
783 priority=50 tcp ip_frag=later actions=output:6
785 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
787 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"
788 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
789 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
790 later_flow="$base_flow,frag=later)"
792 # mode no first later
804 AT_CHECK([ovs-ofctl set-frags br0 $mode])
805 for type in no first later; do
806 eval flow=\$${type}_flow exp_output=\$$type
807 printf "\n%s\n" "----$mode $type-----"
808 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
810 if test $mode = drop && test $type != no; then
811 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
813 echo "Datapath actions: $exp_output" >> expout
814 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
820 AT_SETUP([ofproto-dpif - exit])
822 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
823 AT_DATA([flows.txt], [dnl
824 in_port=1 actions=output:10,exit,output:11
825 in_port=2 actions=output:12,resubmit:1,output:12
826 in_port=3 actions=output:13,resubmit:2,output:14
828 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
829 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])
830 AT_CHECK([tail -1 stdout], [0],
831 [Datapath actions: 10
833 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])
834 AT_CHECK([tail -1 stdout], [0],
835 [Datapath actions: 12,10
837 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])
838 AT_CHECK([tail -1 stdout], [0],
839 [Datapath actions: 13,12,10
845 AT_SETUP([ofproto-dpif - mirroring, select_all])
847 ADD_OF_PORTS([br0], 1, 2, 3)
849 set Bridge br0 mirrors=@m --\
850 --id=@p3 get Port p3 --\
851 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
853 AT_DATA([flows.txt], [dnl
854 in_port=1 actions=output:2
855 in_port=2 actions=output:1
857 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
859 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)"
860 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
861 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
862 [Datapath actions: 2,3
865 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)"
866 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
867 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
868 [Datapath actions: 1,3
875 AT_SETUP([ofproto-dpif - mirroring, select_src])
877 ADD_OF_PORTS([br0], 1, 2, 3)
879 set Bridge br0 mirrors=@m --\
880 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
881 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
883 AT_DATA([flows.txt], [dnl
884 in_port=1 actions=output:2
885 in_port=2 actions=output:1
887 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
889 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)"
890 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
891 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
892 [Datapath actions: 2,3
895 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)"
896 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
897 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
903 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
905 ADD_OF_PORTS([br0], 1, 2)
907 set Bridge br0 mirrors=@m --\
908 --id=@p2 get Port p2 --\
909 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
911 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
913 # "in_port" defaults to OFPP_NONE if it's not specified.
914 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"
915 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
916 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
917 [Datapath actions: 1,2
924 AT_SETUP([ofproto-dpif - mirroring, select_dst])
926 ADD_OF_PORTS([br0], 1, 2, 3)
928 set Bridge br0 mirrors=@m --\
929 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
930 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
932 AT_DATA([flows.txt], [dnl
933 in_port=1 actions=output:2
934 in_port=2 actions=output:1
936 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
938 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)"
939 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
940 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
941 [Datapath actions: 2,3
944 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)"
945 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
946 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
954 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
956 ADD_OF_PORTS([br0], 1, 2, 3)
958 set Bridge br0 mirrors=@m --\
959 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
960 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
962 AT_DATA([flows.txt], [dnl
963 in_port=1, actions=output:2
965 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
967 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)"
968 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
969 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
973 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))"
974 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
975 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
979 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))"
980 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
981 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
982 [Datapath actions: 2,3
989 AT_SETUP([ofproto-dpif - mirroring, output_port])
991 ADD_OF_PORTS([br0], 1, 2, 3)
993 set Bridge br0 mirrors=@m --\
994 --id=@p3 get Port p3 --\
995 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
997 AT_DATA([flows.txt], [dnl
998 in_port=1 actions=mod_vlan_vid:17,output:2
999 in_port=2 actions=output:1
1001 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1003 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)"
1004 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1005 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1006 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1009 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)"
1010 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1011 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1012 [Datapath actions: 1,3
1018 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1020 ADD_OF_PORTS([br0], 1, 2)
1022 set Bridge br0 mirrors=@m --\
1023 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1025 AT_DATA([flows.txt], [dnl
1026 in_port=1 actions=output:2
1027 in_port=2 actions=mod_vlan_vid:17,output:1
1029 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1031 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)"
1032 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1033 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1035 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1036 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1038 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1040 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)"
1041 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1042 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1044 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1045 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1047 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1052 # Two testcases below are for the ofproto/trace command
1053 # The first one tests all correct syntax:
1054 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1055 # ofproto/trace br_name br_flow [-generate|packet]
1056 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1057 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1058 ADD_OF_PORTS([br0], 1, 2, 3)
1060 AT_DATA([flows.txt], [dnl
1061 in_port=1 actions=output:2
1062 in_port=2 actions=output:1
1064 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1066 odp_flow="in_port(1)"
1068 # Test command: ofproto/trace odp_flow
1069 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1070 AT_CHECK([tail -1 stdout], [0], [dnl
1074 # Test command: ofproto/trace dp_name odp_flow
1075 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1076 AT_CHECK([tail -1 stdout], [0], [dnl
1079 # Test commmand: ofproto/trace br_name br_flow
1080 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1081 AT_CHECK([tail -1 stdout], [0], [dnl
1085 # Delete the inserted flows
1086 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1087 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1089 # This section beflow tests the [-generate] option
1090 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1091 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"
1093 # Test command: ofproto/trace odp_flow
1094 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1095 # Check for no MAC learning entry
1096 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1100 # Test command: ofproto/trace br_name br_flow
1101 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1102 # Check for no MAC learning entry
1103 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1107 # Test command: ofproto/trace odp_flow -generate
1108 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1109 # Check for the MAC learning entry
1110 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1112 3 0 50:54:00:00:00:05 ?
1115 # Test command: ofproto/trace dp_name odp_flow -generate
1116 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1117 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1118 -generate], [0], [stdout])
1119 # Check for both MAC learning entries
1120 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1122 3 0 50:54:00:00:00:05 ?
1123 1 0 50:54:00:00:00:06 ?
1126 # Test command: ofproto/trace br_name br_flow -generate
1127 AT_CHECK([ovs-appctl ofproto/trace br0 \
1128 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1129 -generate], [0], [stdout])
1130 # Check for both MAC learning entries.
1131 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1133 3 0 50:54:00:00:00:05 ?
1134 1 0 50:54:00:00:00:06 ?
1135 2 0 50:54:00:00:00:07 ?
1138 # This section beflow tests the [packet] option
1139 # The ovs-tcpundump of packets between port1 and port2
1140 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1141 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1143 # Construct the MAC learning table
1144 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1145 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1146 -generate], [0], [stdout])
1148 # Construct the MAC learning table
1149 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1150 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1151 -generate], [0], [stdout])
1153 # Test command: ofproto/trace odp_flow packet
1154 AT_CHECK([ovs-appctl ofproto/trace \
1155 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1156 AT_CHECK([tail -1 stdout], [0], [dnl
1159 AT_CHECK([head -n 3 stdout], [0], [dnl
1161 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
1162 Flow: skb_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
1165 # Test command: ofproto/trace dp_name odp_flow packet
1166 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1167 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1168 AT_CHECK([tail -1 stdout], [0], [dnl
1171 AT_CHECK([head -n 3 stdout], [0], [dnl
1173 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
1174 Flow: skb_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
1177 # Test command: ofproto/trace br_name br_flow packet
1178 AT_CHECK([ovs-appctl ofproto/trace br0 \
1179 "in_port=2,skb_priority=2,skb_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1180 AT_CHECK([tail -1 stdout], [0], [dnl
1181 Datapath actions: set(skb_mark(0)),1
1183 AT_CHECK([head -n 2 stdout], [0], [dnl
1184 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
1185 Flow: skb_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
1191 # The second test tests the corner cases
1192 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1194 ADD_OF_PORTS([br0], 1, 2)
1197 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1198 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1200 generate="-generate"
1201 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1203 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1209 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1211 AT_CHECK([tail -2 stderr], [0], [dnl
1212 Cannot find datapath of this name
1213 ovs-appctl: ovs-vswitchd: server returned an error
1216 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1222 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1224 AT_CHECK([tail -2 stderr], [0], [dnl
1225 Cannot find datapath of this name
1226 ovs-appctl: ovs-vswitchd: server returned an error
1229 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1235 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1237 AT_CHECK([tail -2 stderr], [0], [dnl
1238 Cannot find datapath of this name
1239 ovs-appctl: ovs-vswitchd: server returned an error
1242 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1248 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1250 AT_CHECK([tail -2 stderr], [0], [dnl
1251 Cannot find datapath of this name
1252 ovs-appctl: ovs-vswitchd: server returned an error
1255 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1261 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1263 AT_CHECK([tail -2 stderr], [0], [dnl
1265 ovs-appctl: ovs-vswitchd: server returned an error
1268 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1274 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1276 AT_CHECK([tail -2 stderr], [0], [dnl
1277 Must specify bridge name
1278 ovs-appctl: ovs-vswitchd: server returned an error
1281 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1282 AT_CHECK([ovs-appctl ofproto/trace \
1283 ovs-dummy "$odp_flow" garbage_option],
1284 [2], [stdout],[stderr])
1285 AT_CHECK([tail -2 stderr], [0], [dnl
1286 Trailing garbage in packet data
1287 ovs-appctl: ovs-vswitchd: server returned an error
1290 # Test incorrect command: ofproto/trace with 4 arguments
1291 AT_CHECK([ovs-appctl ofproto/trace \
1292 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1293 AT_CHECK([tail -2 stderr], [0], [dnl
1294 "ofproto/trace" command takes at most 3 arguments
1295 ovs-appctl: ovs-vswitchd: server returned an error
1298 # Test incorrect command: ofproto/trace with 0 argument
1299 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1300 AT_CHECK([tail -2 stderr], [0], [dnl
1301 "ofproto/trace" command requires at least 1 arguments
1302 ovs-appctl: ovs-vswitchd: server returned an error
1308 m4_define([OFPROTO_TRACE],
1310 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1311 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1313 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1316 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1319 AT_SETUP([ofproto-dpif - MAC learning])
1320 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1321 ADD_OF_PORTS([br0], 1, 2, 3)
1323 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)'
1325 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1328 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1332 # Check for the MAC learning entry.
1333 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1335 3 0 50:54:00:00:00:05 ?
1338 # Trace a packet arrival destined for the learned MAC.
1339 # (This will also learn a MAC.)
1342 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1346 # Check for both MAC learning entries.
1347 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1349 3 0 50:54:00:00:00:05 ?
1350 1 0 50:54:00:00:00:06 ?
1353 # Trace a packet arrival that updates the first learned MAC entry.
1356 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1360 # Check that the MAC learning entry was updated.
1361 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1363 1 0 50:54:00:00:00:06 ?
1364 2 0 50:54:00:00:00:05 ?
1367 # Add another bridge.
1371 -- set bridge br1 datapath-type=dummy])
1372 ADD_OF_PORTS([br1], 4, 5)
1374 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1377 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1382 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1386 # Check that the MAC learning entries were added.
1387 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1389 4 0 50:54:00:00:00:06 ?
1390 5 0 50:54:00:00:00:07 ?
1393 # Delete port p1 and see that its MAC learning entry disappeared, and
1394 # that the MAC learning entry for the same MAC was also deleted from br1.
1395 AT_CHECK([ovs-vsctl del-port p1])
1396 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1398 2 0 50:54:00:00:00:05 ?
1400 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1402 5 0 50:54:00:00:00:07 ?
1408 AT_SETUP([ofproto-dpif - MAC table overflow])
1410 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1411 ADD_OF_PORTS([br0], 1, 2, 3)
1413 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)'
1415 AT_CHECK([ovs-appctl time/stop])
1417 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1418 for i in 0 1 2 3 4 5 6 7 8 9; do
1421 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1424 ovs-appctl time/warp 1000
1427 # Check for the MAC learning entries.
1428 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1430 3 0 50:54:00:00:00:00
1431 3 0 50:54:00:00:00:01
1432 3 0 50:54:00:00:00:02
1433 3 0 50:54:00:00:00:03
1434 3 0 50:54:00:00:00:04
1435 3 0 50:54:00:00:00:05
1436 3 0 50:54:00:00:00:06
1437 3 0 50:54:00:00:00:07
1438 3 0 50:54:00:00:00:08
1439 3 0 50:54:00:00:00:09
1443 # Trace another ARP packet on another MAC.
1446 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1450 # Check that the new one chased the oldest one out of the table.
1451 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1453 3 0 50:54:00:00:00:01 ?
1454 3 0 50:54:00:00:00:02 ?
1455 3 0 50:54:00:00:00:03 ?
1456 3 0 50:54:00:00:00:04 ?
1457 3 0 50:54:00:00:00:05 ?
1458 3 0 50:54:00:00:00:06 ?
1459 3 0 50:54:00:00:00:07 ?
1460 3 0 50:54:00:00:00:08 ?
1461 3 0 50:54:00:00:00:09 ?
1462 3 0 50:54:00:00:00:10 ?
1468 dnl Test that sFlow samples packets correctly.
1469 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1470 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1472 ON_EXIT([kill `cat test-sflow.pid`])
1473 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1474 AT_CAPTURE_FILE([sflow.log])
1475 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1477 ovs-appctl time/stop
1479 ADD_OF_PORTS([br0], 1, 2)
1481 set Interface br0 options:ifindex=1002 -- \
1482 set Interface p1 options:ifindex=1004 -- \
1483 set Interface p2 options:ifindex=1003 -- \
1484 set Bridge br0 sflow=@sf -- \
1485 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1486 header=128 sampling=1 polling=1
1488 dnl open with ARP packets to seed the bridge-learning. The output
1489 dnl ifIndex numbers should be reported predictably after that.
1490 dnl Since we set sampling=1 we should see all of these packets
1491 dnl reported. Sorting the output by data-source and seqNo makes
1492 dnl it deterministic. Ensuring that we send at least two packets
1493 dnl into each port means we get to check the seq nos are
1494 dnl incrementing correctly.
1496 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)'
1497 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)'
1498 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)'
1499 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)'
1500 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)'
1502 dnl sleep long enough to get more than one counter sample
1503 dnl from each datasource so we can check sequence numbers
1504 for i in `seq 1 30`; do
1505 ovs-appctl time/warp 100
1508 ovs-appctl -t test-sflow exit
1510 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1531 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
1551 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
1571 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
1591 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
1611 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
1614 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1628 in_broadcasts=4294967295
1631 in_unknownprotos=4294967295
1634 out_multicasts=4294967295
1635 out_broadcasts=4294967295
1651 in_broadcasts=4294967295
1654 in_unknownprotos=4294967295
1657 out_multicasts=4294967295
1658 out_broadcasts=4294967295
1674 in_broadcasts=4294967295
1677 in_unknownprotos=4294967295
1680 out_multicasts=4294967295
1681 out_broadcasts=4294967295
1697 in_broadcasts=4294967295
1700 in_unknownprotos=4294967295
1703 out_multicasts=4294967295
1704 out_broadcasts=4294967295
1720 in_broadcasts=4294967295
1723 in_unknownprotos=4294967295
1726 out_multicasts=4294967295
1727 out_broadcasts=4294967295
1743 in_broadcasts=4294967295
1746 in_unknownprotos=4294967295
1749 out_multicasts=4294967295
1750 out_broadcasts=4294967295
1759 dnl Test that basic NetFlow reports flow statistics correctly:
1760 dnl - The initial packet of a flow are correctly accounted.
1761 dnl - Later packets within a flow are correctly accounted.
1762 dnl - Flow actions changing (in this case, due to MAC learning)
1763 dnl cause a record to be sent.
1764 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1766 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1767 ADD_OF_PORTS([br0], 1, 2)
1769 ON_EXIT([kill `cat test-netflow.pid`])
1770 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1771 AT_CAPTURE_FILE([netflow.log])
1772 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1775 set Bridge br0 netflow=@nf -- \
1776 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1777 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1779 for delay in 1000 30000; do
1780 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)'
1781 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)'
1783 ovs-appctl time/warp $delay
1788 ovs-appctl -t test-netflow exit
1790 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1792 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1793 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1794 ' netflow.log | sort]], [0],
1796 header: v5, seq 0, engine 2,1
1797 header: v5, seq 1, engine 2,1
1798 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1799 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1800 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1804 dnl Test that basic NetFlow reports active expirations correctly.
1805 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1807 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1808 ADD_OF_PORTS([br0], 1, 2)
1810 ON_EXIT([kill `cat test-netflow.pid`])
1811 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1812 AT_CAPTURE_FILE([netflow.log])
1813 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1816 set Bridge br0 netflow=@nf -- \
1817 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1818 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1820 AT_CHECK([ovs-appctl time/stop])
1822 while test $n -le 60; do
1825 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)'
1826 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)'
1828 ovs-appctl time/warp 1000
1831 ovs-appctl time/warp 10000
1835 ovs-appctl -t test-netflow exit
1837 # Count the number of reported packets:
1838 # - From source to destination before MAC learning kicks in (just one).
1839 # - From source to destination after that.
1840 # - From destination to source.
1848 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1855 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1858 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1861 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1868 eval $counter=\`expr \$$counter + \$pkts\`
1869 n_recs=`expr $n_recs + 1`
1872 # There should be exactly 1 MAC learning packet,
1873 # exactly 59 other packets in that direction,
1874 # and exactly 60 packets in the other direction.
1875 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1878 # There should be 1 expiration for MAC learning,
1879 # at least 5 active and a final expiration in one direction,
1880 # and at least 5 active and a final expiration in the other direction.
1882 AT_CHECK([test $n_recs -ge 13])
1886 AT_SETUP([idle_age and hard_age increase over time])
1889 # get_ages DURATION HARD IDLE
1891 # Fetch the flow duration, hard age, and idle age into the variables
1892 # whose names are given as arguments. Rounds DURATION down to the
1893 # nearest integer. If hard_age doesn't appear in the output, sets
1894 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1897 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1899 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1900 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1901 AS_VAR_COPY([$1], [duration])
1903 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1904 if test X"$hard" = X; then
1907 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1909 AS_VAR_COPY([$2], [hard])
1911 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1912 if test X"$idle" = X; then
1915 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1917 AS_VAR_COPY([$3], [idle])
1920 # Add a flow and get its initial hard and idle age.
1921 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1922 get_ages duration1 hard1 idle1
1924 # Warp time forward by 10 seconds, then modify the flow's actions.
1925 ovs-appctl time/warp 10000
1926 get_ages duration2 hard2 idle2
1927 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1929 # Warp time forward by 10 seconds.
1930 ovs-appctl time/warp 10000
1931 get_ages duration3 hard3 idle3
1933 # Warp time forward 10 more seconds, then pass some packets through the flow,
1934 # then warp forward a few more times because idle times are only updated
1936 ovs-appctl time/warp 10000
1937 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)'
1938 ovs-appctl time/warp 1000
1939 ovs-appctl time/warp 1000
1940 ovs-appctl time/warp 1000
1941 get_ages duration4 hard4 idle4
1943 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1944 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1945 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1947 # Duration should increase steadily over time.
1948 AT_CHECK([test $duration1 -lt $duration2])
1949 AT_CHECK([test $duration2 -lt $duration3])
1950 AT_CHECK([test $duration3 -lt $duration4])
1952 # Hard age should be "none" initially because it's the same as flow_duration,
1953 # then it should increase.
1954 AT_CHECK([test $hard1 = none])
1955 AT_CHECK([test $hard2 = none])
1956 AT_CHECK([test $hard3 != none])
1957 AT_CHECK([test $hard4 != none])
1958 AT_CHECK([test $hard3 -lt $hard4])
1960 # Idle age should increase from 1 to 2 to 3, then decrease.
1961 AT_CHECK([test $idle1 -lt $idle2])
1962 AT_CHECK([test $idle2 -lt $idle3])
1963 AT_CHECK([test $idle3 -gt $idle4])
1965 # Check some invariant relationships.
1966 AT_CHECK([test $duration1 = $idle1])
1967 AT_CHECK([test $duration2 = $idle2])
1968 AT_CHECK([test $duration3 = $idle3])
1969 AT_CHECK([test $idle3 -gt $hard3])
1970 AT_CHECK([test $idle4 -lt $hard4])
1971 AT_CHECK([test $hard4 -lt $duration4])
1976 AT_SETUP([ofproto-dpif - fin_timeout])
1978 AT_DATA([flows.txt], [dnl
1979 in_port=1 actions=output:2
1980 in_port=2 actions=mod_vlan_vid:17,output:1
1982 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1983 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1985 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1987 # Check that a TCP SYN packet does not change the timeout. (Because
1988 # flow stats updates are mainly what implements the fin_timeout
1989 # feature, we warp forward a couple of times to ensure that flow stats
1990 # run before re-checking the flow table.)
1991 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
1992 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1995 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1997 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1999 # Check that a TCP FIN packet does change the timeout.
2000 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2001 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2004 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2006 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2011 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2012 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2013 ADD_OF_PORTS([br0], [1], [2])
2014 ADD_OF_PORTS([br1], [3])
2016 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2023 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2024 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2025 ADD_OF_PORTS([br0], [1], [2])
2026 ADD_OF_PORTS([br1], [3])
2028 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2029 dummy@ovs-dummy: hit:0 missed:0
2030 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2031 overall avg: add rate: 0.000/min, del rate: 0.000/min
2033 br0 65534/100: (dummy)
2037 br1 65534/101: (dummy)
2043 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2044 OVS_VSWITCHD_START([add-br br1 -- \
2045 set bridge br1 datapath-type=dummy fail-mode=secure])
2046 ADD_OF_PORTS([br0], [1], [2])
2047 ADD_OF_PORTS([br1], [3])
2049 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)'])
2050 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)'])
2051 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)'])
2053 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2054 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2055 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2058 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2059 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2065 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2066 OVS_VSWITCHD_START([add-br br1 -- \
2067 set bridge br1 datapath-type=dummy fail-mode=secure])
2068 ADD_OF_PORTS([br0], [1], [2])
2069 ADD_OF_PORTS([br1], [3])
2071 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)'])
2072 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)'])
2073 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)'])
2075 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2076 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2077 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2080 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2081 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2084 AT_CHECK([ovs-appctl dpif/del-flows br0])
2085 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2088 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2089 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), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2095 AT_SETUP([ofproto-dpif - patch ports])
2096 OVS_VSWITCHD_START([add-br br1 \
2097 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2098 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2099 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2101 ADD_OF_PORTS([br0], [2])
2102 ADD_OF_PORTS([br1], [3])
2104 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2106 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2107 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2109 for i in $(seq 1 10); do
2110 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)'
2113 for i in $(seq 1 5); do
2114 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)'
2117 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2121 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2122 dummy@ovs-dummy: hit:13 missed:2
2123 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2124 overall avg: add rate: 0.000/min, del rate: 0.000/min
2126 br0 65534/100: (dummy)
2128 pbr0 1/none: (patch: peer=pbr1)
2130 br1 65534/101: (dummy)
2132 pbr1 1/none: (patch: peer=pbr0)
2135 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2136 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), packets:9, bytes:540, used:0.0s, actions:101,3,2
2138 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2139 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), packets:4, bytes:240, used:0.0s, actions:100,2,3
2142 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2143 OFPST_PORT reply (xid=0x4): 1 ports
2144 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2145 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2148 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2149 OFPST_PORT reply (xid=0x4): 1 ports
2150 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2151 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2157 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2158 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2159 ADD_OF_PORTS([br0], 1, 2)
2161 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2162 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2164 for i in $(seq 1 61); do
2165 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)'
2166 ovs-appctl time/warp 10000
2167 ovs-appctl time/warp 50000
2170 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2173 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2174 dummy@ovs-dummy: hit:0 missed:61
2175 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2176 hourly avg: add rate: 0.641/min, del rate: 0.641/min
2177 overall avg: add rate: 1.000/min, del rate: 1.000/min
2178 br0: hit:0 missed:61
2179 br0 65534/100: (dummy)
2187 AT_SETUP([ofproto-dpif - port duration])
2188 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2189 ADD_OF_PORTS([br0], 1, 2)
2191 ovs-appctl time/warp 10000
2193 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2194 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2196 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2197 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2198 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2200 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2201 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2203 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2204 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2210 dnl ----------------------------------------------------------------------
2211 AT_BANNER([ofproto-dpif -- megaflows])
2213 # Strips out uninteresting parts of megaflow output, as well as parts
2214 # that vary from one run to another (e.g., timing and bond actions).
2215 m4_define([STRIP_XOUT], [[sed '
2216 s/used:[0-9]*\.[0-9]*/used:0.0/
2217 s/Datapath actions:.*/Datapath actions: <del>/
2220 AT_SETUP([ofproto-dpif megaflow - port classification])
2222 ADD_OF_PORTS([br0], [1], [2])
2223 AT_DATA([flows.txt], [dnl
2224 table=0 in_port=1 actions=output(2)
2226 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2227 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)'])
2228 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)'])
2229 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2230 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2235 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2237 ADD_OF_PORTS([br0], [1], [2])
2238 AT_DATA([flows.txt], [dnl
2239 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2241 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2242 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)'])
2243 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)'])
2244 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2245 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>
2246 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>
2251 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2253 ADD_OF_PORTS([br0], [1], [2])
2254 AT_DATA([flows.txt], [dnl
2255 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2257 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2258 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)'])
2259 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)'])
2260 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2261 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>
2262 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>
2267 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2269 ADD_OF_PORTS([br0], [1], [2])
2270 AT_DATA([flows.txt], [dnl
2271 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2273 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2274 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)'])
2275 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)'])
2276 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2277 skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2282 AT_SETUP([ofproto-dpif megaflow - normal])
2284 ADD_OF_PORTS([br0], [1], [2])
2285 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2286 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)'])
2287 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)'])
2288 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2289 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>
2290 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>
2295 AT_SETUP([ofproto-dpif megaflow - mpls])
2297 ADD_OF_PORTS([br0], [1], [2])
2298 AT_DATA([flows.txt], [dnl
2299 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2300 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2302 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2303 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)'])
2304 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)'])
2305 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2306 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>
2307 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>
2312 AT_SETUP([ofproto-dpif megaflow - netflow])
2314 ADD_OF_PORTS([br0], [1], [2])
2316 dnl NetFlow configuration disables wildcarding relevant fields
2317 ON_EXIT([kill `cat test-netflow.pid`])
2318 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2319 AT_CAPTURE_FILE([netflow.log])
2320 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2322 set Bridge br0 netflow=@nf -- \
2323 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2324 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2326 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2327 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)'])
2328 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)'])
2329 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2330 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>
2331 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>
2336 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2338 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2339 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2340 set interface p2 type=dummy ofport_request=2 -- \
2341 set interface p3 type=dummy ofport_request=3])
2342 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2345 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2346 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)'])
2347 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)'])
2348 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2349 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>
2350 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>
2355 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2357 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2358 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2359 set interface p2 type=dummy ofport_request=2 -- \
2360 set interface p3 type=dummy ofport_request=3])
2361 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2364 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2365 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)'])
2366 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)'])
2367 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2368 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>
2369 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>
2374 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2375 # Create bond0 on br0 with interfaces p0 and p1
2376 # and bond1 on br1 with interfaces p2 and p3
2377 # with p0 patched to p2 and p1 patched to p3.
2379 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2380 other-config:lacp-time=fast \
2381 other-config:bond-rebalance-interval=0 -- \
2382 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2383 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2385 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2386 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2387 fail-mode=secure -- \
2388 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2389 other-config:lacp-time=fast \
2390 other-config:bond-rebalance-interval=0 -- \
2391 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2392 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2394 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2396 ADD_OF_PORTS([br0], [7])
2397 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2398 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2399 ovs-appctl time/warp 5000
2400 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)'])
2401 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)'])
2403 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2404 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>
2405 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>
2410 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2412 ADD_OF_PORTS([br0], [1], [2])
2413 AT_DATA([flows.txt], [dnl
2414 table=0 in_port=1,ip actions=resubmit(90)
2415 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2417 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2418 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)'])
2419 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)'])
2420 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2421 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>
2422 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>
2427 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2429 ADD_OF_PORTS([br0], [1], [2])
2430 AT_DATA([flows.txt], [dnl
2431 table=0 in_port=1,ip actions=resubmit(,1)
2432 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2434 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2435 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)'])
2436 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=
2437 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2438 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2439 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2440 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>
2445 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2447 ADD_OF_PORTS([br0], [1], [2])
2448 AT_DATA([flows.txt], [dnl
2449 table=0 in_port=1,ip actions=goto_table(1)
2450 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2452 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2453 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)'])
2454 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)'])
2455 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2456 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>
2457 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>
2462 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2464 ADD_OF_PORTS([br0], [1], [2], [3])
2466 set Bridge br0 mirrors=@m --\
2467 --id=@p3 get Port p3 --\
2468 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2470 AT_DATA([flows.txt], [dnl
2471 in_port=1 actions=output:2
2473 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2474 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2475 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2476 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2477 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2482 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2484 ADD_OF_PORTS([br0], [1], [2], [3])
2486 set Bridge br0 mirrors=@m --\
2487 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2488 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2490 AT_DATA([flows.txt], [dnl
2491 in_port=1 actions=output:2
2493 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2494 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))'])
2495 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)'])
2496 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2497 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2498 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2503 AT_SETUP([ofproto-dpif megaflow - move action])
2505 ADD_OF_PORTS([br0], [1], [2])
2506 AT_DATA([flows.txt], [dnl
2507 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2508 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2509 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2511 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2512 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)'])
2513 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)'])
2514 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2515 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>
2516 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>
2521 AT_SETUP([ofproto-dpif megaflow - push action])
2523 ADD_OF_PORTS([br0], [1], [2])
2524 AT_DATA([flows.txt], [dnl
2525 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2527 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2528 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2529 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2530 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2531 skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2532 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>
2537 AT_SETUP([ofproto-dpif megaflow - learning])
2539 ADD_OF_PORTS([br0], [1], [2])
2540 AT_DATA([flows.txt], [dnl
2541 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
2543 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2544 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)'])
2545 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)'])
2546 dnl The original flow is missing due to a revalidation.
2547 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2548 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>
2549 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>
2554 AT_SETUP([ofproto-dpif megaflow - tunnels])
2556 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2557 ofport_request=1 -- \
2558 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2559 ofport_request=2 options:key=flow -- \
2560 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2561 ofport_request=3 -- \
2562 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2563 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2564 AT_DATA([flows.txt], [dnl
2565 in_port=1,actions=output(2)
2566 in_port=3,actions=output(4)
2568 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2569 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2570 dnl will cause the packet to be dropped.
2571 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)'])
2572 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)'])
2573 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)'])
2574 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)'])
2575 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2576 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2577 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>
2578 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>
2583 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2585 ADD_OF_PORTS([br0], [1], [2])
2586 AT_DATA([flows.txt], [dnl
2587 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2589 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2590 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2591 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2592 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2593 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2594 skb_priority=0,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>