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 - registers])
25 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
26 AT_DATA([flows.txt], [dnl
27 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
28 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
29 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
30 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
32 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
33 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
34 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
35 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
36 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
37 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
38 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
39 in_port=9,reg0=0xdeadbeef actions=output:20
40 in_port=10,reg1=0xdeadbeef actions=output:21
41 in_port=11,reg2=0xeef22dea actions=output:22
43 dnl Sanilty check all registers
44 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
45 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
46 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
47 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
50 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
51 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])
52 AT_CHECK([tail -1 stdout], [0],
53 [Datapath actions: 20,21,22,33
58 AT_SETUP([ofproto-dpif - push-pop])
60 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
61 AT_DATA([flows.txt], [dnl
62 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
63 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
64 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
65 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
66 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
69 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
70 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])
71 AT_CHECK([tail -1 stdout], [0],
72 [Datapath actions: 33,22,21,20
77 AT_SETUP([ofproto-dpif - output])
79 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
80 AT_DATA([flows.txt], [dnl
81 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
82 in_port=2 actions=output:9
83 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
84 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
85 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
86 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
87 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
89 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
90 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])
91 AT_CHECK([tail -1 stdout], [0],
92 [Datapath actions: 9,55,10,55,66,11,77,88
97 AT_SETUP([ofproto-dpif - dec_ttl])
99 ADD_OF_PORTS([br0], [1], [2], [3], [4])
100 AT_DATA([flows.txt], [dnl
101 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
102 table=1 in_port=1 action=dec_ttl,output:3
104 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
105 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])
106 AT_CHECK([tail -3 stdout], [0],
107 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
108 This flow is handled by the userspace slow path because it:
109 - Sends "packet-in" messages to the OpenFlow controller.
111 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])
112 AT_CHECK([tail -1 stdout], [0],
113 [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
115 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])
116 AT_CHECK([tail -1 stdout], [0],
117 [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
120 AT_CAPTURE_FILE([ofctl_monitor.log])
121 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
122 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])
123 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
124 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
125 NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
126 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
132 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
134 ADD_OF_PORTS([br0], [1], [2])
136 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
138 # "in_port" defaults to OFPP_NONE if it's not specified.
139 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"
140 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
141 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
150 AT_SETUP([ofproto-dpif - DSCP])
151 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
152 ADD_OF_PORTS([br0], [9])
153 AT_DATA([flows.txt], [dnl
154 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
156 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
157 AT_CHECK([ovs-vsctl -- \
158 set Port p1 qos=@newqos --\
159 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
160 --id=@q1 create Queue dscp=1 --\
161 --id=@q2 create Queue dscp=2], [0], [ignore])
162 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])
163 AT_CHECK([tail -1 stdout], [0],
164 [Datapath actions: dnl
166 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
167 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
169 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
170 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
171 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
177 AT_SETUP([ofproto-dpif - output/flood flags])
179 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
181 AT_DATA([flows.txt], [dnl
182 in_port=local actions=local,flood
183 in_port=1 actions=flood
184 in_port=2 actions=all
185 in_port=3 actions=output:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
186 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
188 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
189 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
190 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
192 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])
193 AT_CHECK([tail -1 stdout \
194 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
202 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])
203 AT_CHECK([tail -1 stdout \
204 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
212 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])
213 AT_CHECK([tail -1 stdout \
214 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
223 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])
224 AT_CHECK([tail -1 stdout], [0],
225 [Datapath actions: 100,1,2,4,6,7
228 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])
229 AT_CHECK([tail -1 stdout], [0],
230 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
235 AT_SETUP([ofproto-dpif - controller])
236 OVS_VSWITCHD_START([dnl
237 add-port br0 p1 -- set Interface p1 type=dummy
240 AT_CAPTURE_FILE([ofctl_monitor.log])
241 AT_DATA([flows.txt], [dnl
242 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
243 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
244 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
246 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
247 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)
248 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)
249 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
250 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)
251 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
252 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
253 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
254 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
255 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
256 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
257 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
258 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
259 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
260 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
261 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
262 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
264 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
267 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
270 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)'
273 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
274 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
275 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
276 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
278 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
279 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
281 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
282 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
285 dnl Singleton controller action.
286 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
289 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)'
292 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
293 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
294 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
295 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
297 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
298 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
300 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
301 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
304 dnl Modified controller action.
305 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
308 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)'
311 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
312 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
313 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
314 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
316 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
317 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
319 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
320 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
323 dnl Modified MPLS controller action.
324 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
327 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)'
330 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
331 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
332 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
333 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
335 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
336 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
338 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
339 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
342 dnl Modified MPLS controller action.
343 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
345 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)
348 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)'
351 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
352 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
353 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
354 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
356 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
357 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
359 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
360 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
363 dnl Modified MPLS controller action.
364 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
367 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))'
370 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
371 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
372 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
373 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
375 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
376 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
378 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
379 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
382 dnl Modified MPLS controller action.
383 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
386 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)'
389 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
390 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
391 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392 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
394 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
395 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
397 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
398 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
401 dnl Modified MPLS controller action.
402 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
405 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)'
408 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
409 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
410 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
411 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
413 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
414 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
416 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
417 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
420 dnl Modified MPLS controller action.
421 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
424 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)'
427 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
428 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
429 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
430 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
432 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
433 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
435 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
436 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
439 dnl Modified MPLS controller action.
440 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
443 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)'
446 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
447 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
448 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
449 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
451 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
452 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
454 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
455 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
458 dnl Modified MPLS actions.
459 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
462 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)'
465 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
466 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
467 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
468 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
470 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
471 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
473 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
474 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
477 dnl Modified MPLS ipv6 controller action.
478 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
481 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)'
484 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
485 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
486 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
487 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
489 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
490 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
492 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
493 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
497 dnl Modified MPLS pop action.
498 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
501 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)'
504 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
505 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
506 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
507 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
509 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
510 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
512 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
513 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
517 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
520 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)'
523 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
524 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
525 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
526 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
528 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
529 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
531 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)
532 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
534 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)
535 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
537 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)
538 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
540 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)
541 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
543 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)
544 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
546 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)
547 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
549 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)
550 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
554 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
557 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'
560 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
561 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
562 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
563 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
565 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
566 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
568 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)
569 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
571 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)
572 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
574 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)
575 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
577 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)
578 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
580 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)
581 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
583 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)
584 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
586 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)
587 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
590 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
591 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
592 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
593 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)
594 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)
595 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)
596 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)
597 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)
598 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
599 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
600 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
601 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
602 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
603 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
604 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
605 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
606 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
607 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
608 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
609 cookie=0xd, n_packets=3, n_bytes=180, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
610 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
617 AT_SETUP([ofproto-dpif - VLAN handling])
619 [set Bridge br0 fail-mode=standalone -- \
620 add-port br0 p1 trunks=10,12 -- \
621 add-port br0 p2 tag=10 -- \
622 add-port br0 p3 tag=12 \
623 other-config:priority-tags=true -- \
624 add-port br0 p4 tag=12 -- \
625 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
626 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
627 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
628 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
629 other-config:priority-tags=true -- \
630 set Interface p1 type=dummy -- \
631 set Interface p2 type=dummy -- \
632 set Interface p3 type=dummy -- \
633 set Interface p4 type=dummy -- \
634 set Interface p5 type=dummy -- \
635 set Interface p6 type=dummy -- \
636 set Interface p7 type=dummy -- \
637 set Interface p8 type=dummy --])
639 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
640 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
646 "100 10 0 1,5,6,7,8,pop_vlan,2" \
647 "100 10 1 1,5,6,7,8,pop_vlan,2" \
650 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
651 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
655 "1 10 0 5,6,7,8,100,pop_vlan,2" \
656 "1 10 1 5,6,7,8,100,pop_vlan,2" \
659 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
660 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
661 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
662 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
663 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
670 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
671 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
672 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
679 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
680 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
681 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
688 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
689 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
690 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
691 "5 10 0 1,6,7,8,100,pop_vlan,2" \
692 "5 10 1 1,6,7,8,100,pop_vlan,2" \
695 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
696 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
697 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
698 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
699 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
700 "6 10 0 1,5,7,8,100,pop_vlan,2" \
701 "6 10 1 1,5,7,8,100,pop_vlan,2" \
704 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
705 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
706 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
707 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
708 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
709 "7 10 0 1,5,6,8,100,pop_vlan,2" \
710 "7 10 1 1,5,6,8,100,pop_vlan,2" \
713 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
714 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
715 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
716 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
717 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
718 "8 10 0 1,5,6,7,100,pop_vlan,2" \
719 "8 10 1 1,5,6,7,100,pop_vlan,2" \
722 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
723 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
731 if test $vlan = none; then
732 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
734 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))"
737 echo "----------------------------------------------------------------------"
738 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
740 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
741 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
743 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
745 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
751 AT_SETUP([ofproto-dpif - fragment handling])
753 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
754 AT_DATA([flows.txt], [dnl
755 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
756 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
757 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
758 priority=50 tcp ip_frag=no actions=output:4
759 priority=50 tcp ip_frag=first actions=output:5
760 priority=50 tcp ip_frag=later actions=output:6
762 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
764 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"
765 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
766 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
767 later_flow="$base_flow,frag=later)"
769 # mode no first later
781 AT_CHECK([ovs-ofctl set-frags br0 $mode])
782 for type in no first later; do
783 eval flow=\$${type}_flow exp_output=\$$type
784 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
785 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
792 AT_SETUP([ofproto-dpif - exit])
794 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
795 AT_DATA([flows.txt], [dnl
796 in_port=1 actions=output:10,exit,output:11
797 in_port=2 actions=output:12,resubmit:1,output:12
798 in_port=3 actions=output:13,resubmit:2,output:14
800 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
801 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])
802 AT_CHECK([tail -1 stdout], [0],
803 [Datapath actions: 10
805 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])
806 AT_CHECK([tail -1 stdout], [0],
807 [Datapath actions: 12,10
809 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])
810 AT_CHECK([tail -1 stdout], [0],
811 [Datapath actions: 13,12,10
817 AT_SETUP([ofproto-dpif - mirroring, select_all])
819 ADD_OF_PORTS([br0], 1, 2, 3)
821 set Bridge br0 mirrors=@m --\
822 --id=@p3 get Port p3 --\
823 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
825 AT_DATA([flows.txt], [dnl
826 in_port=1 actions=output:2
827 in_port=2 actions=output:1
829 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
831 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)"
832 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
833 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
834 [Datapath actions: 2,3
837 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)"
838 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
839 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
840 [Datapath actions: 1,3
847 AT_SETUP([ofproto-dpif - mirroring, select_src])
849 ADD_OF_PORTS([br0], 1, 2, 3)
851 set Bridge br0 mirrors=@m --\
852 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
853 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
855 AT_DATA([flows.txt], [dnl
856 in_port=1 actions=output:2
857 in_port=2 actions=output:1
859 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
861 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)"
862 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
863 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
864 [Datapath actions: 2,3
867 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)"
868 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
869 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
875 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
877 ADD_OF_PORTS([br0], 1, 2)
879 set Bridge br0 mirrors=@m --\
880 --id=@p2 get Port p2 --\
881 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
883 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
885 # "in_port" defaults to OFPP_NONE if it's not specified.
886 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"
887 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
888 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
889 [Datapath actions: 1,2
896 AT_SETUP([ofproto-dpif - mirroring, select_dst])
898 ADD_OF_PORTS([br0], 1, 2, 3)
900 set Bridge br0 mirrors=@m --\
901 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
902 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
904 AT_DATA([flows.txt], [dnl
905 in_port=1 actions=output:2
906 in_port=2 actions=output:1
908 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
910 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)"
911 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
912 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
913 [Datapath actions: 2,3
916 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)"
917 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
918 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
926 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
928 ADD_OF_PORTS([br0], 1, 2, 3)
930 set Bridge br0 mirrors=@m --\
931 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
932 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
934 AT_DATA([flows.txt], [dnl
935 in_port=1, actions=output:2
937 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
939 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)"
940 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
941 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
945 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))"
946 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
947 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
951 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))"
952 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
953 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
954 [Datapath actions: 2,3
961 AT_SETUP([ofproto-dpif - mirroring, output_port])
963 ADD_OF_PORTS([br0], 1, 2, 3)
965 set Bridge br0 mirrors=@m --\
966 --id=@p3 get Port p3 --\
967 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
969 AT_DATA([flows.txt], [dnl
970 in_port=1 actions=mod_vlan_vid:17,output:2
971 in_port=2 actions=output:1
973 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
975 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)"
976 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
977 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
978 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
981 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)"
982 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
983 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
984 [Datapath actions: 1,3
990 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
992 ADD_OF_PORTS([br0], 1, 2)
994 set Bridge br0 mirrors=@m --\
995 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
997 AT_DATA([flows.txt], [dnl
998 in_port=1 actions=output:2
999 in_port=2 actions=mod_vlan_vid:17,output:1
1001 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1003 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
1004 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1005 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1007 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1008 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1010 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1012 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)"
1013 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1014 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1016 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1017 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1019 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1024 m4_define([OFPROTO_TRACE],
1026 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1027 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1029 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1032 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1035 AT_SETUP([ofproto-dpif - MAC learning])
1036 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1037 ADD_OF_PORTS([br0], 1, 2, 3)
1039 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)'
1041 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1044 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1048 # Check for the MAC learning entry.
1049 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1051 3 0 50:54:00:00:00:05 ?
1054 # Trace a packet arrival destined for the learned MAC.
1055 # (This will also learn a MAC.)
1058 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1062 # Check for both MAC learning entries.
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 ?
1066 1 0 50:54:00:00:00:06 ?
1069 # Trace a packet arrival that updates the first learned MAC entry.
1072 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1076 # Check that the MAC learning entry was updated.
1077 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1079 1 0 50:54:00:00:00:06 ?
1080 2 0 50:54:00:00:00:05 ?
1083 # Add another bridge.
1087 -- set bridge br1 datapath-type=dummy \
1088 -- add-port br1 p4 -- set interface p4 type=dummy \
1089 -- add-port br1 p5 -- set interface p5 type=dummy])
1091 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1094 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1099 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1103 # Check that the MAC learning entries were added.
1104 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1106 4 0 50:54:00:00:00:06 ?
1107 5 0 50:54:00:00:00:07 ?
1110 # Delete port p1 and see that its MAC learning entry disappeared, and
1111 # that the MAC learning entry for the same MAC was also deleted from br1.
1112 AT_CHECK([ovs-vsctl del-port p1])
1113 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1115 2 0 50:54:00:00:00:05 ?
1117 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1119 5 0 50:54:00:00:00:07 ?
1125 AT_SETUP([ofproto-dpif - MAC table overflow])
1127 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1128 add-port br0 p1 -- set Interface p1 type=dummy -- \
1129 add-port br0 p2 -- set Interface p2 type=dummy -- \
1130 add-port br0 p3 -- set Interface p3 type=dummy])
1132 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)'
1134 AT_CHECK([ovs-appctl time/stop])
1136 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1137 for i in 0 1 2 3 4 5 6 7 8 9; do
1140 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1143 ovs-appctl time/warp 1000
1146 # Check for the MAC learning entries.
1147 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1149 3 0 50:54:00:00:00:00
1150 3 0 50:54:00:00:00:01
1151 3 0 50:54:00:00:00:02
1152 3 0 50:54:00:00:00:03
1153 3 0 50:54:00:00:00:04
1154 3 0 50:54:00:00:00:05
1155 3 0 50:54:00:00:00:06
1156 3 0 50:54:00:00:00:07
1157 3 0 50:54:00:00:00:08
1158 3 0 50:54:00:00:00:09
1162 # Trace another ARP packet on another MAC.
1165 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1169 # Check that the new one chased the oldest one out of the table.
1170 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1172 3 0 50:54:00:00:00:01 ?
1173 3 0 50:54:00:00:00:02 ?
1174 3 0 50:54:00:00:00:03 ?
1175 3 0 50:54:00:00:00:04 ?
1176 3 0 50:54:00:00:00:05 ?
1177 3 0 50:54:00:00:00:06 ?
1178 3 0 50:54:00:00:00:07 ?
1179 3 0 50:54:00:00:00:08 ?
1180 3 0 50:54:00:00:00:09 ?
1181 3 0 50:54:00:00:00:10 ?
1187 dnl Test that basic NetFlow reports flow statistics correctly:
1188 dnl - The initial packet of a flow are correctly accounted.
1189 dnl - Later packets within a flow are correctly accounted.
1190 dnl - Flow actions changing (in this case, due to MAC learning)
1191 dnl cause a record to be sent.
1192 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1194 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1195 NETFLOW_PORT=`cat stdout`
1197 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1198 ADD_OF_PORTS([br0], 1, 2)
1200 set Bridge br0 netflow=@nf -- \
1201 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1202 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1204 ON_EXIT([kill `cat test-netflow.pid`])
1205 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])
1206 AT_CAPTURE_FILE([netflow.log])
1208 for delay in 1000 30000; do
1209 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)'
1210 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)'
1212 ovs-appctl time/warp $delay
1217 ovs-appctl -t test-netflow exit
1219 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1221 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1222 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1223 ' netflow.log | sort]], [0],
1225 header: v5, seq 0, engine 2,1
1226 header: v5, seq 1, engine 2,1
1227 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1228 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1229 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1233 dnl Test that basic NetFlow reports active expirations correctly.
1234 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1236 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1237 NETFLOW_PORT=`cat stdout`
1239 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1240 ADD_OF_PORTS([br0], 1, 2)
1242 set Bridge br0 netflow=@nf -- \
1243 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1244 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1246 ON_EXIT([kill `cat test-netflow.pid`])
1247 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
1249 AT_CHECK([ovs-appctl time/stop])
1251 while test $n -le 60; do
1254 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)'
1255 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)'
1257 ovs-appctl time/warp 1000
1260 ovs-appctl time/warp 10000
1264 ovs-appctl -t test-netflow exit
1266 # Count the number of reported packets:
1267 # - From source to destination before MAC learning kicks in (just one).
1268 # - From source to destination after that.
1269 # - From destination to source.
1277 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1284 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1287 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1290 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1297 eval $counter=\`expr \$$counter + \$pkts\`
1298 n_recs=`expr $n_recs + 1`
1301 # There should be exactly 1 MAC learning packet,
1302 # exactly 59 other packets in that direction,
1303 # and exactly 60 packets in the other direction.
1304 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1307 # There should be 1 expiration for MAC learning,
1308 # at least 5 active and a final expiration in one direction,
1309 # and at least 5 active and a final expiration in the other direction.
1311 AT_CHECK([test $n_recs -ge 13])
1315 AT_SETUP([idle_age and hard_age increase over time])
1318 # get_ages DURATION HARD IDLE
1320 # Fetch the flow duration, hard age, and idle age into the variables
1321 # whose names are given as arguments. Rounds DURATION down to the
1322 # nearest integer. If hard_age doesn't appear in the output, sets
1323 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1326 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1328 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1329 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1330 AS_VAR_COPY([$1], [duration])
1332 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1333 if test X"$hard" = X; then
1336 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1338 AS_VAR_COPY([$2], [hard])
1340 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1341 if test X"$idle" = X; then
1344 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1346 AS_VAR_COPY([$3], [idle])
1349 # Add a flow and get its initial hard and idle age.
1350 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1351 get_ages duration1 hard1 idle1
1353 # Warp time forward by 10 seconds, then modify the flow's actions.
1354 ovs-appctl time/warp 10000
1355 get_ages duration2 hard2 idle2
1356 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1358 # Warp time forward by 10 seconds.
1359 ovs-appctl time/warp 10000
1360 get_ages duration3 hard3 idle3
1362 # Warp time forward 10 more seconds, then pass some packets through the flow,
1363 # then warp forward a few more times because idle times are only updated
1365 ovs-appctl time/warp 10000
1366 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)'
1367 ovs-appctl time/warp 1000
1368 ovs-appctl time/warp 1000
1369 ovs-appctl time/warp 1000
1370 get_ages duration4 hard4 idle4
1372 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1373 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1374 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1376 # Duration should increase steadily over time.
1377 AT_CHECK([test $duration1 -lt $duration2])
1378 AT_CHECK([test $duration2 -lt $duration3])
1379 AT_CHECK([test $duration3 -lt $duration4])
1381 # Hard age should be "none" initially because it's the same as flow_duration,
1382 # then it should increase.
1383 AT_CHECK([test $hard1 = none])
1384 AT_CHECK([test $hard2 = none])
1385 AT_CHECK([test $hard3 != none])
1386 AT_CHECK([test $hard4 != none])
1387 AT_CHECK([test $hard3 -lt $hard4])
1389 # Idle age should increase from 1 to 2 to 3, then decrease.
1390 AT_CHECK([test $idle1 -lt $idle2])
1391 AT_CHECK([test $idle2 -lt $idle3])
1392 AT_CHECK([test $idle3 -gt $idle4])
1394 # Check some invariant relationships.
1395 AT_CHECK([test $duration1 = $idle1])
1396 AT_CHECK([test $duration2 = $idle2])
1397 AT_CHECK([test $duration3 = $idle3])
1398 AT_CHECK([test $idle3 -gt $hard3])
1399 AT_CHECK([test $idle4 -lt $hard4])
1400 AT_CHECK([test $hard4 -lt $duration4])
1405 AT_SETUP([ofproto-dpif - fin_timeout])
1407 AT_DATA([flows.txt], [dnl
1408 in_port=1 actions=output:2
1409 in_port=2 actions=mod_vlan_vid:17,output:1
1411 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1412 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1414 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1416 # Check that a TCP SYN packet does not change the timeout. (Because
1417 # flow stats updates are mainly what implements the fin_timeout
1418 # feature, we warp forward a couple of times to ensure that flow stats
1419 # run before re-checking the flow table.)
1420 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1422 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1425 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1427 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1429 # Check that a TCP FIN packet does change the timeout.
1430 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1432 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1435 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1437 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1442 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1443 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1444 ADD_OF_PORTS([br0], [1], [2])
1445 ADD_OF_PORTS([br1], [3])
1447 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1454 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1455 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1456 ADD_OF_PORTS([br0], [1], [2])
1457 ADD_OF_PORTS([br1], [3])
1459 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1460 br0 (dummy@ovs-dummy):
1461 lookups: hit:0 missed:0 lost:0
1463 br0 65534/100: (dummy)
1466 br1 (dummy@ovs-dummy):
1467 lookups: hit:0 missed:0 lost:0
1469 br1 65534/101: (dummy)
1473 AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
1474 br0 (dummy@ovs-dummy):
1475 lookups: hit:0 missed:0 lost:0
1477 br0 65534/100: (dummy)
1484 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1485 OVS_VSWITCHD_START([add-br br1 -- \
1486 set bridge br1 datapath-type=dummy fail-mode=secure])
1487 ADD_OF_PORTS([br0], [1], [2])
1488 ADD_OF_PORTS([br1], [3])
1490 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
1492 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
1494 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
1497 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1498 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:drop
1499 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:drop
1502 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1503 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:drop
1509 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1510 OVS_VSWITCHD_START([add-br br1 -- \
1511 set bridge br1 datapath-type=dummy fail-mode=secure])
1512 ADD_OF_PORTS([br0], [1], [2])
1513 ADD_OF_PORTS([br1], [3])
1515 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
1517 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
1519 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
1522 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1523 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:drop
1524 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:drop
1527 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1528 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:drop
1531 AT_CHECK([ovs-appctl dpif/del-flows br0])
1532 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1535 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1536 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:drop
1542 AT_SETUP([ofproto-dpif - patch ports])
1543 OVS_VSWITCHD_START([add-br br1 \
1544 -- set bridge br1 datapath-type=dummy fail-mode=secure \
1545 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
1546 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
1548 ADD_OF_PORTS([br0], [2])
1549 ADD_OF_PORTS([br1], [3])
1551 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1552 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1554 for i in $(seq 1 10); do
1555 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)'
1558 for i in $(seq 1 5); do
1559 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)'
1562 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1563 br0 (dummy@ovs-dummy):
1564 lookups: hit:13 missed:2 lost:0
1566 br0 65534/100: (dummy)
1568 pbr0 1/none: (patch: peer=pbr1)
1569 br1 (dummy@ovs-dummy):
1570 lookups: hit:13 missed:2 lost:0
1572 br1 65534/101: (dummy)
1574 pbr1 1/none: (patch: peer=pbr0)
1577 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1578 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
1580 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1581 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
1584 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1585 OFPST_PORT reply (xid=0x4): 1 ports
1586 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
1587 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
1590 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
1591 OFPST_PORT reply (xid=0x4): 1 ports
1592 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
1593 tx pkts=5, bytes=300, drop=0, errs=0, coll=0