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 br0 '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 br0 '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
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[[]]
103 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
104 AT_CHECK([ovs-appctl ofproto/trace 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=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
105 AT_CHECK([tail -1 stdout], [0],
106 [Datapath actions: 9,55,10,55,66,11,77,88
111 AT_SETUP([ofproto-dpif - dec_ttl])
113 ADD_OF_PORTS([br0], [1], [2], [3], [4])
114 AT_DATA([flows.txt], [dnl
115 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
116 table=1 in_port=1 action=dec_ttl,output:3
118 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
119 AT_CHECK([ovs-appctl ofproto/trace 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=2,frag=no)' -generate], [0], [stdout])
120 AT_CHECK([tail -3 stdout], [0],
121 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
122 This flow is handled by the userspace slow path because it:
123 - Sends "packet-in" messages to the OpenFlow controller.
125 AT_CHECK([ovs-appctl ofproto/trace 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=3,frag=no)'], [0], [stdout])
126 AT_CHECK([tail -1 stdout], [0],
127 [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
129 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
130 AT_CHECK([tail -1 stdout], [0],
131 [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
134 AT_CAPTURE_FILE([ofctl_monitor.log])
135 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
136 AT_CHECK([ovs-appctl ofproto/trace 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=2,frag=no)' -generate], [0], [stdout])
137 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
138 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
139 NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
140 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
146 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
148 ADD_OF_PORTS([br0], [1], [2])
150 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
152 # "in_port" defaults to OFPP_NONE if it's not specified.
153 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"
154 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
155 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
164 AT_SETUP([ofproto-dpif - DSCP])
165 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
166 ADD_OF_PORTS([br0], [9])
167 AT_DATA([flows.txt], [dnl
168 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
170 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
171 AT_CHECK([ovs-vsctl -- \
172 set Port p1 qos=@newqos --\
173 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
174 --id=@q1 create Queue dscp=1 --\
175 --id=@q2 create Queue dscp=2], [0], [ignore])
176 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
177 AT_CHECK([tail -1 stdout], [0],
178 [Datapath actions: dnl
180 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
181 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
183 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
184 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
185 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
191 AT_SETUP([ofproto-dpif - output/flood flags])
193 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
195 AT_DATA([flows.txt], [dnl
196 in_port=local actions=local,flood
197 in_port=1 actions=flood
198 in_port=2 actions=all
199 in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
200 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
202 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
203 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
204 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
206 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
207 AT_CHECK([tail -1 stdout \
208 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
216 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
217 AT_CHECK([tail -1 stdout \
218 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
226 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
227 AT_CHECK([tail -1 stdout \
228 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
237 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
238 AT_CHECK([tail -1 stdout], [0],
239 [Datapath actions: 100,1,2,4,6,7
242 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
243 AT_CHECK([tail -1 stdout], [0],
244 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
249 AT_SETUP([ofproto-dpif - controller])
250 OVS_VSWITCHD_START([dnl
251 add-port br0 p1 -- set Interface p1 type=dummy
254 AT_CAPTURE_FILE([ofctl_monitor.log])
255 AT_DATA([flows.txt], [dnl
256 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
257 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
258 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
260 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
261 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)
262 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)
263 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
264 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)
265 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
266 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
267 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
268 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
269 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
270 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
271 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
272 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
273 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
274 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
275 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
276 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
278 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
281 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
284 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)'
287 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
288 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
289 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
290 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
292 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
293 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
295 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
296 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
299 dnl Singleton controller action.
300 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
303 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)'
306 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
307 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
308 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
309 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
311 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
312 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
314 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
315 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
318 dnl Modified controller action.
319 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
322 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)'
325 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
326 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
327 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
328 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
330 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
331 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
333 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
334 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
337 dnl Modified MPLS controller action.
338 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
341 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)'
344 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
345 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
346 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
347 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07
349 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
350 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07
352 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
353 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07
356 dnl Modified MPLS controller action.
357 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
359 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)
362 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)'
365 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
366 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
367 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
368 mpls(label:10,tc:3,ttl:64,bos:0),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07
370 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
371 mpls(label:10,tc:3,ttl:64,bos:0),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07
373 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
374 mpls(label:10,tc:3,ttl:64,bos:0),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07
377 dnl Modified MPLS controller action.
378 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
381 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))'
384 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
385 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
386 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
387 mpls(label:10,tc:3,ttl:64,bos:1),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
389 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
390 mpls(label:10,tc:3,ttl:64,bos:1),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
392 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
393 mpls(label:10,tc:3,ttl:64,bos:1),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
396 dnl Modified MPLS controller action.
397 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
400 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)'
403 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
404 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
405 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
406 mpls(label:10,tc:3,ttl:63,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07
408 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
409 mpls(label:10,tc:3,ttl:63,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07
411 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
412 mpls(label:10,tc:3,ttl:63,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07
415 dnl Modified MPLS controller action.
416 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
419 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)'
422 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
423 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
424 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
425 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07
427 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
428 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07
430 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
431 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07
434 dnl Modified MPLS controller action.
435 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
438 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)'
441 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
442 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
443 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
444 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07
446 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
447 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07
449 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
450 mpls(label:10,tc:3,ttl:10,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07
453 dnl Modified MPLS controller action.
454 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
457 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)'
460 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
461 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
462 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
463 mpls(label:10,tc:3,ttl:9,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07
465 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
466 mpls(label:10,tc:3,ttl:9,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07
468 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
469 mpls(label:10,tc:3,ttl:9,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07
472 dnl Modified MPLS actions.
473 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
476 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),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
479 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
480 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
481 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
482 mpls(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07
484 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
485 mpls(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07
487 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
488 mpls(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07
491 dnl Modified MPLS ipv6 controller action.
492 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
495 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)'
498 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
499 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
500 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
501 mplsm(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07
503 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
504 mplsm(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07
506 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
507 mplsm(label:1000,tc:7,ttl:64,bos:1),metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07
511 dnl Modified MPLS pop action.
512 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
513 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)
514 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
516 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
519 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'
522 # 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)'
525 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
526 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
527 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
528 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
530 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
531 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
533 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
534 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
538 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
541 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)'
544 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
545 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
546 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
547 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
549 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
550 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
552 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)
553 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
555 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)
556 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
558 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)
559 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
561 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)
562 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
564 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)
565 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
567 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)
568 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
570 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)
571 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
575 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
578 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'
581 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
582 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
583 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
584 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
586 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
587 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
589 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)
590 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
592 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)
593 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
595 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)
596 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
598 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)
599 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
601 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)
602 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
604 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)
605 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
607 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)
608 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
611 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
612 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
613 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
614 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
615 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)
616 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)
617 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)
618 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)
619 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)
620 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
621 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
622 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
623 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
624 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
625 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
626 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
627 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
628 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
629 cookie=0xb, n_packets=3, n_bytes=180, dl_src=50:55:55:55:55:55,dl_type=0x8847 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
630 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
631 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
632 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
639 AT_SETUP([ofproto-dpif - VLAN handling])
641 [set Bridge br0 fail-mode=standalone -- \
642 add-port br0 p1 trunks=10,12 -- \
643 add-port br0 p2 tag=10 -- \
644 add-port br0 p3 tag=12 \
645 other-config:priority-tags=true -- \
646 add-port br0 p4 tag=12 -- \
647 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
648 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
649 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
650 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
651 other-config:priority-tags=true -- \
652 set Interface p1 type=dummy -- \
653 set Interface p2 type=dummy -- \
654 set Interface p3 type=dummy -- \
655 set Interface p4 type=dummy -- \
656 set Interface p5 type=dummy -- \
657 set Interface p6 type=dummy -- \
658 set Interface p7 type=dummy -- \
659 set Interface p8 type=dummy --])
661 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
662 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
668 "100 10 0 1,5,6,7,8,pop_vlan,2" \
669 "100 10 1 1,5,6,7,8,pop_vlan,2" \
672 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
673 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
677 "1 10 0 5,6,7,8,100,pop_vlan,2" \
678 "1 10 1 5,6,7,8,100,pop_vlan,2" \
681 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
682 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
683 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
684 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
685 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
692 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
693 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
694 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
701 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
702 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
703 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
710 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
711 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
712 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
713 "5 10 0 1,6,7,8,100,pop_vlan,2" \
714 "5 10 1 1,6,7,8,100,pop_vlan,2" \
717 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
718 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
719 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
720 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
721 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
722 "6 10 0 1,5,7,8,100,pop_vlan,2" \
723 "6 10 1 1,5,7,8,100,pop_vlan,2" \
726 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
727 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
728 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
729 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
730 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
731 "7 10 0 1,5,6,8,100,pop_vlan,2" \
732 "7 10 1 1,5,6,8,100,pop_vlan,2" \
735 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
736 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
737 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
738 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
739 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
740 "8 10 0 1,5,6,7,100,pop_vlan,2" \
741 "8 10 1 1,5,6,7,100,pop_vlan,2" \
744 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
745 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
753 if test $vlan = none; then
754 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
756 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))"
759 echo "----------------------------------------------------------------------"
760 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
762 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
763 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
765 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
767 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
773 AT_SETUP([ofproto-dpif - fragment handling])
775 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
776 AT_DATA([flows.txt], [dnl
777 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
778 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
779 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
780 priority=50 tcp ip_frag=no actions=output:4
781 priority=50 tcp ip_frag=first actions=output:5
782 priority=50 tcp ip_frag=later actions=output:6
784 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
786 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"
787 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
788 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
789 later_flow="$base_flow,frag=later)"
791 # mode no first later
803 AT_CHECK([ovs-ofctl set-frags br0 $mode])
804 for type in no first later; do
805 eval flow=\$${type}_flow exp_output=\$$type
806 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
807 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
814 AT_SETUP([ofproto-dpif - exit])
816 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
817 AT_DATA([flows.txt], [dnl
818 in_port=1 actions=output:10,exit,output:11
819 in_port=2 actions=output:12,resubmit:1,output:12
820 in_port=3 actions=output:13,resubmit:2,output:14
822 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
823 AT_CHECK([ovs-appctl ofproto/trace 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=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
824 AT_CHECK([tail -1 stdout], [0],
825 [Datapath actions: 10
827 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
828 AT_CHECK([tail -1 stdout], [0],
829 [Datapath actions: 12,10
831 AT_CHECK([ovs-appctl ofproto/trace br0 '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])
832 AT_CHECK([tail -1 stdout], [0],
833 [Datapath actions: 13,12,10
839 AT_SETUP([ofproto-dpif - mirroring, select_all])
841 ADD_OF_PORTS([br0], 1, 2, 3)
843 set Bridge br0 mirrors=@m --\
844 --id=@p3 get Port p3 --\
845 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
847 AT_DATA([flows.txt], [dnl
848 in_port=1 actions=output:2
849 in_port=2 actions=output:1
851 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
853 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)"
854 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
855 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
856 [Datapath actions: 2,3
859 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)"
860 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
861 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
862 [Datapath actions: 1,3
869 AT_SETUP([ofproto-dpif - mirroring, select_src])
871 ADD_OF_PORTS([br0], 1, 2, 3)
873 set Bridge br0 mirrors=@m --\
874 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
875 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
877 AT_DATA([flows.txt], [dnl
878 in_port=1 actions=output:2
879 in_port=2 actions=output:1
881 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
883 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)"
884 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
885 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
886 [Datapath actions: 2,3
889 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)"
890 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
891 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
897 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
899 ADD_OF_PORTS([br0], 1, 2)
901 set Bridge br0 mirrors=@m --\
902 --id=@p2 get Port p2 --\
903 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
905 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
907 # "in_port" defaults to OFPP_NONE if it's not specified.
908 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"
909 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
910 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
911 [Datapath actions: 1,2
918 AT_SETUP([ofproto-dpif - mirroring, select_dst])
920 ADD_OF_PORTS([br0], 1, 2, 3)
922 set Bridge br0 mirrors=@m --\
923 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
924 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
926 AT_DATA([flows.txt], [dnl
927 in_port=1 actions=output:2
928 in_port=2 actions=output:1
930 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
932 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)"
933 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
934 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
935 [Datapath actions: 2,3
938 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)"
939 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
940 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
948 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
950 ADD_OF_PORTS([br0], 1, 2, 3)
952 set Bridge br0 mirrors=@m --\
953 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
954 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
956 AT_DATA([flows.txt], [dnl
957 in_port=1, actions=output:2
959 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
961 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)"
962 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
963 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
967 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))"
968 AT_CHECK([ovs-appctl ofproto/trace br0 "$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=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))"
974 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
975 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
976 [Datapath actions: 2,3
983 AT_SETUP([ofproto-dpif - mirroring, output_port])
985 ADD_OF_PORTS([br0], 1, 2, 3)
987 set Bridge br0 mirrors=@m --\
988 --id=@p3 get Port p3 --\
989 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
991 AT_DATA([flows.txt], [dnl
992 in_port=1 actions=mod_vlan_vid:17,output:2
993 in_port=2 actions=output:1
995 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
997 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)"
998 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
999 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1000 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1003 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)"
1004 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1005 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1006 [Datapath actions: 1,3
1012 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1014 ADD_OF_PORTS([br0], 1, 2)
1016 set Bridge br0 mirrors=@m --\
1017 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1019 AT_DATA([flows.txt], [dnl
1020 in_port=1 actions=output:2
1021 in_port=2 actions=mod_vlan_vid:17,output:1
1023 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1025 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)"
1026 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1027 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1029 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1030 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1032 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1034 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)"
1035 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1036 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1038 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1039 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1041 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1046 m4_define([OFPROTO_TRACE],
1048 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1049 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1051 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1054 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1057 AT_SETUP([ofproto-dpif - MAC learning])
1058 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1059 ADD_OF_PORTS([br0], 1, 2, 3)
1061 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)'
1063 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1066 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1070 # Check for the MAC learning entry.
1071 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1073 3 0 50:54:00:00:00:05 ?
1076 # Trace a packet arrival destined for the learned MAC.
1077 # (This will also learn a MAC.)
1080 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1084 # Check for both MAC learning entries.
1085 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1087 3 0 50:54:00:00:00:05 ?
1088 1 0 50:54:00:00:00:06 ?
1091 # Trace a packet arrival that updates the first learned MAC entry.
1094 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1098 # Check that the MAC learning entry was updated.
1099 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1101 1 0 50:54:00:00:00:06 ?
1102 2 0 50:54:00:00:00:05 ?
1105 # Add another bridge.
1109 -- set bridge br1 datapath-type=dummy \
1110 -- add-port br1 p4 -- set interface p4 type=dummy \
1111 -- add-port br1 p5 -- set interface p5 type=dummy])
1113 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1116 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1121 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1125 # Check that the MAC learning entries were added.
1126 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1128 4 0 50:54:00:00:00:06 ?
1129 5 0 50:54:00:00:00:07 ?
1132 # Delete port p1 and see that its MAC learning entry disappeared, and
1133 # that the MAC learning entry for the same MAC was also deleted from br1.
1134 AT_CHECK([ovs-vsctl del-port p1])
1135 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1137 2 0 50:54:00:00:00:05 ?
1139 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1141 5 0 50:54:00:00:00:07 ?
1147 AT_SETUP([ofproto-dpif - MAC table overflow])
1149 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1150 add-port br0 p1 -- set Interface p1 type=dummy -- \
1151 add-port br0 p2 -- set Interface p2 type=dummy -- \
1152 add-port br0 p3 -- set Interface p3 type=dummy])
1154 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)'
1156 AT_CHECK([ovs-appctl time/stop])
1158 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1159 for i in 0 1 2 3 4 5 6 7 8 9; do
1162 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1165 ovs-appctl time/warp 1000
1168 # Check for the MAC learning entries.
1169 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1171 3 0 50:54:00:00:00:00
1172 3 0 50:54:00:00:00:01
1173 3 0 50:54:00:00:00:02
1174 3 0 50:54:00:00:00:03
1175 3 0 50:54:00:00:00:04
1176 3 0 50:54:00:00:00:05
1177 3 0 50:54:00:00:00:06
1178 3 0 50:54:00:00:00:07
1179 3 0 50:54:00:00:00:08
1180 3 0 50:54:00:00:00:09
1184 # Trace another ARP packet on another MAC.
1187 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1191 # Check that the new one chased the oldest one out of the table.
1192 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1194 3 0 50:54:00:00:00:01 ?
1195 3 0 50:54:00:00:00:02 ?
1196 3 0 50:54:00:00:00:03 ?
1197 3 0 50:54:00:00:00:04 ?
1198 3 0 50:54:00:00:00:05 ?
1199 3 0 50:54:00:00:00:06 ?
1200 3 0 50:54:00:00:00:07 ?
1201 3 0 50:54:00:00:00:08 ?
1202 3 0 50:54:00:00:00:09 ?
1203 3 0 50:54:00:00:00:10 ?
1209 dnl Test that sFlow samples packets correctly.
1210 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1211 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1213 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1214 AT_CAPTURE_FILE([sflow.log])
1215 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1217 ovs-appctl time/stop
1219 ADD_OF_PORTS([br0], 1, 2)
1221 set Interface br0 options:ifindex=1002 -- \
1222 set Interface p1 options:ifindex=1004 -- \
1223 set Interface p2 options:ifindex=1003 -- \
1224 set Bridge br0 sflow=@sf -- \
1225 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1226 header=128 sampling=1 polling=1
1227 ON_EXIT([kill `cat test-sflow.pid`])
1229 dnl open with ARP packets to seed the bridge-learning. The output
1230 dnl ifIndex numbers should be reported predictably after that.
1231 dnl Since we set sampling=1 we should see all of these packets
1232 dnl reported. Sorting the output by data-source and seqNo makes
1233 dnl it deterministic. Ensuring that we send at least two packets
1234 dnl into each port means we get to check the seq nos are
1235 dnl incrementing correctly.
1237 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)'
1238 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)'
1239 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)'
1240 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)'
1241 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)'
1243 dnl sleep long enough to get more than one counter sample
1244 dnl from each datasource so we can check sequence numbers
1245 for i in `seq 1 30`; do
1246 ovs-appctl time/warp 100
1249 ovs-appctl -t test-sflow exit
1251 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1272 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
1292 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
1312 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
1332 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
1352 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
1355 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1369 in_broadcasts=4294967295
1372 in_unknownprotos=4294967295
1375 out_multicasts=4294967295
1376 out_broadcasts=4294967295
1392 in_broadcasts=4294967295
1395 in_unknownprotos=4294967295
1398 out_multicasts=4294967295
1399 out_broadcasts=4294967295
1415 in_broadcasts=4294967295
1418 in_unknownprotos=4294967295
1421 out_multicasts=4294967295
1422 out_broadcasts=4294967295
1438 in_broadcasts=4294967295
1441 in_unknownprotos=4294967295
1444 out_multicasts=4294967295
1445 out_broadcasts=4294967295
1461 in_broadcasts=4294967295
1464 in_unknownprotos=4294967295
1467 out_multicasts=4294967295
1468 out_broadcasts=4294967295
1484 in_broadcasts=4294967295
1487 in_unknownprotos=4294967295
1490 out_multicasts=4294967295
1491 out_broadcasts=4294967295
1500 dnl Test that basic NetFlow reports flow statistics correctly:
1501 dnl - The initial packet of a flow are correctly accounted.
1502 dnl - Later packets within a flow are correctly accounted.
1503 dnl - Flow actions changing (in this case, due to MAC learning)
1504 dnl cause a record to be sent.
1505 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1507 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1508 ADD_OF_PORTS([br0], 1, 2)
1510 ON_EXIT([kill `cat test-netflow.pid`])
1511 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1512 AT_CAPTURE_FILE([netflow.log])
1513 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1516 set Bridge br0 netflow=@nf -- \
1517 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1518 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1520 for delay in 1000 30000; do
1521 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)'
1522 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)'
1524 ovs-appctl time/warp $delay
1529 ovs-appctl -t test-netflow exit
1531 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1533 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1534 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1535 ' netflow.log | sort]], [0],
1537 header: v5, seq 0, engine 2,1
1538 header: v5, seq 1, engine 2,1
1539 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1540 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1541 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1545 dnl Test that basic NetFlow reports active expirations correctly.
1546 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1548 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1549 ADD_OF_PORTS([br0], 1, 2)
1551 ON_EXIT([kill `cat test-netflow.pid`])
1552 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1553 AT_CAPTURE_FILE([netflow.log])
1554 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1557 set Bridge br0 netflow=@nf -- \
1558 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1559 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1561 AT_CHECK([ovs-appctl time/stop])
1563 while test $n -le 60; do
1566 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)'
1567 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)'
1569 ovs-appctl time/warp 1000
1572 ovs-appctl time/warp 10000
1576 ovs-appctl -t test-netflow exit
1578 # Count the number of reported packets:
1579 # - From source to destination before MAC learning kicks in (just one).
1580 # - From source to destination after that.
1581 # - From destination to source.
1589 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1596 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1599 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1602 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1609 eval $counter=\`expr \$$counter + \$pkts\`
1610 n_recs=`expr $n_recs + 1`
1613 # There should be exactly 1 MAC learning packet,
1614 # exactly 59 other packets in that direction,
1615 # and exactly 60 packets in the other direction.
1616 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1619 # There should be 1 expiration for MAC learning,
1620 # at least 5 active and a final expiration in one direction,
1621 # and at least 5 active and a final expiration in the other direction.
1623 AT_CHECK([test $n_recs -ge 13])
1627 AT_SETUP([idle_age and hard_age increase over time])
1630 # get_ages DURATION HARD IDLE
1632 # Fetch the flow duration, hard age, and idle age into the variables
1633 # whose names are given as arguments. Rounds DURATION down to the
1634 # nearest integer. If hard_age doesn't appear in the output, sets
1635 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1638 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1640 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1641 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1642 AS_VAR_COPY([$1], [duration])
1644 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1645 if test X"$hard" = X; then
1648 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1650 AS_VAR_COPY([$2], [hard])
1652 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1653 if test X"$idle" = X; then
1656 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1658 AS_VAR_COPY([$3], [idle])
1661 # Add a flow and get its initial hard and idle age.
1662 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1663 get_ages duration1 hard1 idle1
1665 # Warp time forward by 10 seconds, then modify the flow's actions.
1666 ovs-appctl time/warp 10000
1667 get_ages duration2 hard2 idle2
1668 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1670 # Warp time forward by 10 seconds.
1671 ovs-appctl time/warp 10000
1672 get_ages duration3 hard3 idle3
1674 # Warp time forward 10 more seconds, then pass some packets through the flow,
1675 # then warp forward a few more times because idle times are only updated
1677 ovs-appctl time/warp 10000
1678 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)'
1679 ovs-appctl time/warp 1000
1680 ovs-appctl time/warp 1000
1681 ovs-appctl time/warp 1000
1682 get_ages duration4 hard4 idle4
1684 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1685 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1686 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1688 # Duration should increase steadily over time.
1689 AT_CHECK([test $duration1 -lt $duration2])
1690 AT_CHECK([test $duration2 -lt $duration3])
1691 AT_CHECK([test $duration3 -lt $duration4])
1693 # Hard age should be "none" initially because it's the same as flow_duration,
1694 # then it should increase.
1695 AT_CHECK([test $hard1 = none])
1696 AT_CHECK([test $hard2 = none])
1697 AT_CHECK([test $hard3 != none])
1698 AT_CHECK([test $hard4 != none])
1699 AT_CHECK([test $hard3 -lt $hard4])
1701 # Idle age should increase from 1 to 2 to 3, then decrease.
1702 AT_CHECK([test $idle1 -lt $idle2])
1703 AT_CHECK([test $idle2 -lt $idle3])
1704 AT_CHECK([test $idle3 -gt $idle4])
1706 # Check some invariant relationships.
1707 AT_CHECK([test $duration1 = $idle1])
1708 AT_CHECK([test $duration2 = $idle2])
1709 AT_CHECK([test $duration3 = $idle3])
1710 AT_CHECK([test $idle3 -gt $hard3])
1711 AT_CHECK([test $idle4 -lt $hard4])
1712 AT_CHECK([test $hard4 -lt $duration4])
1717 AT_SETUP([ofproto-dpif - fin_timeout])
1719 AT_DATA([flows.txt], [dnl
1720 in_port=1 actions=output:2
1721 in_port=2 actions=mod_vlan_vid:17,output:1
1723 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1724 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1726 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1728 # Check that a TCP SYN packet does not change the timeout. (Because
1729 # flow stats updates are mainly what implements the fin_timeout
1730 # feature, we warp forward a couple of times to ensure that flow stats
1731 # run before re-checking the flow table.)
1732 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1734 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1737 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1739 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1741 # Check that a TCP FIN packet does change the timeout.
1742 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1744 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1747 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1749 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1754 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1755 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1756 ADD_OF_PORTS([br0], [1], [2])
1757 ADD_OF_PORTS([br1], [3])
1759 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1766 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1767 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1768 ADD_OF_PORTS([br0], [1], [2])
1769 ADD_OF_PORTS([br1], [3])
1771 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1772 br0 (dummy@ovs-dummy):
1773 lookups: hit:0 missed:0
1774 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1775 overall avg: add rate: 0.000/min, del rate: 0.000/min
1776 br0 65534/100: (dummy)
1779 br1 (dummy@ovs-dummy):
1780 lookups: hit:0 missed:0
1781 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1782 overall avg: add rate: 0.000/min, del rate: 0.000/min
1783 br1 65534/101: (dummy)
1787 AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
1788 br0 (dummy@ovs-dummy):
1789 lookups: hit:0 missed:0
1790 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1791 overall avg: add rate: 0.000/min, del rate: 0.000/min
1792 br0 65534/100: (dummy)
1799 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1800 OVS_VSWITCHD_START([add-br br1 -- \
1801 set bridge br1 datapath-type=dummy fail-mode=secure])
1802 ADD_OF_PORTS([br0], [1], [2])
1803 ADD_OF_PORTS([br1], [3])
1805 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)'], [0], [success
1807 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)'], [0], [success
1809 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)'], [0], [success
1812 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1813 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))
1814 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))
1817 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1818 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))
1824 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1825 OVS_VSWITCHD_START([add-br br1 -- \
1826 set bridge br1 datapath-type=dummy fail-mode=secure])
1827 ADD_OF_PORTS([br0], [1], [2])
1828 ADD_OF_PORTS([br1], [3])
1830 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)'], [0], [success
1832 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)'], [0], [success
1834 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)'], [0], [success
1837 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1838 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))
1839 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))
1842 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1843 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))
1846 AT_CHECK([ovs-appctl dpif/del-flows br0])
1847 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1850 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1851 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))
1857 AT_SETUP([ofproto-dpif - patch ports])
1858 OVS_VSWITCHD_START([add-br br1 \
1859 -- set bridge br1 datapath-type=dummy fail-mode=secure \
1860 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
1861 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
1863 ADD_OF_PORTS([br0], [2])
1864 ADD_OF_PORTS([br1], [3])
1866 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1867 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1869 for i in $(seq 1 10); do
1870 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)'
1873 for i in $(seq 1 5); do
1874 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)'
1877 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1881 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1882 br0 (dummy@ovs-dummy):
1883 lookups: hit:9 missed:1
1884 flows: cur: 1, avg: 1.000, max: 1, life span: 0(ms)
1885 overall avg: add rate: 0.000/min, del rate: 0.000/min
1886 br0 65534/100: (dummy)
1888 pbr0 1/none: (patch: peer=pbr1)
1889 br1 (dummy@ovs-dummy):
1890 lookups: hit:4 missed:1
1891 flows: cur: 1, avg: 1.000, max: 1, life span: 0(ms)
1892 overall avg: add rate: 0.000/min, del rate: 0.000/min
1893 br1 65534/101: (dummy)
1895 pbr1 1/none: (patch: peer=pbr0)
1898 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1899 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
1901 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1902 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
1905 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1906 OFPST_PORT reply (xid=0x4): 1 ports
1907 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
1908 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
1911 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
1912 OFPST_PORT reply (xid=0x4): 1 ports
1913 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
1914 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
1920 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
1921 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
1922 ADD_OF_PORTS([br0], 1, 2)
1924 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1926 for i in $(seq 1 61); do
1927 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)'
1928 ovs-appctl time/warp 10000
1929 ovs-appctl time/warp 50000
1932 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
1935 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
1936 br0 (dummy@ovs-dummy):
1937 lookups: hit:0 missed:61
1938 flows: cur: 0, avg: 1.000, max: 1, life span: 10000(ms)
1939 hourly avg: add rate: 0.641/min, del rate: 0.641/min
1940 overall avg: add rate: 1.000/min, del rate: 1.000/min
1941 br0 65534/100: (dummy)