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 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
515 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),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
518 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
519 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
520 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
521 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 tcp_csum:0
523 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
524 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 tcp_csum:0
526 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
527 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 tcp_csum:0
531 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
534 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)'
537 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
538 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
539 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
540 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
542 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
543 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
545 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)
546 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
548 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)
549 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
551 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)
552 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
554 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)
555 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
557 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)
558 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
560 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)
561 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
563 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)
564 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
568 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
571 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'
574 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
575 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
576 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
577 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
579 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
580 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
582 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)
583 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
585 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)
586 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
588 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)
589 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
591 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)
592 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
594 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)
595 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
597 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)
598 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
600 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)
601 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
604 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
605 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
606 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
607 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)
608 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)
609 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)
610 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)
611 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)
612 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
613 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
614 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
615 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
616 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
617 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
618 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
619 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
620 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
621 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
622 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
623 cookie=0xd, n_packets=3, n_bytes=180, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
624 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
631 AT_SETUP([ofproto-dpif - VLAN handling])
633 [set Bridge br0 fail-mode=standalone -- \
634 add-port br0 p1 trunks=10,12 -- \
635 add-port br0 p2 tag=10 -- \
636 add-port br0 p3 tag=12 \
637 other-config:priority-tags=true -- \
638 add-port br0 p4 tag=12 -- \
639 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
640 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
641 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
642 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
643 other-config:priority-tags=true -- \
644 set Interface p1 type=dummy -- \
645 set Interface p2 type=dummy -- \
646 set Interface p3 type=dummy -- \
647 set Interface p4 type=dummy -- \
648 set Interface p5 type=dummy -- \
649 set Interface p6 type=dummy -- \
650 set Interface p7 type=dummy -- \
651 set Interface p8 type=dummy --])
653 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
654 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
660 "100 10 0 1,5,6,7,8,pop_vlan,2" \
661 "100 10 1 1,5,6,7,8,pop_vlan,2" \
664 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
665 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
669 "1 10 0 5,6,7,8,100,pop_vlan,2" \
670 "1 10 1 5,6,7,8,100,pop_vlan,2" \
673 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
674 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
675 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
676 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
677 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
684 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
685 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
686 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
693 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
694 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
695 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
702 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
703 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
704 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
705 "5 10 0 1,6,7,8,100,pop_vlan,2" \
706 "5 10 1 1,6,7,8,100,pop_vlan,2" \
709 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
710 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
711 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
712 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
713 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
714 "6 10 0 1,5,7,8,100,pop_vlan,2" \
715 "6 10 1 1,5,7,8,100,pop_vlan,2" \
718 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
719 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
720 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
721 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
722 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
723 "7 10 0 1,5,6,8,100,pop_vlan,2" \
724 "7 10 1 1,5,6,8,100,pop_vlan,2" \
727 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
728 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
729 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
730 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
731 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
732 "8 10 0 1,5,6,7,100,pop_vlan,2" \
733 "8 10 1 1,5,6,7,100,pop_vlan,2" \
736 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
737 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
745 if test $vlan = none; then
746 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
748 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))"
751 echo "----------------------------------------------------------------------"
752 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
754 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
755 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
757 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
759 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
765 AT_SETUP([ofproto-dpif - fragment handling])
767 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
768 AT_DATA([flows.txt], [dnl
769 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
770 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
771 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
772 priority=50 tcp ip_frag=no actions=output:4
773 priority=50 tcp ip_frag=first actions=output:5
774 priority=50 tcp ip_frag=later actions=output:6
776 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
778 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"
779 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
780 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
781 later_flow="$base_flow,frag=later)"
783 # mode no first later
795 AT_CHECK([ovs-ofctl set-frags br0 $mode])
796 for type in no first later; do
797 eval flow=\$${type}_flow exp_output=\$$type
798 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
799 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
806 AT_SETUP([ofproto-dpif - exit])
808 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
809 AT_DATA([flows.txt], [dnl
810 in_port=1 actions=output:10,exit,output:11
811 in_port=2 actions=output:12,resubmit:1,output:12
812 in_port=3 actions=output:13,resubmit:2,output:14
814 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
815 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])
816 AT_CHECK([tail -1 stdout], [0],
817 [Datapath actions: 10
819 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])
820 AT_CHECK([tail -1 stdout], [0],
821 [Datapath actions: 12,10
823 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])
824 AT_CHECK([tail -1 stdout], [0],
825 [Datapath actions: 13,12,10
831 AT_SETUP([ofproto-dpif - mirroring, select_all])
833 ADD_OF_PORTS([br0], 1, 2, 3)
835 set Bridge br0 mirrors=@m --\
836 --id=@p3 get Port p3 --\
837 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
839 AT_DATA([flows.txt], [dnl
840 in_port=1 actions=output:2
841 in_port=2 actions=output:1
843 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
845 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)"
846 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
847 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
848 [Datapath actions: 2,3
851 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)"
852 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
853 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
854 [Datapath actions: 1,3
861 AT_SETUP([ofproto-dpif - mirroring, select_src])
863 ADD_OF_PORTS([br0], 1, 2, 3)
865 set Bridge br0 mirrors=@m --\
866 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
867 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
869 AT_DATA([flows.txt], [dnl
870 in_port=1 actions=output:2
871 in_port=2 actions=output:1
873 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
875 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)"
876 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
877 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
878 [Datapath actions: 2,3
881 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)"
882 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
883 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
889 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
891 ADD_OF_PORTS([br0], 1, 2)
893 set Bridge br0 mirrors=@m --\
894 --id=@p2 get Port p2 --\
895 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
897 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
899 # "in_port" defaults to OFPP_NONE if it's not specified.
900 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"
901 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
902 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
903 [Datapath actions: 1,2
910 AT_SETUP([ofproto-dpif - mirroring, select_dst])
912 ADD_OF_PORTS([br0], 1, 2, 3)
914 set Bridge br0 mirrors=@m --\
915 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
916 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
918 AT_DATA([flows.txt], [dnl
919 in_port=1 actions=output:2
920 in_port=2 actions=output:1
922 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
924 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)"
925 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
926 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
927 [Datapath actions: 2,3
930 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)"
931 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
932 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
940 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
942 ADD_OF_PORTS([br0], 1, 2, 3)
944 set Bridge br0 mirrors=@m --\
945 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
946 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
948 AT_DATA([flows.txt], [dnl
949 in_port=1, actions=output:2
951 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
953 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)"
954 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
955 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
959 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))"
960 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
961 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
965 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))"
966 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
967 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
968 [Datapath actions: 2,3
975 AT_SETUP([ofproto-dpif - mirroring, output_port])
977 ADD_OF_PORTS([br0], 1, 2, 3)
979 set Bridge br0 mirrors=@m --\
980 --id=@p3 get Port p3 --\
981 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
983 AT_DATA([flows.txt], [dnl
984 in_port=1 actions=mod_vlan_vid:17,output:2
985 in_port=2 actions=output:1
987 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
989 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)"
990 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
991 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
992 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
995 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)"
996 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
997 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
998 [Datapath actions: 1,3
1004 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1006 ADD_OF_PORTS([br0], 1, 2)
1008 set Bridge br0 mirrors=@m --\
1009 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1011 AT_DATA([flows.txt], [dnl
1012 in_port=1 actions=output:2
1013 in_port=2 actions=mod_vlan_vid:17,output:1
1015 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1017 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)"
1018 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1019 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1021 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1022 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1024 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1026 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)"
1027 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1028 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1030 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,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])
1038 m4_define([OFPROTO_TRACE],
1040 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1041 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1043 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1046 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1049 AT_SETUP([ofproto-dpif - MAC learning])
1050 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1051 ADD_OF_PORTS([br0], 1, 2, 3)
1053 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)'
1055 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1058 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1062 # Check for the MAC learning entry.
1063 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1065 3 0 50:54:00:00:00:05 ?
1068 # Trace a packet arrival destined for the learned MAC.
1069 # (This will also learn a MAC.)
1072 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1076 # Check for both MAC learning entries.
1077 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1079 3 0 50:54:00:00:00:05 ?
1080 1 0 50:54:00:00:00:06 ?
1083 # Trace a packet arrival that updates the first learned MAC entry.
1086 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1090 # Check that the MAC learning entry was updated.
1091 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1093 1 0 50:54:00:00:00:06 ?
1094 2 0 50:54:00:00:00:05 ?
1097 # Add another bridge.
1101 -- set bridge br1 datapath-type=dummy \
1102 -- add-port br1 p4 -- set interface p4 type=dummy \
1103 -- add-port br1 p5 -- set interface p5 type=dummy])
1105 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1108 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1113 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1117 # Check that the MAC learning entries were added.
1118 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1120 4 0 50:54:00:00:00:06 ?
1121 5 0 50:54:00:00:00:07 ?
1124 # Delete port p1 and see that its MAC learning entry disappeared, and
1125 # that the MAC learning entry for the same MAC was also deleted from br1.
1126 AT_CHECK([ovs-vsctl del-port p1])
1127 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1129 2 0 50:54:00:00:00:05 ?
1131 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1133 5 0 50:54:00:00:00:07 ?
1139 AT_SETUP([ofproto-dpif - MAC table overflow])
1141 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1142 add-port br0 p1 -- set Interface p1 type=dummy -- \
1143 add-port br0 p2 -- set Interface p2 type=dummy -- \
1144 add-port br0 p3 -- set Interface p3 type=dummy])
1146 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)'
1148 AT_CHECK([ovs-appctl time/stop])
1150 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1151 for i in 0 1 2 3 4 5 6 7 8 9; do
1154 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1157 ovs-appctl time/warp 1000
1160 # Check for the MAC learning entries.
1161 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1163 3 0 50:54:00:00:00:00
1164 3 0 50:54:00:00:00:01
1165 3 0 50:54:00:00:00:02
1166 3 0 50:54:00:00:00:03
1167 3 0 50:54:00:00:00:04
1168 3 0 50:54:00:00:00:05
1169 3 0 50:54:00:00:00:06
1170 3 0 50:54:00:00:00:07
1171 3 0 50:54:00:00:00:08
1172 3 0 50:54:00:00:00:09
1176 # Trace another ARP packet on another MAC.
1179 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1183 # Check that the new one chased the oldest one out of the table.
1184 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1186 3 0 50:54:00:00:00:01 ?
1187 3 0 50:54:00:00:00:02 ?
1188 3 0 50:54:00:00:00:03 ?
1189 3 0 50:54:00:00:00:04 ?
1190 3 0 50:54:00:00:00:05 ?
1191 3 0 50:54:00:00:00:06 ?
1192 3 0 50:54:00:00:00:07 ?
1193 3 0 50:54:00:00:00:08 ?
1194 3 0 50:54:00:00:00:09 ?
1195 3 0 50:54:00:00:00:10 ?
1201 dnl Test that basic NetFlow reports flow statistics correctly:
1202 dnl - The initial packet of a flow are correctly accounted.
1203 dnl - Later packets within a flow are correctly accounted.
1204 dnl - Flow actions changing (in this case, due to MAC learning)
1205 dnl cause a record to be sent.
1206 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1208 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1209 NETFLOW_PORT=`cat stdout`
1211 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1212 ADD_OF_PORTS([br0], 1, 2)
1214 set Bridge br0 netflow=@nf -- \
1215 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1216 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1218 ON_EXIT([kill `cat test-netflow.pid`])
1219 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])
1220 AT_CAPTURE_FILE([netflow.log])
1222 for delay in 1000 30000; do
1223 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)'
1224 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)'
1226 ovs-appctl time/warp $delay
1231 ovs-appctl -t test-netflow exit
1233 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1235 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1236 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1237 ' netflow.log | sort]], [0],
1239 header: v5, seq 0, engine 2,1
1240 header: v5, seq 1, engine 2,1
1241 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1242 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1243 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1247 dnl Test that basic NetFlow reports active expirations correctly.
1248 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1250 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1251 NETFLOW_PORT=`cat stdout`
1253 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1254 ADD_OF_PORTS([br0], 1, 2)
1256 set Bridge br0 netflow=@nf -- \
1257 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1258 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1260 ON_EXIT([kill `cat test-netflow.pid`])
1261 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
1263 AT_CHECK([ovs-appctl time/stop])
1265 while test $n -le 60; do
1268 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)'
1269 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)'
1271 ovs-appctl time/warp 1000
1274 ovs-appctl time/warp 10000
1278 ovs-appctl -t test-netflow exit
1280 # Count the number of reported packets:
1281 # - From source to destination before MAC learning kicks in (just one).
1282 # - From source to destination after that.
1283 # - From destination to source.
1291 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1298 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1301 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1304 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1311 eval $counter=\`expr \$$counter + \$pkts\`
1312 n_recs=`expr $n_recs + 1`
1315 # There should be exactly 1 MAC learning packet,
1316 # exactly 59 other packets in that direction,
1317 # and exactly 60 packets in the other direction.
1318 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1321 # There should be 1 expiration for MAC learning,
1322 # at least 5 active and a final expiration in one direction,
1323 # and at least 5 active and a final expiration in the other direction.
1325 AT_CHECK([test $n_recs -ge 13])
1329 AT_SETUP([idle_age and hard_age increase over time])
1332 # get_ages DURATION HARD IDLE
1334 # Fetch the flow duration, hard age, and idle age into the variables
1335 # whose names are given as arguments. Rounds DURATION down to the
1336 # nearest integer. If hard_age doesn't appear in the output, sets
1337 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1340 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1342 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1343 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1344 AS_VAR_COPY([$1], [duration])
1346 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1347 if test X"$hard" = X; then
1350 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1352 AS_VAR_COPY([$2], [hard])
1354 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1355 if test X"$idle" = X; then
1358 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1360 AS_VAR_COPY([$3], [idle])
1363 # Add a flow and get its initial hard and idle age.
1364 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1365 get_ages duration1 hard1 idle1
1367 # Warp time forward by 10 seconds, then modify the flow's actions.
1368 ovs-appctl time/warp 10000
1369 get_ages duration2 hard2 idle2
1370 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1372 # Warp time forward by 10 seconds.
1373 ovs-appctl time/warp 10000
1374 get_ages duration3 hard3 idle3
1376 # Warp time forward 10 more seconds, then pass some packets through the flow,
1377 # then warp forward a few more times because idle times are only updated
1379 ovs-appctl time/warp 10000
1380 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)'
1381 ovs-appctl time/warp 1000
1382 ovs-appctl time/warp 1000
1383 ovs-appctl time/warp 1000
1384 get_ages duration4 hard4 idle4
1386 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1387 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1388 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1390 # Duration should increase steadily over time.
1391 AT_CHECK([test $duration1 -lt $duration2])
1392 AT_CHECK([test $duration2 -lt $duration3])
1393 AT_CHECK([test $duration3 -lt $duration4])
1395 # Hard age should be "none" initially because it's the same as flow_duration,
1396 # then it should increase.
1397 AT_CHECK([test $hard1 = none])
1398 AT_CHECK([test $hard2 = none])
1399 AT_CHECK([test $hard3 != none])
1400 AT_CHECK([test $hard4 != none])
1401 AT_CHECK([test $hard3 -lt $hard4])
1403 # Idle age should increase from 1 to 2 to 3, then decrease.
1404 AT_CHECK([test $idle1 -lt $idle2])
1405 AT_CHECK([test $idle2 -lt $idle3])
1406 AT_CHECK([test $idle3 -gt $idle4])
1408 # Check some invariant relationships.
1409 AT_CHECK([test $duration1 = $idle1])
1410 AT_CHECK([test $duration2 = $idle2])
1411 AT_CHECK([test $duration3 = $idle3])
1412 AT_CHECK([test $idle3 -gt $hard3])
1413 AT_CHECK([test $idle4 -lt $hard4])
1414 AT_CHECK([test $hard4 -lt $duration4])
1419 AT_SETUP([ofproto-dpif - fin_timeout])
1421 AT_DATA([flows.txt], [dnl
1422 in_port=1 actions=output:2
1423 in_port=2 actions=mod_vlan_vid:17,output:1
1425 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1426 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1428 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1430 # Check that a TCP SYN packet does not change the timeout. (Because
1431 # flow stats updates are mainly what implements the fin_timeout
1432 # feature, we warp forward a couple of times to ensure that flow stats
1433 # run before re-checking the flow table.)
1434 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1436 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1439 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1441 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1443 # Check that a TCP FIN packet does change the timeout.
1444 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1446 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1449 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1451 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1456 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1457 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1458 ADD_OF_PORTS([br0], [1], [2])
1459 ADD_OF_PORTS([br1], [3])
1461 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1468 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1469 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1470 ADD_OF_PORTS([br0], [1], [2])
1471 ADD_OF_PORTS([br1], [3])
1473 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1474 br0 (dummy@ovs-dummy):
1475 lookups: hit:0 missed:0
1477 br0 65534/100: (dummy)
1480 br1 (dummy@ovs-dummy):
1481 lookups: hit:0 missed:0
1483 br1 65534/101: (dummy)
1487 AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
1488 br0 (dummy@ovs-dummy):
1489 lookups: hit:0 missed:0
1491 br0 65534/100: (dummy)
1498 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1499 OVS_VSWITCHD_START([add-br br1 -- \
1500 set bridge br1 datapath-type=dummy fail-mode=secure])
1501 ADD_OF_PORTS([br0], [1], [2])
1502 ADD_OF_PORTS([br1], [3])
1504 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
1506 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
1508 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
1511 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1512 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))
1513 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))
1516 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1517 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))
1523 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1524 OVS_VSWITCHD_START([add-br br1 -- \
1525 set bridge br1 datapath-type=dummy fail-mode=secure])
1526 ADD_OF_PORTS([br0], [1], [2])
1527 ADD_OF_PORTS([br1], [3])
1529 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
1531 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
1533 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
1536 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1537 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))
1538 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))
1541 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1542 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))
1545 AT_CHECK([ovs-appctl dpif/del-flows br0])
1546 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1549 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1550 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))
1556 AT_SETUP([ofproto-dpif - patch ports])
1557 OVS_VSWITCHD_START([add-br br1 \
1558 -- set bridge br1 datapath-type=dummy fail-mode=secure \
1559 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
1560 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
1562 ADD_OF_PORTS([br0], [2])
1563 ADD_OF_PORTS([br1], [3])
1565 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1566 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1568 for i in $(seq 1 10); do
1569 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)'
1572 for i in $(seq 1 5); do
1573 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)'
1576 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1580 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1581 br0 (dummy@ovs-dummy):
1582 lookups: hit:9 missed:1
1584 br0 65534/100: (dummy)
1586 pbr0 1/none: (patch: peer=pbr1)
1587 br1 (dummy@ovs-dummy):
1588 lookups: hit:4 missed:1
1590 br1 65534/101: (dummy)
1592 pbr1 1/none: (patch: peer=pbr0)
1595 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1596 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
1598 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1599 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
1602 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1603 OFPST_PORT reply (xid=0x4): 1 ports
1604 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
1605 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
1608 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
1609 OFPST_PORT reply (xid=0x4): 1 ports
1610 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
1611 tx pkts=5, bytes=300, drop=0, errs=0, coll=0