1 AT_BANNER([ofproto-dpif])
3 AT_SETUP([ofproto-dpif - resubmit])
5 AT_DATA([flows.txt], [dnl
6 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
7 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
8 table=0 in_port=3 priority=2000 icmp actions=output(20)
9 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
10 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
11 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
13 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
14 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])
15 AT_CHECK([tail -1 stdout], [0],
16 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
21 AT_SETUP([ofproto-dpif - registers])
23 AT_DATA([flows.txt], [dnl
24 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
25 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
26 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
27 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
29 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
30 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
31 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
32 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
33 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
34 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
35 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
36 in_port=9,reg0=0xdeadbeef actions=output:20
37 in_port=10,reg1=0xdeadbeef actions=output:21
38 in_port=11,reg2=0xeef22dea actions=output:22
40 dnl Sanilty check all registers
41 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
42 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
43 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
44 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
46 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
47 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])
48 AT_CHECK([tail -1 stdout], [0],
49 [Datapath actions: 20,21,22,33
54 AT_SETUP([ofproto-dpif - output])
56 AT_DATA([flows.txt], [dnl
57 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
58 in_port=2 actions=output:9
59 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
60 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
61 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
62 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
63 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
65 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
66 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])
67 AT_CHECK([tail -1 stdout], [0],
68 [Datapath actions: 9,55,10,55,66,11,77,88
73 AT_SETUP([ofproto-dpif - dec_ttl])
75 AT_DATA([flows.txt], [dnl
76 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
77 table=1 in_port=1 action=dec_ttl,output:3
79 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
80 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])
81 AT_CHECK([tail -2 stdout], [0],
82 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
83 This flow is not cachable.
85 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])
86 AT_CHECK([tail -1 stdout], [0],
87 [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
89 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])
90 AT_CHECK([tail -1 stdout], [0],
91 [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
94 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --pidfile 2> ofctl_monitor.log])
95 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])
96 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
97 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
98 NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 tun_id=0x0 reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via invalid_ttl) data_len=42 (unbuffered)
99 priority:0,tunnel:0,in_port:0000,tci(0) mac(50:54:00:00:00:05->50:54:00:00:00:07) type:0800 proto:1 tos:0 ttl:1 ip(192.168.0.1->192.168.0.2)
105 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
107 [add-port br0 p1 -- set Interface p1 type=dummy --\
108 add-port br0 p2 -- set Interface p2 type=dummy])
110 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
112 # "in_port" defaults to OFPP_NONE if it's not specified.
113 flow="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)"
114 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
115 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
118 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
120 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
125 AT_SETUP([ofproto-dpif - DSCP])
126 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
127 AT_DATA([flows.txt], [dnl
128 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
130 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
131 AT_CHECK([ovs-vsctl -- \
132 set Port p1 qos=@newqos --\
133 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
134 --id=@q1 create Queue dscp=1 --\
135 --id=@q2 create Queue dscp=2], [0], [ignore])
136 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])
137 AT_CHECK([tail -1 stdout], [0],
138 [Datapath actions: dnl
140 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(priority(1)),1,dnl
141 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xb,ttl=128,frag=no)),set(priority(2)),1,dnl
143 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x7,ttl=128,frag=no)),set(priority(1)),1,dnl
144 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no)),set(priority(0)),1,dnl
145 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
151 AT_SETUP([ofproto-dpif - output/flood flags])
152 OVS_VSWITCHD_START([dnl
153 add-port br0 p1 -- set Interface p1 type=dummy --\
154 add-port br0 p2 -- set Interface p2 type=dummy --\
155 add-port br0 p3 -- set Interface p3 type=dummy --\
156 add-port br0 p4 -- set Interface p4 type=dummy --\
157 add-port br0 p5 -- set Interface p5 type=dummy --\
158 add-port br0 p6 -- set Interface p6 type=dummy --\
159 add-port br0 p7 -- set Interface p7 type=dummy ])
161 AT_DATA([flows.txt], [dnl
162 in_port=local actions=local,flood
163 in_port=1 actions=flood
164 in_port=2 actions=all
165 in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
166 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
168 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
169 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
170 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
172 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(0),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
173 AT_CHECK([tail -1 stdout \
174 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
182 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])
183 AT_CHECK([tail -1 stdout \
184 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
192 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])
193 AT_CHECK([tail -1 stdout \
194 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
203 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])
204 AT_CHECK([tail -1 stdout], [0],
205 [Datapath actions: 0,1,2,4,6,7
208 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])
209 AT_CHECK([tail -1 stdout], [0],
210 [Datapath actions: set(priority(1)),0,1,2,set(priority(2)),3,set(priority(1)),6,7
215 AT_SETUP([ofproto-dpif - set_tunnel])
217 AT_DATA([flows.txt], [dnl
218 in_port=90 actions=resubmit:1,resubmit:2,resubmit:3,resubmit:4,resubmit:5
219 in_port=1 actions=set_tunnel:1,output:1
220 in_port=2 actions=set_tunnel:1,output:2
221 in_port=3 actions=set_tunnel:2,set_tunnel:3,output:3
222 in_port=4 actions=set_tunnel:4,set_tunnel:3,output:4
223 in_port=5 actions=set_tunnel:5
225 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
226 AT_CHECK([ovs-appctl ofproto/trace br0 'tun_id(0x1),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])
227 AT_CHECK([tail -1 stdout], [0],
228 [Datapath actions: set(tun_id(0x1)),1,2,set(tun_id(0x3)),3,4
233 AT_SETUP([ofproto-dpif - controller])
234 OVS_VSWITCHD_START([dnl
235 add-port br0 p1 -- set Interface p1 type=dummy
238 AT_CAPTURE_FILE([ofctl_monitor.log])
239 AT_DATA([flows.txt], [dnl
240 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
241 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
242 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
244 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
245 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)
246 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)
247 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
248 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)
249 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
250 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
252 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
255 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --pidfile 2> ofctl_monitor.log])
258 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)'
261 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
262 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
263 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
264 priority:0,tunnel:0,in_port:0000,tci(0) mac(50:54:00:00:00:05->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->9) tcp_csum:0
266 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
267 priority:0,tunnel:0,in_port:0000,tci(0) mac(50:54:00:00:00:05->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->9) tcp_csum:0
269 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
270 priority:0,tunnel:0,in_port:0000,tci(0) mac(50:54:00:00:00:05->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->9) tcp_csum:0
273 dnl Singleton controller action.
274 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --pidfile 2> ofctl_monitor.log])
277 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)'
280 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
281 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
282 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
283 priority:0,tunnel:0,in_port:0000,tci(0) mac(10:11:11:11:11:11->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
285 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
286 priority:0,tunnel:0,in_port:0000,tci(0) mac(10:11:11:11:11:11->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
288 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
289 priority:0,tunnel:0,in_port:0000,tci(0) mac(10:11:11:11:11:11->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
292 dnl Modified controller action.
293 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --pidfile 2> ofctl_monitor.log])
296 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)'
299 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
300 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
301 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
302 priority:0,tunnel:0,in_port:0000,tci(vlan:15,pcp:0) mac(30:33:33:33:33:33->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
304 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
305 priority:0,tunnel:0,in_port:0000,tci(vlan:15,pcp:0) mac(30:33:33:33:33:33->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
307 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
308 priority:0,tunnel:0,in_port:0000,tci(vlan:15,pcp:0) mac(30:33:33:33:33:33->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->10) tcp_csum:0
312 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
315 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)'
318 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
319 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
320 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 tun_id=0x0 reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=60 (unbuffered)
321 priority:0,tunnel:0,in_port:0000,tci(0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0
323 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 tun_id=0x0 reg0=0x1 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
324 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0
326 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 tun_id=0x0 reg0=0x1 reg1=0x2 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
327 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0
329 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 tun_id=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
330 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0
332 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 tun_id=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
333 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->192.168.0.2) port(8->11) tcp_csum:1a03
335 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 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
336 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(8->11) tcp_csum:3205
338 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 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
339 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->11) tcp_csum:31b8
341 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 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
342 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) tcp_csum:316d
344 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 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
345 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) tcp_csum:316d
349 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --pidfile 2> ofctl_monitor.log])
352 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'
355 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
356 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
357 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 tun_id=0x0 reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=60 (unbuffered)
358 priority:0,tunnel:0,in_port:0000,tci(0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234
360 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 tun_id=0x0 reg0=0x1 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
361 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234
363 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 tun_id=0x0 reg0=0x1 reg1=0x2 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
364 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->50:54:00:00:00:07) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234
366 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 tun_id=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
367 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234
369 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 tun_id=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
370 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->192.168.0.2) port(8->11) udp_csum:2c37
372 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 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
373 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(8->11) udp_csum:4439
375 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 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
376 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->11) udp_csum:43ec
378 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 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
379 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) udp_csum:43a1
381 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 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered)
382 priority:0,tunnel:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) udp_csum:43a1
385 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
386 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
387 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
388 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)
389 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)
390 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)
391 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)
392 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)
393 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
394 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
395 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
402 AT_SETUP([ofproto-dpif - VLAN handling])
404 [set Bridge br0 fail-mode=standalone -- \
405 add-port br0 p1 trunks=10,12 -- \
406 add-port br0 p2 tag=10 -- \
407 add-port br0 p3 tag=12 \
408 other-config:priority-tags=true -- \
409 add-port br0 p4 tag=12 -- \
410 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
411 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
412 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
413 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
414 other-config:priority-tags=true -- \
415 set Interface p1 type=dummy -- \
416 set Interface p2 type=dummy -- \
417 set Interface p3 type=dummy -- \
418 set Interface p4 type=dummy -- \
419 set Interface p5 type=dummy -- \
420 set Interface p6 type=dummy -- \
421 set Interface p7 type=dummy -- \
422 set Interface p8 type=dummy --])
424 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
425 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
431 "0 10 0 1,5,6,7,8,pop_vlan,2" \
432 "0 10 1 1,5,6,7,8,pop_vlan,2" \
435 "0 12 0 1,5,6,pop_vlan,3,4,7,8" \
436 "0 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
440 "1 10 0 0,5,6,7,8,pop_vlan,2" \
441 "1 10 1 0,5,6,7,8,pop_vlan,2" \
444 "1 12 0 0,5,6,pop_vlan,3,4,7,8" \
445 "1 12 1 0,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
446 "2 none 0 push_vlan(vid=10,pcp=0),0,1,5,6,7,8" \
447 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),0,1,5,6,7,8" \
448 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),0,1,5,6,7,8" \
455 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
456 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
457 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),0,1,5,6" \
464 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
465 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
466 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),0,1,5,6" \
473 "5 none 0 2,push_vlan(vid=10,pcp=0),0,1,6,7,8" \
474 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),0,1,6,7,8" \
475 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),0,1,6,7,8" \
476 "5 10 0 0,1,6,7,8,pop_vlan,2" \
477 "5 10 1 0,1,6,7,8,pop_vlan,2" \
480 "5 12 0 0,1,6,pop_vlan,3,4,7,8" \
481 "5 12 1 0,1,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
482 "6 none 0 2,push_vlan(vid=10,pcp=0),0,1,5,7,8" \
483 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),0,1,5,7,8" \
484 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),0,1,5,7,8" \
485 "6 10 0 0,1,5,7,8,pop_vlan,2" \
486 "6 10 1 0,1,5,7,8,pop_vlan,2" \
489 "6 12 0 0,1,5,pop_vlan,3,4,7,8" \
490 "6 12 1 0,1,5,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
491 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
492 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),0,1,5,6" \
493 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),0,1,5,6" \
494 "7 10 0 0,1,5,6,8,pop_vlan,2" \
495 "7 10 1 0,1,5,6,8,pop_vlan,2" \
498 "7 12 0 0,1,5,6,pop_vlan,3,4,8" \
499 "7 12 1 0,1,5,6,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
500 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),0,1,5,6" \
501 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),0,1,5,6" \
502 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),0,1,5,6" \
503 "8 10 0 0,1,5,6,7,pop_vlan,2" \
504 "8 10 1 0,1,5,6,7,pop_vlan,2" \
507 "8 12 0 0,1,5,6,pop_vlan,3,4,7" \
508 "8 12 1 0,1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
516 if test $vlan = none; then
517 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
519 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))"
522 echo "----------------------------------------------------------------------"
523 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
525 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
526 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
528 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
530 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
536 AT_SETUP([ofproto-dpif - fragment handling])
538 AT_DATA([flows.txt], [dnl
539 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
540 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
541 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
542 priority=50 tcp ip_frag=no actions=output:4
543 priority=50 tcp ip_frag=first actions=output:5
544 priority=50 tcp ip_frag=later actions=output:6
546 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
548 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"
549 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
550 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
551 later_flow="$base_flow,frag=later)"
553 # mode no first later
565 AT_CHECK([ovs-ofctl set-frags br0 $mode])
566 for type in no first later; do
567 eval flow=\$${type}_flow exp_output=\$$type
568 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
569 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
576 AT_SETUP([ofproto-dpif - exit])
578 AT_DATA([flows.txt], [dnl
579 in_port=1 actions=output:10,exit,output:11
580 in_port=2 actions=output:12,resubmit:1,output:12
581 in_port=3 actions=output:13,resubmit:2,output:14
583 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
584 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])
585 AT_CHECK([tail -1 stdout], [0],
586 [Datapath actions: 10
588 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])
589 AT_CHECK([tail -1 stdout], [0],
590 [Datapath actions: 12,10
592 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])
593 AT_CHECK([tail -1 stdout], [0],
594 [Datapath actions: 13,12,10
600 AT_SETUP([ofproto-dpif - mirroring, select_all])
602 [add-port br0 p1 -- set Interface p1 type=dummy --\
603 add-port br0 p2 -- set Interface p2 type=dummy --\
604 add-port br0 p3 -- set Interface p3 type=dummy --\
605 set Bridge br0 mirrors=@m --\
606 --id=@p3 get Port p3 --\
607 --id=@m create Mirror name=mymirror \
608 select_all=true output_port=@p3], [<0>
611 AT_DATA([flows.txt], [dnl
612 in_port=1 actions=output:2
613 in_port=2 actions=output:1
615 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
617 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)"
618 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
619 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
620 [Datapath actions: 2,3
623 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)"
624 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
625 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
626 [Datapath actions: 1,3
633 AT_SETUP([ofproto-dpif - mirroring, select_src])
635 [add-port br0 p1 -- set Interface p1 type=dummy --\
636 add-port br0 p2 -- set Interface p2 type=dummy --\
637 add-port br0 p3 -- set Interface p3 type=dummy --\
638 set Bridge br0 mirrors=@m --\
639 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
640 --id=@m create Mirror name=mymirror \
641 select_src_port=@p1 output_port=@p3], [<0>
644 AT_DATA([flows.txt], [dnl
645 in_port=1 actions=output:2
646 in_port=2 actions=output:1
648 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
650 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)"
651 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
652 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
653 [Datapath actions: 2,3
656 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)"
657 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
658 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
664 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
666 [add-port br0 p1 -- set Interface p1 type=dummy --\
667 add-port br0 p2 -- set Interface p2 type=dummy --\
668 set Bridge br0 mirrors=@m --\
669 --id=@p2 get Port p2 --\
670 --id=@m create Mirror name=mymirror \
671 select_all=true output_port=@p2], [<0>
674 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
676 # "in_port" defaults to OFPP_NONE if it's not specified.
677 flow="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)"
678 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
679 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
680 [Datapath actions: 1,2
687 AT_SETUP([ofproto-dpif - mirroring, select_dst])
689 [add-port br0 p1 -- set Interface p1 type=dummy --\
690 add-port br0 p2 -- set Interface p2 type=dummy --\
691 add-port br0 p3 -- set Interface p3 type=dummy --\
692 set Bridge br0 mirrors=@m --\
693 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
694 --id=@m create Mirror name=mymirror \
695 select_dst_port=@p2 output_port=@p3], [<0>
698 AT_DATA([flows.txt], [dnl
699 in_port=1 actions=output:2
700 in_port=2 actions=output:1
702 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
704 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)"
705 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
706 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
707 [Datapath actions: 2,3
710 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)"
711 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
712 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
720 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
722 [add-port br0 p1 -- set Interface p1 type=dummy --\
723 add-port br0 p2 -- set Interface p2 type=dummy --\
724 add-port br0 p3 -- set Interface p3 type=dummy --\
725 set Bridge br0 mirrors=@m --\
726 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
727 --id=@m create Mirror name=mymirror \
728 select_all=true select_vlan=11 output_port=@p3], [<0>
731 AT_DATA([flows.txt], [dnl
732 in_port=1, actions=output:2
734 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
736 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)"
737 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
738 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
742 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))"
743 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
744 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
748 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))"
749 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
750 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
751 [Datapath actions: 2,3
758 AT_SETUP([ofproto-dpif - mirroring, output_port])
760 [add-port br0 p1 -- set Interface p1 type=dummy --\
761 add-port br0 p2 -- set Interface p2 type=dummy --\
762 add-port br0 p3 -- set Interface p3 type=dummy --\
763 set Bridge br0 mirrors=@m --\
764 --id=@p3 get Port p3 --\
765 --id=@m create Mirror name=mymirror \
766 select_all=true output_port=@p3], [<0>
769 AT_DATA([flows.txt], [dnl
770 in_port=1 actions=mod_vlan_vid:17,output:2
771 in_port=2 actions=output:1
773 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
775 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)"
776 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
777 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
778 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
781 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)"
782 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
783 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
784 [Datapath actions: 1,3
790 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
792 [add-port br0 p1 -- set Interface p1 type=dummy --\
793 add-port br0 p2 -- set Interface p2 type=dummy --\
794 set Bridge br0 mirrors=@m --\
795 --id=@m create Mirror name=mymirror \
796 select_all=true output_vlan=12], [<0>
799 AT_DATA([flows.txt], [dnl
800 in_port=1 actions=output:2
801 in_port=2 actions=mod_vlan_vid:17,output:1
803 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
805 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)"
806 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
807 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
809 expected="2,push_vlan(vid=12,pcp=0),0,1,2"
810 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
812 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
814 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)"
815 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
816 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
818 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),0,1,2"
819 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
821 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
826 m4_define([OFPROTO_TRACE],
828 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
829 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
831 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
834 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
837 AT_SETUP([ofproto-dpif - MAC learning])
839 [set bridge br0 fail-mode=standalone -- \
840 add-port br0 p1 -- set Interface p1 type=dummy -- \
841 add-port br0 p2 -- set Interface p2 type=dummy -- \
842 add-port br0 p3 -- set Interface p3 type=dummy])
844 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)'
846 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
849 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
853 # Check for the MAC learning entry.
854 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
856 3 0 50:54:00:00:00:05 ?
859 # Trace a packet arrival destined for the learned MAC.
860 # (This will also learn a MAC.)
863 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
867 # Check for both MAC learning entries.
868 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
870 3 0 50:54:00:00:00:05 ?
871 1 0 50:54:00:00:00:06 ?
874 # Trace a packet arrival that updates the first learned MAC entry.
877 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
881 # Check that the MAC learning entry was updated.
882 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
884 1 0 50:54:00:00:00:06 ?
885 2 0 50:54:00:00:00:05 ?
888 # Add another bridge.
892 -- set bridge br1 datapath-type=dummy \
893 -- add-port br1 p4 -- set interface p4 type=dummy \
894 -- add-port br1 p5 -- set interface p5 type=dummy])
896 # Trace some packet arrivals in br1 to create MAC learning entries there too.
899 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
904 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
908 # Check that the MAC learning entries were added.
909 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
911 4 0 50:54:00:00:00:06 ?
912 5 0 50:54:00:00:00:07 ?
915 # Delete port p1 and see that its MAC learning entry disappeared, and
916 # that the MAC learning entry for the same MAC was also deleted from br1.
917 AT_CHECK([ovs-vsctl del-port p1])
918 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
920 2 0 50:54:00:00:00:05 ?
922 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
924 5 0 50:54:00:00:00:07 ?
930 dnl Test that basic NetFlow reports flow statistics correctly:
931 dnl - The initial packet of a flow are correctly accounted.
932 dnl - Later packets within a flow are correctly accounted.
933 dnl - Flow actions changing (in this case, due to MAC learning)
934 dnl cause a record to be sent.
935 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
937 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
938 NETFLOW_PORT=`cat stdout`
941 [set Bridge br0 fail-mode=standalone -- \
942 add-port br0 p1 -- set Interface p1 type=dummy -- \
943 add-port br0 p2 -- set Interface p2 type=dummy -- \
944 set Bridge br0 netflow=@nf -- \
945 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
946 engine_id=1 engine_type=2 active_timeout=30 \
947 add-id-to-interface=false], [<0>
950 AT_CHECK([test-netflow --detach --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
952 for delay in 1000 30000; do
953 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)'
954 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)'
956 ovs-appctl time/warp $delay
960 ovs-appctl -t test-netflow exit
962 AT_CHECK([[sed -e 's/, uptime [0-9]*//
964 s/time \([0-9]*\)\.\.\.\1\b/time <moment>/
965 s/time [0-9]*\.\.\.[0-9]*/time <range>/
966 ' netflow.log]], [0],
967 [header: v5, seq 0, engine 2,1
968 rec: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
970 header: v5, seq 1, engine 2,1
971 rec: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
972 rec: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
976 dnl Test that basic NetFlow reports active expirations correctly.
977 AT_SETUP([ofproto-dpif - NetFlow active expiration])
979 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
980 NETFLOW_PORT=`cat stdout`
983 [set Bridge br0 fail-mode=standalone -- \
984 add-port br0 p1 -- set Interface p1 type=dummy -- \
985 add-port br0 p2 -- set Interface p2 type=dummy -- \
986 set Bridge br0 netflow=@nf -- \
987 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
988 engine_id=1 engine_type=2 active_timeout=10 \
989 add-id-to-interface=false], [<0>
992 AT_CHECK([test-netflow --detach --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
994 AT_CHECK([ovs-appctl time/stop])
996 while test $n -le 60; do
999 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)'
1000 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)'
1002 ovs-appctl time/warp 1000
1005 ovs-appctl time/warp 10000
1008 ovs-appctl -t test-netflow exit
1010 # Count the number of reported packets:
1011 # - From source to destination before MAC learning kicks in (just one).
1012 # - From source to destination after that.
1013 # - From destination to source.
1021 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1028 "rec: 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1031 "rec: 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1034 "rec: 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1041 eval $counter=\`expr \$$counter + \$pkts\`
1042 n_recs=`expr $n_recs + 1`
1045 # There should be exactly 1 MAC learning packet,
1046 # exactly 59 other packets in that direction,
1047 # and exactly 60 packets in the other direction.
1048 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1051 # There should be 1 expiration for MAC learning,
1052 # at least 5 active and a final expiration in one direction,
1053 # and at least 5 active and a final expiration in the other direction.
1055 AT_CHECK([test $n_recs -ge 13])
1059 AT_SETUP([idle_age and hard_age increase over time])
1062 # get_ages DURATION HARD IDLE
1064 # Fetch the flow duration, hard age, and idle age into the variables
1065 # whose names are given as arguments. Rounds DURATION down to the
1066 # nearest integer. If hard_age doesn't appear in the output, sets
1067 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1070 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1072 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1073 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1074 AS_VAR_COPY([$1], [duration])
1076 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1077 if test X"$hard" = X; then
1080 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1082 AS_VAR_COPY([$2], [hard])
1084 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1085 if test X"$idle" = X; then
1088 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1090 AS_VAR_COPY([$3], [idle])
1093 # Add a flow and get its initial hard and idle age.
1094 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1095 get_ages duration1 hard1 idle1
1097 # Warp time forward by 10 seconds, then modify the flow's actions.
1098 ovs-appctl time/warp 10000
1099 get_ages duration2 hard2 idle2
1100 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1102 # Warp time forward by 10 seconds.
1103 ovs-appctl time/warp 10000
1104 get_ages duration3 hard3 idle3
1106 # Warp time forward 10 more seconds, then pass some packets through the flow,
1107 # then warp forward a few more times because idle times are only updated
1109 ovs-appctl time/warp 10000
1110 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)'
1111 ovs-appctl time/warp 1000
1112 ovs-appctl time/warp 1000
1113 ovs-appctl time/warp 1000
1114 get_ages duration4 hard4 idle4
1116 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1117 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1118 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1120 # Duration should increase steadily over time.
1121 AT_CHECK([test $duration1 -lt $duration2])
1122 AT_CHECK([test $duration2 -lt $duration3])
1123 AT_CHECK([test $duration3 -lt $duration4])
1125 # Hard age should be "none" initially because it's the same as flow_duration,
1126 # then it should increase.
1127 AT_CHECK([test $hard1 = none])
1128 AT_CHECK([test $hard2 = none])
1129 AT_CHECK([test $hard3 != none])
1130 AT_CHECK([test $hard4 != none])
1131 AT_CHECK([test $hard3 -lt $hard4])
1133 # Idle age should increase from 1 to 2 to 3, then decrease.
1134 AT_CHECK([test $idle1 -lt $idle2])
1135 AT_CHECK([test $idle2 -lt $idle3])
1136 AT_CHECK([test $idle3 -gt $idle4])
1138 # Check some invariant relationships.
1139 AT_CHECK([test $duration1 = $idle1])
1140 AT_CHECK([test $duration2 = $idle2])
1141 AT_CHECK([test $duration3 = $idle3])
1142 AT_CHECK([test $idle3 -gt $hard3])
1143 AT_CHECK([test $idle4 -lt $hard4])
1144 AT_CHECK([test $hard4 -lt $duration4])
1149 AT_SETUP([ofproto-dpif - fin_timeout])
1151 AT_DATA([flows.txt], [dnl
1152 in_port=1 actions=output:2
1153 in_port=2 actions=mod_vlan_vid:17,output:1
1155 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1156 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1158 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1160 # Check that a TCP SYN packet does not change the timeout. (Because
1161 # flow stats updates are mainly what implements the fin_timeout
1162 # feature, we warp forward a couple of times to ensure that flow stats
1163 # run before re-checking the flow table.)
1164 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1166 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1169 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1171 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1173 # Check that a TCP FIN packet does change the timeout.
1174 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1176 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1179 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1181 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)