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=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
238 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
239 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
240 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
241 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
242 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
244 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
247 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
250 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)'
253 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
254 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
261 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
262 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
265 dnl Singleton controller action.
266 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
269 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)'
272 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
273 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
280 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
281 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
284 dnl Modified controller action.
285 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
288 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)'
291 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
292 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
299 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
300 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
303 dnl Modified MPLS controller action.
304 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
307 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)'
310 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
311 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
318 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
319 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
322 dnl Modified MPLS controller action.
323 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
325 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)
328 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)'
331 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
332 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
339 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
340 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
343 dnl Modified MPLS controller action.
344 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
347 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))'
350 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
351 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
358 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
359 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
362 dnl Modified MPLS controller action.
363 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
366 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)'
369 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
370 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
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
377 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
378 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
381 dnl Modified MPLS controller action.
382 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
385 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)'
388 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
389 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
390 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
391 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
393 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
394 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
396 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
397 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
400 dnl Modified MPLS controller action.
401 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
404 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)'
407 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
408 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
409 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
410 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
412 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
413 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
415 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
416 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
419 dnl Modified MPLS controller action.
420 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
423 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)'
426 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
427 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
428 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
429 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
431 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
432 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
434 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
435 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
438 dnl Modified MPLS actions.
439 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
442 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)'
445 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
446 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
447 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
448 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
450 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
451 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
453 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
454 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
457 dnl Modified MPLS ipv6 controller action.
458 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
461 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)'
464 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
465 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
466 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
467 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
469 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
470 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
472 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
473 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
477 dnl Modified MPLS pop 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=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)'
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=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
487 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
489 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
490 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
492 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
493 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
497 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
500 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)'
503 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
504 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
505 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
506 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
508 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
509 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
511 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)
512 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
514 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)
515 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
517 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)
518 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
520 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)
521 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
523 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)
524 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
526 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)
527 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
529 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)
530 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
534 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
537 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'
540 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
541 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
542 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
543 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
545 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
546 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
548 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)
549 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
551 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)
552 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
554 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)
555 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
557 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)
558 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
560 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)
561 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
563 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered)
564 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
566 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)
567 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
570 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
571 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
572 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
573 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)
574 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)
575 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)
576 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)
577 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)
578 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
579 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
580 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
581 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
582 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
583 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
584 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
585 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
586 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
587 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
588 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
589 cookie=0xd, n_packets=3, n_bytes=180, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
590 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
597 AT_SETUP([ofproto-dpif - VLAN handling])
599 [set Bridge br0 fail-mode=standalone -- \
600 add-port br0 p1 trunks=10,12 -- \
601 add-port br0 p2 tag=10 -- \
602 add-port br0 p3 tag=12 \
603 other-config:priority-tags=true -- \
604 add-port br0 p4 tag=12 -- \
605 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
606 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
607 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
608 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
609 other-config:priority-tags=true -- \
610 set Interface p1 type=dummy -- \
611 set Interface p2 type=dummy -- \
612 set Interface p3 type=dummy -- \
613 set Interface p4 type=dummy -- \
614 set Interface p5 type=dummy -- \
615 set Interface p6 type=dummy -- \
616 set Interface p7 type=dummy -- \
617 set Interface p8 type=dummy --])
619 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
620 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
626 "100 10 0 1,5,6,7,8,pop_vlan,2" \
627 "100 10 1 1,5,6,7,8,pop_vlan,2" \
630 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
631 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
635 "1 10 0 5,6,7,8,100,pop_vlan,2" \
636 "1 10 1 5,6,7,8,100,pop_vlan,2" \
639 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
640 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
641 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
642 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
643 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
650 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
651 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
652 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
659 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
660 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
661 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
668 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
669 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
670 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
671 "5 10 0 1,6,7,8,100,pop_vlan,2" \
672 "5 10 1 1,6,7,8,100,pop_vlan,2" \
675 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
676 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
677 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
678 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
679 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
680 "6 10 0 1,5,7,8,100,pop_vlan,2" \
681 "6 10 1 1,5,7,8,100,pop_vlan,2" \
684 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
685 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
686 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
687 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
688 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
689 "7 10 0 1,5,6,8,100,pop_vlan,2" \
690 "7 10 1 1,5,6,8,100,pop_vlan,2" \
693 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
694 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
695 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
696 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
697 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
698 "8 10 0 1,5,6,7,100,pop_vlan,2" \
699 "8 10 1 1,5,6,7,100,pop_vlan,2" \
702 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
703 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
711 if test $vlan = none; then
712 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
714 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))"
717 echo "----------------------------------------------------------------------"
718 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
720 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
721 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
723 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
725 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
731 AT_SETUP([ofproto-dpif - fragment handling])
733 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
734 AT_DATA([flows.txt], [dnl
735 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
736 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
737 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
738 priority=50 tcp ip_frag=no actions=output:4
739 priority=50 tcp ip_frag=first actions=output:5
740 priority=50 tcp ip_frag=later actions=output:6
742 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
744 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"
745 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
746 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
747 later_flow="$base_flow,frag=later)"
749 # mode no first later
761 AT_CHECK([ovs-ofctl set-frags br0 $mode])
762 for type in no first later; do
763 eval flow=\$${type}_flow exp_output=\$$type
764 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
765 AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: $exp_output
772 AT_SETUP([ofproto-dpif - exit])
774 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
775 AT_DATA([flows.txt], [dnl
776 in_port=1 actions=output:10,exit,output:11
777 in_port=2 actions=output:12,resubmit:1,output:12
778 in_port=3 actions=output:13,resubmit:2,output:14
780 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
781 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])
782 AT_CHECK([tail -1 stdout], [0],
783 [Datapath actions: 10
785 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])
786 AT_CHECK([tail -1 stdout], [0],
787 [Datapath actions: 12,10
789 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])
790 AT_CHECK([tail -1 stdout], [0],
791 [Datapath actions: 13,12,10
797 AT_SETUP([ofproto-dpif - mirroring, select_all])
799 ADD_OF_PORTS([br0], 1, 2, 3)
801 set Bridge br0 mirrors=@m --\
802 --id=@p3 get Port p3 --\
803 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
805 AT_DATA([flows.txt], [dnl
806 in_port=1 actions=output:2
807 in_port=2 actions=output:1
809 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
811 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)"
812 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
813 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
814 [Datapath actions: 2,3
817 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)"
818 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
819 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
820 [Datapath actions: 1,3
827 AT_SETUP([ofproto-dpif - mirroring, select_src])
829 ADD_OF_PORTS([br0], 1, 2, 3)
831 set Bridge br0 mirrors=@m --\
832 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
833 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
835 AT_DATA([flows.txt], [dnl
836 in_port=1 actions=output:2
837 in_port=2 actions=output:1
839 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
841 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)"
842 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
843 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
844 [Datapath actions: 2,3
847 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)"
848 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
849 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
855 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
857 ADD_OF_PORTS([br0], 1, 2)
859 set Bridge br0 mirrors=@m --\
860 --id=@p2 get Port p2 --\
861 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
863 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
865 # "in_port" defaults to OFPP_NONE if it's not specified.
866 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"
867 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
868 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
869 [Datapath actions: 1,2
876 AT_SETUP([ofproto-dpif - mirroring, select_dst])
878 ADD_OF_PORTS([br0], 1, 2, 3)
880 set Bridge br0 mirrors=@m --\
881 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
882 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
884 AT_DATA([flows.txt], [dnl
885 in_port=1 actions=output:2
886 in_port=2 actions=output:1
888 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
890 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)"
891 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
892 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
893 [Datapath actions: 2,3
896 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)"
897 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
898 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
906 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
908 ADD_OF_PORTS([br0], 1, 2, 3)
910 set Bridge br0 mirrors=@m --\
911 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
912 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
914 AT_DATA([flows.txt], [dnl
915 in_port=1, actions=output:2
917 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
919 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)"
920 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
921 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
925 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))"
926 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
927 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
931 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))"
932 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
933 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
934 [Datapath actions: 2,3
941 AT_SETUP([ofproto-dpif - mirroring, output_port])
943 ADD_OF_PORTS([br0], 1, 2, 3)
945 set Bridge br0 mirrors=@m --\
946 --id=@p3 get Port p3 --\
947 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
949 AT_DATA([flows.txt], [dnl
950 in_port=1 actions=mod_vlan_vid:17,output:2
951 in_port=2 actions=output:1
953 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
955 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)"
956 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
957 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
958 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
961 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)"
962 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
963 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
964 [Datapath actions: 1,3
970 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
972 ADD_OF_PORTS([br0], 1, 2)
974 set Bridge br0 mirrors=@m --\
975 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
977 AT_DATA([flows.txt], [dnl
978 in_port=1 actions=output:2
979 in_port=2 actions=mod_vlan_vid:17,output:1
981 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
983 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)"
984 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
985 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
987 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
988 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
990 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
992 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)"
993 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
994 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
996 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
997 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
999 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1004 m4_define([OFPROTO_TRACE],
1006 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1007 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1009 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1012 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1015 AT_SETUP([ofproto-dpif - MAC learning])
1016 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1017 ADD_OF_PORTS([br0], 1, 2, 3)
1019 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)'
1021 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1024 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1028 # Check for the MAC learning entry.
1029 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1031 3 0 50:54:00:00:00:05 ?
1034 # Trace a packet arrival destined for the learned MAC.
1035 # (This will also learn a MAC.)
1038 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1042 # Check for both MAC learning entries.
1043 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1045 3 0 50:54:00:00:00:05 ?
1046 1 0 50:54:00:00:00:06 ?
1049 # Trace a packet arrival that updates the first learned MAC entry.
1052 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1056 # Check that the MAC learning entry was updated.
1057 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1059 1 0 50:54:00:00:00:06 ?
1060 2 0 50:54:00:00:00:05 ?
1063 # Add another bridge.
1067 -- set bridge br1 datapath-type=dummy \
1068 -- add-port br1 p4 -- set interface p4 type=dummy \
1069 -- add-port br1 p5 -- set interface p5 type=dummy])
1071 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1074 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1079 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1083 # Check that the MAC learning entries were added.
1084 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1086 4 0 50:54:00:00:00:06 ?
1087 5 0 50:54:00:00:00:07 ?
1090 # Delete port p1 and see that its MAC learning entry disappeared, and
1091 # that the MAC learning entry for the same MAC was also deleted from br1.
1092 AT_CHECK([ovs-vsctl del-port p1])
1093 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1095 2 0 50:54:00:00:00:05 ?
1097 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1099 5 0 50:54:00:00:00:07 ?
1105 AT_SETUP([ofproto-dpif - MAC table overflow])
1107 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1108 add-port br0 p1 -- set Interface p1 type=dummy -- \
1109 add-port br0 p2 -- set Interface p2 type=dummy -- \
1110 add-port br0 p3 -- set Interface p3 type=dummy])
1112 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)'
1114 AT_CHECK([ovs-appctl time/stop])
1116 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1117 for i in 0 1 2 3 4 5 6 7 8 9; do
1120 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1123 ovs-appctl time/warp 1000
1126 # Check for the MAC learning entries.
1127 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1129 3 0 50:54:00:00:00:00
1130 3 0 50:54:00:00:00:01
1131 3 0 50:54:00:00:00:02
1132 3 0 50:54:00:00:00:03
1133 3 0 50:54:00:00:00:04
1134 3 0 50:54:00:00:00:05
1135 3 0 50:54:00:00:00:06
1136 3 0 50:54:00:00:00:07
1137 3 0 50:54:00:00:00:08
1138 3 0 50:54:00:00:00:09
1142 # Trace another ARP packet on another MAC.
1145 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1149 # Check that the new one chased the oldest one out of the table.
1150 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1152 3 0 50:54:00:00:00:01 ?
1153 3 0 50:54:00:00:00:02 ?
1154 3 0 50:54:00:00:00:03 ?
1155 3 0 50:54:00:00:00:04 ?
1156 3 0 50:54:00:00:00:05 ?
1157 3 0 50:54:00:00:00:06 ?
1158 3 0 50:54:00:00:00:07 ?
1159 3 0 50:54:00:00:00:08 ?
1160 3 0 50:54:00:00:00:09 ?
1161 3 0 50:54:00:00:00:10 ?
1167 dnl Test that basic NetFlow reports flow statistics correctly:
1168 dnl - The initial packet of a flow are correctly accounted.
1169 dnl - Later packets within a flow are correctly accounted.
1170 dnl - Flow actions changing (in this case, due to MAC learning)
1171 dnl cause a record to be sent.
1172 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1174 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1175 NETFLOW_PORT=`cat stdout`
1177 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1178 ADD_OF_PORTS([br0], 1, 2)
1180 set Bridge br0 netflow=@nf -- \
1181 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1182 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1184 ON_EXIT([kill `cat test-netflow.pid`])
1185 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])
1186 AT_CAPTURE_FILE([netflow.log])
1188 for delay in 1000 30000; do
1189 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)'
1190 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)'
1192 ovs-appctl time/warp $delay
1197 ovs-appctl -t test-netflow exit
1199 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1201 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1202 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1203 ' netflow.log | sort]], [0],
1205 header: v5, seq 0, engine 2,1
1206 header: v5, seq 1, engine 2,1
1207 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1208 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1209 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1213 dnl Test that basic NetFlow reports active expirations correctly.
1214 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1216 AT_CHECK([perl $srcdir/choose-port.pl], [0], [stdout])
1217 NETFLOW_PORT=`cat stdout`
1219 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1220 ADD_OF_PORTS([br0], 1, 2)
1222 set Bridge br0 netflow=@nf -- \
1223 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1224 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1226 ON_EXIT([kill `cat test-netflow.pid`])
1227 AT_CHECK([test-netflow --detach --no-chdir --pidfile $NETFLOW_PORT:127.0.0.1 > netflow.log])AT_CAPTURE_FILE([netflow.log])
1229 AT_CHECK([ovs-appctl time/stop])
1231 while test $n -le 60; do
1234 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)'
1235 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)'
1237 ovs-appctl time/warp 1000
1240 ovs-appctl time/warp 10000
1244 ovs-appctl -t test-netflow exit
1246 # Count the number of reported packets:
1247 # - From source to destination before MAC learning kicks in (just one).
1248 # - From source to destination after that.
1249 # - From destination to source.
1257 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1264 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1267 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1270 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1277 eval $counter=\`expr \$$counter + \$pkts\`
1278 n_recs=`expr $n_recs + 1`
1281 # There should be exactly 1 MAC learning packet,
1282 # exactly 59 other packets in that direction,
1283 # and exactly 60 packets in the other direction.
1284 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1287 # There should be 1 expiration for MAC learning,
1288 # at least 5 active and a final expiration in one direction,
1289 # and at least 5 active and a final expiration in the other direction.
1291 AT_CHECK([test $n_recs -ge 13])
1295 AT_SETUP([idle_age and hard_age increase over time])
1298 # get_ages DURATION HARD IDLE
1300 # Fetch the flow duration, hard age, and idle age into the variables
1301 # whose names are given as arguments. Rounds DURATION down to the
1302 # nearest integer. If hard_age doesn't appear in the output, sets
1303 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1306 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1308 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1309 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1310 AS_VAR_COPY([$1], [duration])
1312 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1313 if test X"$hard" = X; then
1316 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1318 AS_VAR_COPY([$2], [hard])
1320 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1321 if test X"$idle" = X; then
1324 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1326 AS_VAR_COPY([$3], [idle])
1329 # Add a flow and get its initial hard and idle age.
1330 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1331 get_ages duration1 hard1 idle1
1333 # Warp time forward by 10 seconds, then modify the flow's actions.
1334 ovs-appctl time/warp 10000
1335 get_ages duration2 hard2 idle2
1336 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1338 # Warp time forward by 10 seconds.
1339 ovs-appctl time/warp 10000
1340 get_ages duration3 hard3 idle3
1342 # Warp time forward 10 more seconds, then pass some packets through the flow,
1343 # then warp forward a few more times because idle times are only updated
1345 ovs-appctl time/warp 10000
1346 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)'
1347 ovs-appctl time/warp 1000
1348 ovs-appctl time/warp 1000
1349 ovs-appctl time/warp 1000
1350 get_ages duration4 hard4 idle4
1352 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1353 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1354 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1356 # Duration should increase steadily over time.
1357 AT_CHECK([test $duration1 -lt $duration2])
1358 AT_CHECK([test $duration2 -lt $duration3])
1359 AT_CHECK([test $duration3 -lt $duration4])
1361 # Hard age should be "none" initially because it's the same as flow_duration,
1362 # then it should increase.
1363 AT_CHECK([test $hard1 = none])
1364 AT_CHECK([test $hard2 = none])
1365 AT_CHECK([test $hard3 != none])
1366 AT_CHECK([test $hard4 != none])
1367 AT_CHECK([test $hard3 -lt $hard4])
1369 # Idle age should increase from 1 to 2 to 3, then decrease.
1370 AT_CHECK([test $idle1 -lt $idle2])
1371 AT_CHECK([test $idle2 -lt $idle3])
1372 AT_CHECK([test $idle3 -gt $idle4])
1374 # Check some invariant relationships.
1375 AT_CHECK([test $duration1 = $idle1])
1376 AT_CHECK([test $duration2 = $idle2])
1377 AT_CHECK([test $duration3 = $idle3])
1378 AT_CHECK([test $idle3 -gt $hard3])
1379 AT_CHECK([test $idle4 -lt $hard4])
1380 AT_CHECK([test $hard4 -lt $duration4])
1385 AT_SETUP([ofproto-dpif - fin_timeout])
1387 AT_DATA([flows.txt], [dnl
1388 in_port=1 actions=output:2
1389 in_port=2 actions=mod_vlan_vid:17,output:1
1391 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1392 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1394 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1396 # Check that a TCP SYN packet does not change the timeout. (Because
1397 # flow stats updates are mainly what implements the fin_timeout
1398 # feature, we warp forward a couple of times to ensure that flow stats
1399 # run before re-checking the flow table.)
1400 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1402 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1405 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1407 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1409 # Check that a TCP FIN packet does change the timeout.
1410 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1412 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1415 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1417 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1422 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1423 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1424 ADD_OF_PORTS([br0], [1], [2])
1425 ADD_OF_PORTS([br1], [3])
1427 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1434 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1435 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1436 ADD_OF_PORTS([br0], [1], [2])
1437 ADD_OF_PORTS([br1], [3])
1439 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1440 br0 (dummy@ovs-dummy):
1441 lookups: hit:0 missed:0 lost:0
1443 br0 65534/100: (dummy)
1446 br1 (dummy@ovs-dummy):
1447 lookups: hit:0 missed:0 lost:0
1449 br1 65534/101: (dummy)
1453 AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
1454 br0 (dummy@ovs-dummy):
1455 lookups: hit:0 missed:0 lost:0
1457 br0 65534/100: (dummy)
1464 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1465 OVS_VSWITCHD_START([add-br br1 -- \
1466 set bridge br1 datapath-type=dummy fail-mode=secure])
1467 ADD_OF_PORTS([br0], [1], [2])
1468 ADD_OF_PORTS([br1], [3])
1470 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
1472 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
1474 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
1477 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1478 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
1479 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
1482 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1483 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
1489 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1490 OVS_VSWITCHD_START([add-br br1 -- \
1491 set bridge br1 datapath-type=dummy fail-mode=secure])
1492 ADD_OF_PORTS([br0], [1], [2])
1493 ADD_OF_PORTS([br1], [3])
1495 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
1497 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
1499 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
1502 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1503 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
1504 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
1507 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1508 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
1511 AT_CHECK([ovs-appctl dpif/del-flows br0])
1512 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1515 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1516 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
1522 AT_SETUP([ofproto-dpif - patch ports])
1523 OVS_VSWITCHD_START([add-br br1 \
1524 -- set bridge br1 datapath-type=dummy fail-mode=secure \
1525 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
1526 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
1528 ADD_OF_PORTS([br0], [2])
1529 ADD_OF_PORTS([br1], [3])
1531 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1532 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1534 for i in $(seq 1 10); do
1535 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)'
1538 for i in $(seq 1 5); do
1539 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)'
1542 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1543 br0 (dummy@ovs-dummy):
1544 lookups: hit:13 missed:2 lost:0
1546 br0 65534/100: (dummy)
1548 pbr0 1/none: (patch: peer=pbr1)
1549 br1 (dummy@ovs-dummy):
1550 lookups: hit:13 missed:2 lost:0
1552 br1 65534/101: (dummy)
1554 pbr1 1/none: (patch: peer=pbr0)
1557 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1558 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
1560 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1561 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
1564 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1565 OFPST_PORT reply (xid=0x4): 1 ports
1566 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
1567 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
1570 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
1571 OFPST_PORT reply (xid=0x4): 1 ports
1572 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
1573 tx pkts=5, bytes=300, drop=0, errs=0, coll=0