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 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
808 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
815 AT_SETUP([ofproto-dpif - exit])
817 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
818 AT_DATA([flows.txt], [dnl
819 in_port=1 actions=output:10,exit,output:11
820 in_port=2 actions=output:12,resubmit:1,output:12
821 in_port=3 actions=output:13,resubmit:2,output:14
823 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
824 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])
825 AT_CHECK([tail -1 stdout], [0],
826 [Datapath actions: 10
828 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])
829 AT_CHECK([tail -1 stdout], [0],
830 [Datapath actions: 12,10
832 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])
833 AT_CHECK([tail -1 stdout], [0],
834 [Datapath actions: 13,12,10
840 AT_SETUP([ofproto-dpif - mirroring, select_all])
842 ADD_OF_PORTS([br0], 1, 2, 3)
844 set Bridge br0 mirrors=@m --\
845 --id=@p3 get Port p3 --\
846 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
848 AT_DATA([flows.txt], [dnl
849 in_port=1 actions=output:2
850 in_port=2 actions=output:1
852 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
854 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)"
855 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
856 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
857 [Datapath actions: 2,3
860 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)"
861 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
862 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
863 [Datapath actions: 1,3
870 AT_SETUP([ofproto-dpif - mirroring, select_src])
872 ADD_OF_PORTS([br0], 1, 2, 3)
874 set Bridge br0 mirrors=@m --\
875 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
876 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
878 AT_DATA([flows.txt], [dnl
879 in_port=1 actions=output:2
880 in_port=2 actions=output:1
882 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
884 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)"
885 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
886 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
887 [Datapath actions: 2,3
890 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)"
891 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
892 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
898 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
900 ADD_OF_PORTS([br0], 1, 2)
902 set Bridge br0 mirrors=@m --\
903 --id=@p2 get Port p2 --\
904 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
906 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
908 # "in_port" defaults to OFPP_NONE if it's not specified.
909 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"
910 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
911 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
912 [Datapath actions: 1,2
919 AT_SETUP([ofproto-dpif - mirroring, select_dst])
921 ADD_OF_PORTS([br0], 1, 2, 3)
923 set Bridge br0 mirrors=@m --\
924 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
925 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
927 AT_DATA([flows.txt], [dnl
928 in_port=1 actions=output:2
929 in_port=2 actions=output:1
931 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
933 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)"
934 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
935 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
936 [Datapath actions: 2,3
939 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)"
940 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
941 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
949 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
951 ADD_OF_PORTS([br0], 1, 2, 3)
953 set Bridge br0 mirrors=@m --\
954 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
955 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
957 AT_DATA([flows.txt], [dnl
958 in_port=1, actions=output:2
960 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
962 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)"
963 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
964 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
968 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))"
969 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
970 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
974 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))"
975 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
976 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
977 [Datapath actions: 2,3
984 AT_SETUP([ofproto-dpif - mirroring, output_port])
986 ADD_OF_PORTS([br0], 1, 2, 3)
988 set Bridge br0 mirrors=@m --\
989 --id=@p3 get Port p3 --\
990 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
992 AT_DATA([flows.txt], [dnl
993 in_port=1 actions=mod_vlan_vid:17,output:2
994 in_port=2 actions=output:1
996 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
998 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)"
999 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1000 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1001 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1004 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)"
1005 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1006 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1007 [Datapath actions: 1,3
1013 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1015 ADD_OF_PORTS([br0], 1, 2)
1017 set Bridge br0 mirrors=@m --\
1018 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1020 AT_DATA([flows.txt], [dnl
1021 in_port=1 actions=output:2
1022 in_port=2 actions=mod_vlan_vid:17,output:1
1024 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1026 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)"
1027 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1028 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1030 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1031 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1033 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1035 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)"
1036 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1037 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1039 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1040 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1042 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1047 # Two testcases below are for the ofproto/trace command
1048 # The first one tests all correct syntax:
1049 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1050 # ofproto/trace br_name br_flow [-generate|packet]
1051 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1052 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1053 ADD_OF_PORTS([br0], 1, 2, 3)
1055 AT_DATA([flows.txt], [dnl
1056 in_port=1 actions=output:2
1057 in_port=2 actions=output:1
1059 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1061 odp_flow="in_port(1)"
1063 # Test command: ofproto/trace odp_flow
1064 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1065 AT_CHECK([tail -1 stdout], [0], [dnl
1069 # Test command: ofproto/trace dp_name odp_flow
1070 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1071 AT_CHECK([tail -1 stdout], [0], [dnl
1074 # Test commmand: ofproto/trace br_name br_flow
1075 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1076 AT_CHECK([tail -1 stdout], [0], [dnl
1080 # Delete the inserted flows
1081 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1082 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1084 # This section beflow tests the [-generate] option
1085 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1086 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"
1088 # Test command: ofproto/trace odp_flow
1089 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1090 # Check for no MAC learning entry
1091 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1095 # Test command: ofproto/trace br_name br_flow
1096 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1097 # Check for no MAC learning entry
1098 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1102 # Test command: ofproto/trace odp_flow -generate
1103 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1104 # Check for the MAC learning entry
1105 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1107 3 0 50:54:00:00:00:05 ?
1110 # Test command: ofproto/trace dp_name odp_flow -generate
1111 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1112 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1113 -generate], [0], [stdout])
1114 # Check for both MAC learning entries
1115 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1117 3 0 50:54:00:00:00:05 ?
1118 1 0 50:54:00:00:00:06 ?
1121 # Test command: ofproto/trace br_name br_flow -generate
1122 AT_CHECK([ovs-appctl ofproto/trace br0 \
1123 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1124 -generate], [0], [stdout])
1125 # Check for both MAC learning entries.
1126 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1128 3 0 50:54:00:00:00:05 ?
1129 1 0 50:54:00:00:00:06 ?
1130 2 0 50:54:00:00:00:07 ?
1133 # This section beflow tests the [packet] option
1134 # The ovs-tcpundump of packets between port1 and port2
1135 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1136 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1138 # Construct the MAC learning table
1139 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1140 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1141 -generate], [0], [stdout])
1143 # Construct the MAC learning table
1144 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1145 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1146 -generate], [0], [stdout])
1148 # Test command: ofproto/trace odp_flow packet
1149 AT_CHECK([ovs-appctl ofproto/trace \
1150 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1151 AT_CHECK([tail -1 stdout], [0], [dnl
1154 AT_CHECK([head -n 3 stdout], [0], [dnl
1156 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
1157 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
1160 # Test command: ofproto/trace dp_name odp_flow packet
1161 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1162 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1163 AT_CHECK([tail -1 stdout], [0], [dnl
1166 AT_CHECK([head -n 3 stdout], [0], [dnl
1168 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
1169 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
1172 # Test command: ofproto/trace br_name br_flow packet
1173 AT_CHECK([ovs-appctl ofproto/trace br0 \
1174 "in_port=2,skb_priority=2,skb_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1175 AT_CHECK([tail -1 stdout], [0], [dnl
1176 Datapath actions: set(skb_mark(0)),1
1178 AT_CHECK([head -n 2 stdout], [0], [dnl
1179 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
1180 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
1186 # The second test tests the corner cases
1187 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1189 ADD_OF_PORTS([br0], 1, 2)
1192 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1193 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1195 generate="-generate"
1196 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1198 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1204 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1206 AT_CHECK([tail -2 stderr], [0], [dnl
1207 Cannot find datapath of this name
1208 ovs-appctl: ovs-vswitchd: server returned an error
1211 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1217 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1219 AT_CHECK([tail -2 stderr], [0], [dnl
1220 Cannot find datapath of this name
1221 ovs-appctl: ovs-vswitchd: server returned an error
1224 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1230 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1232 AT_CHECK([tail -2 stderr], [0], [dnl
1233 Cannot find datapath of this name
1234 ovs-appctl: ovs-vswitchd: server returned an error
1237 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1243 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1245 AT_CHECK([tail -2 stderr], [0], [dnl
1246 Cannot find datapath of this name
1247 ovs-appctl: ovs-vswitchd: server returned an error
1250 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1256 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1258 AT_CHECK([tail -2 stderr], [0], [dnl
1260 ovs-appctl: ovs-vswitchd: server returned an error
1263 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1269 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1271 AT_CHECK([tail -2 stderr], [0], [dnl
1272 Must specify bridge name
1273 ovs-appctl: ovs-vswitchd: server returned an error
1276 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1277 AT_CHECK([ovs-appctl ofproto/trace \
1278 ovs-dummy "$odp_flow" garbage_option],
1279 [2], [stdout],[stderr])
1280 AT_CHECK([tail -2 stderr], [0], [dnl
1281 Trailing garbage in packet data
1282 ovs-appctl: ovs-vswitchd: server returned an error
1285 # Test incorrect command: ofproto/trace with 4 arguments
1286 AT_CHECK([ovs-appctl ofproto/trace \
1287 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1288 AT_CHECK([tail -2 stderr], [0], [dnl
1289 "ofproto/trace" command takes at most 3 arguments
1290 ovs-appctl: ovs-vswitchd: server returned an error
1293 # Test incorrect command: ofproto/trace with 0 argument
1294 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1295 AT_CHECK([tail -2 stderr], [0], [dnl
1296 "ofproto/trace" command requires at least 1 arguments
1297 ovs-appctl: ovs-vswitchd: server returned an error
1303 m4_define([OFPROTO_TRACE],
1305 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1306 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1308 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1311 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1314 AT_SETUP([ofproto-dpif - MAC learning])
1315 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1316 ADD_OF_PORTS([br0], 1, 2, 3)
1318 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)'
1320 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1323 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1327 # Check for the MAC learning entry.
1328 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1330 3 0 50:54:00:00:00:05 ?
1333 # Trace a packet arrival destined for the learned MAC.
1334 # (This will also learn a MAC.)
1337 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1341 # Check for both MAC learning entries.
1342 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1344 3 0 50:54:00:00:00:05 ?
1345 1 0 50:54:00:00:00:06 ?
1348 # Trace a packet arrival that updates the first learned MAC entry.
1351 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1355 # Check that the MAC learning entry was updated.
1356 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1358 1 0 50:54:00:00:00:06 ?
1359 2 0 50:54:00:00:00:05 ?
1362 # Add another bridge.
1366 -- set bridge br1 datapath-type=dummy \
1367 -- add-port br1 p4 -- set interface p4 type=dummy \
1368 -- add-port br1 p5 -- set interface p5 type=dummy])
1370 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1373 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1378 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1382 # Check that the MAC learning entries were added.
1383 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1385 4 0 50:54:00:00:00:06 ?
1386 5 0 50:54:00:00:00:07 ?
1389 # Delete port p1 and see that its MAC learning entry disappeared, and
1390 # that the MAC learning entry for the same MAC was also deleted from br1.
1391 AT_CHECK([ovs-vsctl del-port p1])
1392 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1394 2 0 50:54:00:00:00:05 ?
1396 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1398 5 0 50:54:00:00:00:07 ?
1404 AT_SETUP([ofproto-dpif - MAC table overflow])
1406 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1407 add-port br0 p1 -- set Interface p1 type=dummy -- \
1408 add-port br0 p2 -- set Interface p2 type=dummy -- \
1409 add-port br0 p3 -- set Interface p3 type=dummy])
1411 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)'
1413 AT_CHECK([ovs-appctl time/stop])
1415 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1416 for i in 0 1 2 3 4 5 6 7 8 9; do
1419 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1422 ovs-appctl time/warp 1000
1425 # Check for the MAC learning entries.
1426 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1428 3 0 50:54:00:00:00:00
1429 3 0 50:54:00:00:00:01
1430 3 0 50:54:00:00:00:02
1431 3 0 50:54:00:00:00:03
1432 3 0 50:54:00:00:00:04
1433 3 0 50:54:00:00:00:05
1434 3 0 50:54:00:00:00:06
1435 3 0 50:54:00:00:00:07
1436 3 0 50:54:00:00:00:08
1437 3 0 50:54:00:00:00:09
1441 # Trace another ARP packet on another MAC.
1444 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1448 # Check that the new one chased the oldest one out of the table.
1449 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1451 3 0 50:54:00:00:00:01 ?
1452 3 0 50:54:00:00:00:02 ?
1453 3 0 50:54:00:00:00:03 ?
1454 3 0 50:54:00:00:00:04 ?
1455 3 0 50:54:00:00:00:05 ?
1456 3 0 50:54:00:00:00:06 ?
1457 3 0 50:54:00:00:00:07 ?
1458 3 0 50:54:00:00:00:08 ?
1459 3 0 50:54:00:00:00:09 ?
1460 3 0 50:54:00:00:00:10 ?
1466 dnl Test that sFlow samples packets correctly.
1467 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1468 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1470 ON_EXIT([kill `cat test-sflow.pid`])
1471 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1472 AT_CAPTURE_FILE([sflow.log])
1473 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1475 ovs-appctl time/stop
1477 ADD_OF_PORTS([br0], 1, 2)
1479 set Interface br0 options:ifindex=1002 -- \
1480 set Interface p1 options:ifindex=1004 -- \
1481 set Interface p2 options:ifindex=1003 -- \
1482 set Bridge br0 sflow=@sf -- \
1483 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1484 header=128 sampling=1 polling=1
1486 dnl open with ARP packets to seed the bridge-learning. The output
1487 dnl ifIndex numbers should be reported predictably after that.
1488 dnl Since we set sampling=1 we should see all of these packets
1489 dnl reported. Sorting the output by data-source and seqNo makes
1490 dnl it deterministic. Ensuring that we send at least two packets
1491 dnl into each port means we get to check the seq nos are
1492 dnl incrementing correctly.
1494 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)'
1495 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)'
1496 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)'
1497 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)'
1498 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)'
1500 dnl sleep long enough to get more than one counter sample
1501 dnl from each datasource so we can check sequence numbers
1502 for i in `seq 1 30`; do
1503 ovs-appctl time/warp 100
1506 ovs-appctl -t test-sflow exit
1508 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1529 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
1549 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
1569 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
1589 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
1609 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
1612 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1626 in_broadcasts=4294967295
1629 in_unknownprotos=4294967295
1632 out_multicasts=4294967295
1633 out_broadcasts=4294967295
1649 in_broadcasts=4294967295
1652 in_unknownprotos=4294967295
1655 out_multicasts=4294967295
1656 out_broadcasts=4294967295
1672 in_broadcasts=4294967295
1675 in_unknownprotos=4294967295
1678 out_multicasts=4294967295
1679 out_broadcasts=4294967295
1695 in_broadcasts=4294967295
1698 in_unknownprotos=4294967295
1701 out_multicasts=4294967295
1702 out_broadcasts=4294967295
1718 in_broadcasts=4294967295
1721 in_unknownprotos=4294967295
1724 out_multicasts=4294967295
1725 out_broadcasts=4294967295
1741 in_broadcasts=4294967295
1744 in_unknownprotos=4294967295
1747 out_multicasts=4294967295
1748 out_broadcasts=4294967295
1757 dnl Test that basic NetFlow reports flow statistics correctly:
1758 dnl - The initial packet of a flow are correctly accounted.
1759 dnl - Later packets within a flow are correctly accounted.
1760 dnl - Flow actions changing (in this case, due to MAC learning)
1761 dnl cause a record to be sent.
1762 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1764 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1765 ADD_OF_PORTS([br0], 1, 2)
1767 ON_EXIT([kill `cat test-netflow.pid`])
1768 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1769 AT_CAPTURE_FILE([netflow.log])
1770 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1773 set Bridge br0 netflow=@nf -- \
1774 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1775 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1777 for delay in 1000 30000; do
1778 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)'
1779 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)'
1781 ovs-appctl time/warp $delay
1786 ovs-appctl -t test-netflow exit
1788 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1790 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1791 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1792 ' netflow.log | sort]], [0],
1794 header: v5, seq 0, engine 2,1
1795 header: v5, seq 1, engine 2,1
1796 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1797 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1798 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1802 dnl Test that basic NetFlow reports active expirations correctly.
1803 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1805 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1806 ADD_OF_PORTS([br0], 1, 2)
1808 ON_EXIT([kill `cat test-netflow.pid`])
1809 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1810 AT_CAPTURE_FILE([netflow.log])
1811 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1814 set Bridge br0 netflow=@nf -- \
1815 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1816 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1818 AT_CHECK([ovs-appctl time/stop])
1820 while test $n -le 60; do
1823 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)'
1824 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)'
1826 ovs-appctl time/warp 1000
1829 ovs-appctl time/warp 10000
1833 ovs-appctl -t test-netflow exit
1835 # Count the number of reported packets:
1836 # - From source to destination before MAC learning kicks in (just one).
1837 # - From source to destination after that.
1838 # - From destination to source.
1846 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1853 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1856 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1859 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1866 eval $counter=\`expr \$$counter + \$pkts\`
1867 n_recs=`expr $n_recs + 1`
1870 # There should be exactly 1 MAC learning packet,
1871 # exactly 59 other packets in that direction,
1872 # and exactly 60 packets in the other direction.
1873 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1876 # There should be 1 expiration for MAC learning,
1877 # at least 5 active and a final expiration in one direction,
1878 # and at least 5 active and a final expiration in the other direction.
1880 AT_CHECK([test $n_recs -ge 13])
1884 AT_SETUP([idle_age and hard_age increase over time])
1887 # get_ages DURATION HARD IDLE
1889 # Fetch the flow duration, hard age, and idle age into the variables
1890 # whose names are given as arguments. Rounds DURATION down to the
1891 # nearest integer. If hard_age doesn't appear in the output, sets
1892 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1895 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1897 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1898 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1899 AS_VAR_COPY([$1], [duration])
1901 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1902 if test X"$hard" = X; then
1905 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1907 AS_VAR_COPY([$2], [hard])
1909 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1910 if test X"$idle" = X; then
1913 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1915 AS_VAR_COPY([$3], [idle])
1918 # Add a flow and get its initial hard and idle age.
1919 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1920 get_ages duration1 hard1 idle1
1922 # Warp time forward by 10 seconds, then modify the flow's actions.
1923 ovs-appctl time/warp 10000
1924 get_ages duration2 hard2 idle2
1925 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1927 # Warp time forward by 10 seconds.
1928 ovs-appctl time/warp 10000
1929 get_ages duration3 hard3 idle3
1931 # Warp time forward 10 more seconds, then pass some packets through the flow,
1932 # then warp forward a few more times because idle times are only updated
1934 ovs-appctl time/warp 10000
1935 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)'
1936 ovs-appctl time/warp 1000
1937 ovs-appctl time/warp 1000
1938 ovs-appctl time/warp 1000
1939 get_ages duration4 hard4 idle4
1941 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1942 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1943 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1945 # Duration should increase steadily over time.
1946 AT_CHECK([test $duration1 -lt $duration2])
1947 AT_CHECK([test $duration2 -lt $duration3])
1948 AT_CHECK([test $duration3 -lt $duration4])
1950 # Hard age should be "none" initially because it's the same as flow_duration,
1951 # then it should increase.
1952 AT_CHECK([test $hard1 = none])
1953 AT_CHECK([test $hard2 = none])
1954 AT_CHECK([test $hard3 != none])
1955 AT_CHECK([test $hard4 != none])
1956 AT_CHECK([test $hard3 -lt $hard4])
1958 # Idle age should increase from 1 to 2 to 3, then decrease.
1959 AT_CHECK([test $idle1 -lt $idle2])
1960 AT_CHECK([test $idle2 -lt $idle3])
1961 AT_CHECK([test $idle3 -gt $idle4])
1963 # Check some invariant relationships.
1964 AT_CHECK([test $duration1 = $idle1])
1965 AT_CHECK([test $duration2 = $idle2])
1966 AT_CHECK([test $duration3 = $idle3])
1967 AT_CHECK([test $idle3 -gt $hard3])
1968 AT_CHECK([test $idle4 -lt $hard4])
1969 AT_CHECK([test $hard4 -lt $duration4])
1974 AT_SETUP([ofproto-dpif - fin_timeout])
1976 AT_DATA([flows.txt], [dnl
1977 in_port=1 actions=output:2
1978 in_port=2 actions=mod_vlan_vid:17,output:1
1980 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1981 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1983 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1985 # Check that a TCP SYN packet does not change the timeout. (Because
1986 # flow stats updates are mainly what implements the fin_timeout
1987 # feature, we warp forward a couple of times to ensure that flow stats
1988 # run before re-checking the flow table.)
1989 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
1990 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1993 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1995 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1997 # Check that a TCP FIN packet does change the timeout.
1998 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
1999 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2002 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2004 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2009 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2010 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2011 ADD_OF_PORTS([br0], [1], [2])
2012 ADD_OF_PORTS([br1], [3])
2014 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2021 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2022 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2023 ADD_OF_PORTS([br0], [1], [2])
2024 ADD_OF_PORTS([br1], [3])
2026 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2027 br0 (dummy@ovs-dummy):
2028 lookups: hit:0 missed:0
2029 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
2030 overall avg: add rate: 0.000/min, del rate: 0.000/min
2031 br0 65534/100: (dummy)
2034 br1 (dummy@ovs-dummy):
2035 lookups: hit:0 missed:0
2036 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
2037 overall avg: add rate: 0.000/min, del rate: 0.000/min
2038 br1 65534/101: (dummy)
2042 AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
2043 br0 (dummy@ovs-dummy):
2044 lookups: hit:0 missed:0
2045 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
2046 overall avg: add rate: 0.000/min, del rate: 0.000/min
2047 br0 65534/100: (dummy)
2054 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2055 OVS_VSWITCHD_START([add-br br1 -- \
2056 set bridge br1 datapath-type=dummy fail-mode=secure])
2057 ADD_OF_PORTS([br0], [1], [2])
2058 ADD_OF_PORTS([br1], [3])
2060 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)'])
2061 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)'])
2062 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)'])
2064 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2065 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))
2066 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))
2069 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2070 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))
2076 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2077 OVS_VSWITCHD_START([add-br br1 -- \
2078 set bridge br1 datapath-type=dummy fail-mode=secure])
2079 ADD_OF_PORTS([br0], [1], [2])
2080 ADD_OF_PORTS([br1], [3])
2082 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)'])
2083 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)'])
2084 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)'])
2086 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2087 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))
2088 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))
2091 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2092 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_CHECK([ovs-appctl dpif/del-flows br0])
2096 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2099 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2100 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))
2106 AT_SETUP([ofproto-dpif - patch ports])
2107 OVS_VSWITCHD_START([add-br br1 \
2108 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2109 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2110 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2112 ADD_OF_PORTS([br0], [2])
2113 ADD_OF_PORTS([br1], [3])
2115 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2116 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2118 for i in $(seq 1 10); do
2119 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)'
2122 for i in $(seq 1 5); do
2123 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)'
2126 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2130 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2131 br0 (dummy@ovs-dummy):
2132 lookups: hit:9 missed:1
2133 flows: cur: 1, avg: 1.000, max: 1, life span: 0(ms)
2134 overall avg: add rate: 0.000/min, del rate: 0.000/min
2135 br0 65534/100: (dummy)
2137 pbr0 1/none: (patch: peer=pbr1)
2138 br1 (dummy@ovs-dummy):
2139 lookups: hit:4 missed:1
2140 flows: cur: 1, avg: 1.000, max: 1, life span: 0(ms)
2141 overall avg: add rate: 0.000/min, del rate: 0.000/min
2142 br1 65534/101: (dummy)
2144 pbr1 1/none: (patch: peer=pbr0)
2147 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2148 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
2150 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2151 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
2154 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2155 OFPST_PORT reply (xid=0x4): 1 ports
2156 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2157 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2160 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2161 OFPST_PORT reply (xid=0x4): 1 ports
2162 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2163 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2169 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2170 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2171 ADD_OF_PORTS([br0], 1, 2)
2173 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2175 for i in $(seq 1 61); do
2176 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)'
2177 ovs-appctl time/warp 10000
2178 ovs-appctl time/warp 50000
2181 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2184 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2185 br0 (dummy@ovs-dummy):
2186 lookups: hit:0 missed:61
2187 flows: cur: 0, avg: 1.000, max: 1, life span: 10000(ms)
2188 hourly avg: add rate: 0.641/min, del rate: 0.641/min
2189 overall avg: add rate: 1.000/min, del rate: 1.000/min
2190 br0 65534/100: (dummy)
2198 AT_SETUP([ofproto-dpif - port duration])
2199 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2200 ADD_OF_PORTS([br0], 1, 2)
2202 ovs-appctl time/warp 10000
2204 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2205 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]]\{1,\}\)\{,1\}s/=?s/' stdout], [0],
2207 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2208 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2209 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2211 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2212 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2214 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2215 tx pkts=0, bytes=0, drop=0, errs=0, coll=0