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
49 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50 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])
51 AT_CHECK([tail -1 stdout], [0],
52 [Datapath actions: 20,21,22,33
57 AT_SETUP([ofproto-dpif - output])
59 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
60 AT_DATA([flows.txt], [dnl
61 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7
62 in_port=2 actions=output:9
63 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
64 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
65 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
66 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
67 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
69 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
70 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])
71 AT_CHECK([tail -1 stdout], [0],
72 [Datapath actions: 9,55,10,55,66,11,77,88
77 AT_SETUP([ofproto-dpif - dec_ttl])
79 ADD_OF_PORTS([br0], [1], [2], [3], [4])
80 AT_DATA([flows.txt], [dnl
81 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
82 table=1 in_port=1 action=dec_ttl,output:3
84 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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=2,frag=no)' -generate], [0], [stdout])
86 AT_CHECK([tail -3 stdout], [0],
87 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
88 This flow is handled by the userspace slow path because it:
89 - Sends "packet-in" messages to the OpenFlow controller.
91 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])
92 AT_CHECK([tail -1 stdout], [0],
93 [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
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(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
96 AT_CHECK([tail -1 stdout], [0],
97 [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
100 AT_CAPTURE_FILE([ofctl_monitor.log])
101 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
102 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])
103 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
104 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
105 NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
106 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
112 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
114 ADD_OF_PORTS([br0], [1], [2])
116 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
118 # "in_port" defaults to OFPP_NONE if it's not specified.
119 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"
120 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
121 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
130 AT_SETUP([ofproto-dpif - DSCP])
131 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
132 ADD_OF_PORTS([br0], [9])
133 AT_DATA([flows.txt], [dnl
134 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
136 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
137 AT_CHECK([ovs-vsctl -- \
138 set Port p1 qos=@newqos --\
139 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
140 --id=@q1 create Queue dscp=1 --\
141 --id=@q2 create Queue dscp=2], [0], [ignore])
142 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])
143 AT_CHECK([tail -1 stdout], [0],
144 [Datapath actions: dnl
146 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
147 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
149 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
150 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
151 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
157 AT_SETUP([ofproto-dpif - output/flood flags])
159 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
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(100),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: 100,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(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
215 AT_SETUP([ofproto-dpif - controller])
216 OVS_VSWITCHD_START([dnl
217 add-port br0 p1 -- set Interface p1 type=dummy
220 AT_CAPTURE_FILE([ofctl_monitor.log])
221 AT_DATA([flows.txt], [dnl
222 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
223 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
224 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
226 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
227 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)
228 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)
229 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
230 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)
231 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
232 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
233 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
234 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
235 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
236 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
237 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
238 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
239 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
241 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
244 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
247 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)'
250 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
251 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
252 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
253 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
255 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
256 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
258 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
259 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
262 dnl Singleton controller action.
263 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
266 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)'
269 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
270 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
271 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
272 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
274 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
275 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
277 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
278 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
281 dnl Modified controller action.
282 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
285 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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)'
288 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
289 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
290 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
291 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
293 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
294 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
296 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
297 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
300 dnl Modified MPLS controller action.
301 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
304 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)'
307 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
308 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
309 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
310 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
312 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
313 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
315 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
316 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
319 dnl Modified MPLS controller action.
320 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
322 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)
325 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)'
328 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
329 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
330 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
331 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
333 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
334 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
336 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
337 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
340 dnl Modified MPLS controller action.
341 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
344 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))'
347 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
348 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
349 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
350 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07
352 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
353 mpls(label:10,tc:3,ttl:64,bos:1),metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=7,dl_src=40:44:44:44:44:44,dl_dst=50:54:00:00:00:07
355 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
356 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
359 dnl Modified MPLS controller action.
360 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
363 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)'
366 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
367 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
368 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
369 mpls(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
371 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
372 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
374 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
375 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
378 dnl Modified MPLS actions.
379 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
382 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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)'
385 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
386 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
387 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
388 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
390 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
391 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
393 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
394 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
397 dnl Modified MPLS ipv6 controller action.
398 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
401 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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)'
404 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
405 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
406 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
407 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
409 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
410 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
412 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
413 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
417 dnl Modified MPLS pop action.
418 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
421 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)'
424 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
425 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
426 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
427 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
429 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
430 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
432 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
433 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
437 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
440 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)'
443 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
444 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
445 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
446 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
448 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
449 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
451 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)
452 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
454 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)
455 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
457 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)
458 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
460 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)
461 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
463 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)
464 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
466 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)
467 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
469 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)
470 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
474 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
477 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'
480 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
481 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
482 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
483 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
485 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
486 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
488 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)
489 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
491 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)
492 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
494 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)
495 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
497 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)
498 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
500 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)
501 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
503 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)
504 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
506 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)
507 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
510 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
511 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
512 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
513 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)
514 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)
515 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)
516 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)
517 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)
518 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
519 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
520 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
521 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
522 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
523 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
524 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
525 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
526 cookie=0xd, n_packets=3, n_bytes=180, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
527 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
534 AT_SETUP([ofproto-dpif - VLAN handling])
536 [set Bridge br0 fail-mode=standalone -- \
537 add-port br0 p1 trunks=10,12 -- \
538 add-port br0 p2 tag=10 -- \
539 add-port br0 p3 tag=12 \
540 other-config:priority-tags=true -- \
541 add-port br0 p4 tag=12 -- \
542 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
543 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
544 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
545 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
546 other-config:priority-tags=true -- \
547 set Interface p1 type=dummy -- \
548 set Interface p2 type=dummy -- \
549 set Interface p3 type=dummy -- \
550 set Interface p4 type=dummy -- \
551 set Interface p5 type=dummy -- \
552 set Interface p6 type=dummy -- \
553 set Interface p7 type=dummy -- \
554 set Interface p8 type=dummy --])
556 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
557 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
563 "100 10 0 1,5,6,7,8,pop_vlan,2" \
564 "100 10 1 1,5,6,7,8,pop_vlan,2" \
567 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
568 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
572 "1 10 0 5,6,7,8,100,pop_vlan,2" \
573 "1 10 1 5,6,7,8,100,pop_vlan,2" \
576 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
577 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
578 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
579 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
580 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
587 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
588 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
589 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
596 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
597 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
598 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
605 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
606 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
607 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
608 "5 10 0 1,6,7,8,100,pop_vlan,2" \
609 "5 10 1 1,6,7,8,100,pop_vlan,2" \
612 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
613 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
614 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
615 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
616 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
617 "6 10 0 1,5,7,8,100,pop_vlan,2" \
618 "6 10 1 1,5,7,8,100,pop_vlan,2" \
621 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
622 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
623 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
624 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
625 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
626 "7 10 0 1,5,6,8,100,pop_vlan,2" \
627 "7 10 1 1,5,6,8,100,pop_vlan,2" \
630 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
631 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
632 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
633 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
634 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
635 "8 10 0 1,5,6,7,100,pop_vlan,2" \
636 "8 10 1 1,5,6,7,100,pop_vlan,2" \
639 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
640 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
648 if test $vlan = none; then
649 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
651 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))"
654 echo "----------------------------------------------------------------------"
655 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
657 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
658 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
660 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
662 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
668 AT_SETUP([ofproto-dpif - fragment handling])
670 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
671 AT_DATA([flows.txt], [dnl
672 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
673 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
674 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
675 priority=50 tcp ip_frag=no actions=output:4
676 priority=50 tcp ip_frag=first actions=output:5
677 priority=50 tcp ip_frag=later actions=output:6
679 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
681 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"
682 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
683 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
684 later_flow="$base_flow,frag=later)"
686 # mode no first later
698 AT_CHECK([ovs-ofctl set-frags br0 $mode])
699 for type in no first later; do
700 eval flow=\$${type}_flow exp_output=\$$type
701 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
702 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
709 AT_SETUP([ofproto-dpif - exit])
711 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
712 AT_DATA([flows.txt], [dnl
713 in_port=1 actions=output:10,exit,output:11
714 in_port=2 actions=output:12,resubmit:1,output:12
715 in_port=3 actions=output:13,resubmit:2,output:14
717 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
718 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])
719 AT_CHECK([tail -1 stdout], [0],
720 [Datapath actions: 10
722 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])
723 AT_CHECK([tail -1 stdout], [0],
724 [Datapath actions: 12,10
726 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])
727 AT_CHECK([tail -1 stdout], [0],
728 [Datapath actions: 13,12,10
734 AT_SETUP([ofproto-dpif - mirroring, select_all])
736 ADD_OF_PORTS([br0], 1, 2, 3)
738 set Bridge br0 mirrors=@m --\
739 --id=@p3 get Port p3 --\
740 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
742 AT_DATA([flows.txt], [dnl
743 in_port=1 actions=output:2
744 in_port=2 actions=output:1
746 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
748 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)"
749 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
750 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
751 [Datapath actions: 2,3
754 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)"
755 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
756 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
757 [Datapath actions: 1,3
764 AT_SETUP([ofproto-dpif - mirroring, select_src])
766 ADD_OF_PORTS([br0], 1, 2, 3)
768 set Bridge br0 mirrors=@m --\
769 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
770 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
772 AT_DATA([flows.txt], [dnl
773 in_port=1 actions=output:2
774 in_port=2 actions=output:1
776 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
778 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)"
779 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
780 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
781 [Datapath actions: 2,3
784 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)"
785 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
786 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
792 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
794 ADD_OF_PORTS([br0], 1, 2)
796 set Bridge br0 mirrors=@m --\
797 --id=@p2 get Port p2 --\
798 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
800 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
802 # "in_port" defaults to OFPP_NONE if it's not specified.
803 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"
804 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
805 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
806 [Datapath actions: 1,2
813 AT_SETUP([ofproto-dpif - mirroring, select_dst])
815 ADD_OF_PORTS([br0], 1, 2, 3)
817 set Bridge br0 mirrors=@m --\
818 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
819 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
821 AT_DATA([flows.txt], [dnl
822 in_port=1 actions=output:2
823 in_port=2 actions=output:1
825 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
827 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)"
828 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
829 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
830 [Datapath actions: 2,3
833 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)"
834 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
835 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
843 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
845 ADD_OF_PORTS([br0], 1, 2, 3)
847 set Bridge br0 mirrors=@m --\
848 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
849 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
851 AT_DATA([flows.txt], [dnl
852 in_port=1, actions=output:2
854 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
856 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)"
857 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
858 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
862 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))"
863 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
864 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
868 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))"
869 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
870 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
871 [Datapath actions: 2,3
878 AT_SETUP([ofproto-dpif - mirroring, output_port])
880 ADD_OF_PORTS([br0], 1, 2, 3)
882 set Bridge br0 mirrors=@m --\
883 --id=@p3 get Port p3 --\
884 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
886 AT_DATA([flows.txt], [dnl
887 in_port=1 actions=mod_vlan_vid:17,output:2
888 in_port=2 actions=output:1
890 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
892 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)"
893 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
894 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
895 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
898 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)"
899 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
900 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
901 [Datapath actions: 1,3
907 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
909 ADD_OF_PORTS([br0], 1, 2)
911 set Bridge br0 mirrors=@m --\
912 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
914 AT_DATA([flows.txt], [dnl
915 in_port=1 actions=output:2
916 in_port=2 actions=mod_vlan_vid:17,output:1
918 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
920 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)"
921 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
922 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
924 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
925 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
927 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
929 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)"
930 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
931 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
933 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
934 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
936 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
941 m4_define([OFPROTO_TRACE],
943 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
944 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
946 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
949 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
952 AT_SETUP([ofproto-dpif - MAC learning])
953 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
954 ADD_OF_PORTS([br0], 1, 2, 3)
956 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)'
958 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
961 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
965 # Check for the MAC learning entry.
966 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
968 3 0 50:54:00:00:00:05 ?
971 # Trace a packet arrival destined for the learned MAC.
972 # (This will also learn a MAC.)
975 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
979 # Check for both MAC learning entries.
980 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
982 3 0 50:54:00:00:00:05 ?
983 1 0 50:54:00:00:00:06 ?
986 # Trace a packet arrival that updates the first learned MAC entry.
989 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
993 # Check that the MAC learning entry was updated.
994 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
996 1 0 50:54:00:00:00:06 ?
997 2 0 50:54:00:00:00:05 ?
1000 # Add another bridge.
1004 -- set bridge br1 datapath-type=dummy \
1005 -- add-port br1 p4 -- set interface p4 type=dummy \
1006 -- add-port br1 p5 -- set interface p5 type=dummy])
1008 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1011 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1016 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1020 # Check that the MAC learning entries were added.
1021 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1023 4 0 50:54:00:00:00:06 ?
1024 5 0 50:54:00:00:00:07 ?
1027 # Delete port p1 and see that its MAC learning entry disappeared, and
1028 # that the MAC learning entry for the same MAC was also deleted from br1.
1029 AT_CHECK([ovs-vsctl del-port p1])
1030 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1032 2 0 50:54:00:00:00:05 ?
1034 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1036 5 0 50:54:00:00:00:07 ?
1042 AT_SETUP([ofproto-dpif - MAC table overflow])
1044 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1045 add-port br0 p1 -- set Interface p1 type=dummy -- \
1046 add-port br0 p2 -- set Interface p2 type=dummy -- \
1047 add-port br0 p3 -- set Interface p3 type=dummy])
1049 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)'
1051 AT_CHECK([ovs-appctl time/stop])
1053 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1054 for i in 0 1 2 3 4 5 6 7 8 9; do
1057 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1060 ovs-appctl time/warp 1000
1063 # Check for the MAC learning entries.
1064 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1066 3 0 50:54:00:00:00:00
1067 3 0 50:54:00:00:00:01
1068 3 0 50:54:00:00:00:02
1069 3 0 50:54:00:00:00:03
1070 3 0 50:54:00:00:00:04
1071 3 0 50:54:00:00:00:05
1072 3 0 50:54:00:00:00:06
1073 3 0 50:54:00:00:00:07
1074 3 0 50:54:00:00:00:08
1075 3 0 50:54:00:00:00:09
1079 # Trace another ARP packet on another MAC.
1082 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1086 # Check that the new one chased the oldest one out of the table.
1087 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1089 3 0 50:54:00:00:00:01 ?
1090 3 0 50:54:00:00:00:02 ?
1091 3 0 50:54:00:00:00:03 ?
1092 3 0 50:54:00:00:00:04 ?
1093 3 0 50:54:00:00:00:05 ?
1094 3 0 50:54:00:00:00:06 ?
1095 3 0 50:54:00:00:00:07 ?
1096 3 0 50:54:00:00:00:08 ?
1097 3 0 50:54:00:00:00:09 ?
1098 3 0 50:54:00:00:00:10 ?
1104 dnl Test that basic NetFlow reports flow statistics correctly:
1105 dnl - The initial packet of a flow are correctly accounted.
1106 dnl - Later packets within a flow are correctly accounted.
1107 dnl - Flow actions changing (in this case, due to MAC learning)
1108 dnl cause a record to be sent.
1109 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1111 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1112 NETFLOW_PORT=`cat stdout`
1114 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1115 ADD_OF_PORTS([br0], 1, 2)
1117 set Bridge br0 netflow=@nf -- \
1118 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1119 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1121 ON_EXIT([kill `cat test-netflow.pid`])
1122 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])
1123 AT_CAPTURE_FILE([netflow.log])
1125 for delay in 1000 30000; do
1126 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)'
1127 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)'
1129 ovs-appctl time/warp $delay
1134 ovs-appctl -t test-netflow exit
1136 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1138 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1139 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1140 ' netflow.log | sort]], [0],
1142 header: v5, seq 0, engine 2,1
1143 header: v5, seq 1, engine 2,1
1144 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1145 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1146 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1150 dnl Test that basic NetFlow reports active expirations correctly.
1151 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1153 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1154 NETFLOW_PORT=`cat stdout`
1156 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1157 ADD_OF_PORTS([br0], 1, 2)
1159 set Bridge br0 netflow=@nf -- \
1160 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1161 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1163 ON_EXIT([kill `cat test-netflow.pid`])
1164 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
1166 AT_CHECK([ovs-appctl time/stop])
1168 while test $n -le 60; do
1171 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)'
1172 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)'
1174 ovs-appctl time/warp 1000
1177 ovs-appctl time/warp 10000
1181 ovs-appctl -t test-netflow exit
1183 # Count the number of reported packets:
1184 # - From source to destination before MAC learning kicks in (just one).
1185 # - From source to destination after that.
1186 # - From destination to source.
1194 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1201 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1204 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1207 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1214 eval $counter=\`expr \$$counter + \$pkts\`
1215 n_recs=`expr $n_recs + 1`
1218 # There should be exactly 1 MAC learning packet,
1219 # exactly 59 other packets in that direction,
1220 # and exactly 60 packets in the other direction.
1221 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1224 # There should be 1 expiration for MAC learning,
1225 # at least 5 active and a final expiration in one direction,
1226 # and at least 5 active and a final expiration in the other direction.
1228 AT_CHECK([test $n_recs -ge 13])
1232 AT_SETUP([idle_age and hard_age increase over time])
1235 # get_ages DURATION HARD IDLE
1237 # Fetch the flow duration, hard age, and idle age into the variables
1238 # whose names are given as arguments. Rounds DURATION down to the
1239 # nearest integer. If hard_age doesn't appear in the output, sets
1240 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1243 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1245 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1246 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1247 AS_VAR_COPY([$1], [duration])
1249 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1250 if test X"$hard" = X; then
1253 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1255 AS_VAR_COPY([$2], [hard])
1257 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1258 if test X"$idle" = X; then
1261 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1263 AS_VAR_COPY([$3], [idle])
1266 # Add a flow and get its initial hard and idle age.
1267 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1268 get_ages duration1 hard1 idle1
1270 # Warp time forward by 10 seconds, then modify the flow's actions.
1271 ovs-appctl time/warp 10000
1272 get_ages duration2 hard2 idle2
1273 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1275 # Warp time forward by 10 seconds.
1276 ovs-appctl time/warp 10000
1277 get_ages duration3 hard3 idle3
1279 # Warp time forward 10 more seconds, then pass some packets through the flow,
1280 # then warp forward a few more times because idle times are only updated
1282 ovs-appctl time/warp 10000
1283 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)'
1284 ovs-appctl time/warp 1000
1285 ovs-appctl time/warp 1000
1286 ovs-appctl time/warp 1000
1287 get_ages duration4 hard4 idle4
1289 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1290 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1291 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1293 # Duration should increase steadily over time.
1294 AT_CHECK([test $duration1 -lt $duration2])
1295 AT_CHECK([test $duration2 -lt $duration3])
1296 AT_CHECK([test $duration3 -lt $duration4])
1298 # Hard age should be "none" initially because it's the same as flow_duration,
1299 # then it should increase.
1300 AT_CHECK([test $hard1 = none])
1301 AT_CHECK([test $hard2 = none])
1302 AT_CHECK([test $hard3 != none])
1303 AT_CHECK([test $hard4 != none])
1304 AT_CHECK([test $hard3 -lt $hard4])
1306 # Idle age should increase from 1 to 2 to 3, then decrease.
1307 AT_CHECK([test $idle1 -lt $idle2])
1308 AT_CHECK([test $idle2 -lt $idle3])
1309 AT_CHECK([test $idle3 -gt $idle4])
1311 # Check some invariant relationships.
1312 AT_CHECK([test $duration1 = $idle1])
1313 AT_CHECK([test $duration2 = $idle2])
1314 AT_CHECK([test $duration3 = $idle3])
1315 AT_CHECK([test $idle3 -gt $hard3])
1316 AT_CHECK([test $idle4 -lt $hard4])
1317 AT_CHECK([test $hard4 -lt $duration4])
1322 AT_SETUP([ofproto-dpif - fin_timeout])
1324 AT_DATA([flows.txt], [dnl
1325 in_port=1 actions=output:2
1326 in_port=2 actions=mod_vlan_vid:17,output:1
1328 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1329 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1331 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1333 # Check that a TCP SYN packet does not change the timeout. (Because
1334 # flow stats updates are mainly what implements the fin_timeout
1335 # feature, we warp forward a couple of times to ensure that flow stats
1336 # run before re-checking the flow table.)
1337 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1339 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1342 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1344 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1346 # Check that a TCP FIN packet does change the timeout.
1347 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1349 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1352 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1354 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1359 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1360 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1361 ADD_OF_PORTS([br0], [1], [2])
1362 ADD_OF_PORTS([br1], [3])
1364 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1371 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1372 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1373 ADD_OF_PORTS([br0], [1], [2])
1374 ADD_OF_PORTS([br1], [3])
1376 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1377 br0 (dummy@ovs-dummy):
1378 lookups: hit:0 missed:0 lost:0
1380 br0 65534/100: (dummy)
1383 br1 (dummy@ovs-dummy):
1384 lookups: hit:0 missed:0 lost:0
1386 br1 65534/101: (dummy)
1390 AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
1391 br0 (dummy@ovs-dummy):
1392 lookups: hit:0 missed:0 lost:0
1394 br0 65534/100: (dummy)
1401 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1402 OVS_VSWITCHD_START([add-br br1 -- \
1403 set bridge br1 datapath-type=dummy fail-mode=secure])
1404 ADD_OF_PORTS([br0], [1], [2])
1405 ADD_OF_PORTS([br1], [3])
1407 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
1409 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
1411 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
1414 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1415 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
1416 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
1419 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1420 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
1426 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1427 OVS_VSWITCHD_START([add-br br1 -- \
1428 set bridge br1 datapath-type=dummy fail-mode=secure])
1429 ADD_OF_PORTS([br0], [1], [2])
1430 ADD_OF_PORTS([br1], [3])
1432 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
1434 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
1436 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
1439 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1440 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
1441 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
1444 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1445 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
1448 AT_CHECK([ovs-appctl dpif/del-flows br0])
1449 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1452 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1453 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
1459 AT_SETUP([ofproto-dpif - patch ports])
1460 OVS_VSWITCHD_START([add-br br1 \
1461 -- set bridge br1 datapath-type=dummy fail-mode=secure \
1462 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
1463 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
1465 ADD_OF_PORTS([br0], [2])
1466 ADD_OF_PORTS([br1], [3])
1468 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1469 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1471 for i in $(seq 1 10); do
1472 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)'
1475 for i in $(seq 1 5); do
1476 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)'
1479 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1480 br0 (dummy@ovs-dummy):
1481 lookups: hit:13 missed:2 lost:0
1483 br0 65534/100: (dummy)
1485 pbr0 1/none: (patch: peer=pbr1)
1486 br1 (dummy@ovs-dummy):
1487 lookups: hit:13 missed:2 lost:0
1489 br1 65534/101: (dummy)
1491 pbr1 1/none: (patch: peer=pbr0)
1494 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1495 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
1497 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1498 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
1501 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1502 OFPST_PORT reply (xid=0x4): 1 ports
1503 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
1504 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
1507 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
1508 OFPST_PORT reply (xid=0x4): 1 ports
1509 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
1510 tx pkts=5, bytes=300, drop=0, errs=0, coll=0