1 AT_BANNER([ofproto-dpif])
3 AT_SETUP([ofproto-dpif - resubmit])
5 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
6 [16], [17], [18], [19], [20], [21])
7 AT_DATA([flows.txt], [dnl
8 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
9 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
10 table=0 in_port=3 priority=2000 icmp actions=output(20)
11 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
12 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
13 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
15 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
16 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
17 AT_CHECK([tail -1 stdout], [0],
18 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
23 AT_SETUP([ofproto-dpif - goto table])
25 ADD_OF_PORTS([br0], [1], [10], [11])
26 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
27 for i in `seq 1 252`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
28 echo "table=253 actions=output(11)" >> flows.txt
29 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
30 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
31 AT_CHECK([tail -1 stdout], [0],
32 [Datapath actions: 10,11
37 AT_SETUP([ofproto-dpif - registers])
39 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
40 AT_DATA([flows.txt], [dnl
41 in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
42 in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
43 in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
44 in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
46 in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
47 in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
48 in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
49 in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
50 in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
51 in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
52 in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
53 in_port=9,reg0=0xdeadbeef actions=output:20
54 in_port=10,reg1=0xdeadbeef actions=output:21
55 in_port=11,reg2=0xeef22dea actions=output:22
57 dnl Sanilty check all registers
58 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
59 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
60 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
61 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
64 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
65 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
66 AT_CHECK([tail -1 stdout], [0],
67 [Datapath actions: 20,21,22,33
72 AT_SETUP([ofproto-dpif - push-pop])
74 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
75 AT_DATA([flows.txt], [dnl
76 in_port=90 actions=load:20->NXM_NX_REG0[[0..7]],load:21->NXM_NX_REG1[[0..7]],load:22->NXM_NX_REG2[[0..7]], load:33->NXM_NX_REG3[[0..7]], push:NXM_NX_REG0[[]], push:NXM_NX_REG1[[0..7]],push:NXM_NX_REG2[[0..15]], push:NXM_NX_REG3[[]], resubmit:2, resubmit:3, resubmit:4, resubmit:5
77 in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
78 in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
79 in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
80 in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
83 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
84 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
85 AT_CHECK([tail -1 stdout], [0],
86 [Datapath actions: 33,22,21,20
91 AT_SETUP([ofproto-dpif - output])
93 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
94 AT_DATA([flows.txt], [dnl
95 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
96 in_port=2 actions=output:9
97 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
98 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
99 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
100 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
101 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
102 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
104 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
105 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
106 AT_CHECK([tail -1 stdout], [0],
107 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
112 AT_SETUP([ofproto-dpif - dec_ttl])
114 ADD_OF_PORTS([br0], [1], [2], [3], [4])
115 AT_DATA([flows.txt], [dnl
116 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
117 table=1 in_port=1 action=dec_ttl,output:3
119 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
120 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
121 AT_CHECK([tail -3 stdout], [0],
122 [Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=1,frag=no)),2,4
123 This flow is handled by the userspace slow path because it:
124 - Sends "packet-in" messages to the OpenFlow controller.
126 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
127 AT_CHECK([tail -1 stdout], [0],
128 [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
130 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
131 AT_CHECK([tail -1 stdout], [0],
132 [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
135 AT_CAPTURE_FILE([ofctl_monitor.log])
136 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
137 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
138 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
139 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
140 NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered)
141 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
147 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
149 ADD_OF_PORTS([br0], [1], [2])
151 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
153 # "in_port" defaults to OFPP_NONE if it's not specified.
154 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"
155 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
156 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
165 AT_SETUP([ofproto-dpif - DSCP])
166 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
167 ADD_OF_PORTS([br0], [9])
168 AT_DATA([flows.txt], [dnl
169 actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
171 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
172 AT_CHECK([ovs-vsctl -- \
173 set Port p1 qos=@newqos --\
174 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
175 --id=@q1 create Queue dscp=1 --\
176 --id=@q2 create Queue dscp=2], [0], [ignore])
177 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
178 AT_CHECK([tail -1 stdout], [0],
179 [Datapath actions: dnl
181 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
182 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
184 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
185 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
186 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
192 AT_SETUP([ofproto-dpif - output/flood flags])
194 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
196 AT_DATA([flows.txt], [dnl
197 in_port=local actions=local,flood
198 in_port=1 actions=flood
199 in_port=2 actions=all
200 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
201 in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
203 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
204 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
205 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
207 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
208 AT_CHECK([tail -1 stdout \
209 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
217 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
218 AT_CHECK([tail -1 stdout \
219 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
227 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
228 AT_CHECK([tail -1 stdout \
229 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
238 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
239 AT_CHECK([tail -1 stdout], [0],
240 [Datapath actions: 100,1,2,4,6,7
243 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
244 AT_CHECK([tail -1 stdout], [0],
245 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
250 AT_SETUP([ofproto-dpif - controller])
251 OVS_VSWITCHD_START([dnl
252 add-port br0 p1 -- set Interface p1 type=dummy
254 ON_EXIT([kill `cat ovs-ofctl.pid`])
256 AT_CAPTURE_FILE([ofctl_monitor.log])
257 AT_DATA([flows.txt], [dnl
258 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
259 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
260 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
262 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
263 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)
264 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)
265 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
266 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)
267 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
268 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
269 cookie=0xa dl_src=40:44:44:44:44:41 actions=push_vlan:0x8100,mod_vlan_vid:99,mod_vlan_pcp:1,controller
270 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
271 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
272 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
273 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
274 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
275 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
276 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
277 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
278 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
279 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
281 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
284 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
287 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)'
289 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
290 ovs-appctl -t ovs-ofctl exit
292 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
293 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
294 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
296 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
297 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
299 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
300 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
303 dnl Singleton controller action.
304 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
307 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)'
309 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
310 ovs-appctl -t ovs-ofctl exit
312 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
313 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
314 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
316 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
317 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
319 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
320 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
323 dnl Modified controller action.
324 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
327 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)'
329 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
330 ovs-appctl -t ovs-ofctl exit
332 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
333 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
334 tcp,metadata=0,in_port=0,dl_vlan=15,dl_vlan_pcp=0,dl_src=30:33:33:33:33:33,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
336 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
337 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
339 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
340 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
343 dnl Modified VLAN 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:41,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)'
349 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
350 ovs-appctl -t ovs-ofctl exit
352 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
353 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
354 tcp,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,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
356 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
357 tcp,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,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
359 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
360 tcp,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,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
363 dnl Modified MPLS controller action.
364 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
367 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44: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)'
369 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
370 ovs-appctl -t ovs-ofctl exit
372 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
373 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
374 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
376 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
377 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
379 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
380 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:42,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
383 dnl Modified MPLS controller action.
384 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
386 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)
389 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)'
392 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
393 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
394 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
395 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
397 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
398 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
400 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
401 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:43,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0
404 dnl Modified MPLS controller action.
405 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
408 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))'
410 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
411 ovs-appctl -t ovs-ofctl exit
413 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
414 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
415 mpls,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,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
417 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
418 mpls,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,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
420 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
421 mpls,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,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=1
424 dnl Modified MPLS controller action.
425 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
428 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)'
430 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
431 ovs-appctl -t ovs-ofctl exit
433 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
434 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
435 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
437 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
438 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
440 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
441 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:45,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=63,mpls_bos=1
444 dnl Modified MPLS controller action.
445 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
448 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)'
450 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
451 ovs-appctl -t ovs-ofctl exit
453 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
454 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
455 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
457 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
458 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
460 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
461 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:46,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
464 dnl Modified MPLS controller action.
465 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
468 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)'
470 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
471 ovs-appctl -t ovs-ofctl exit
473 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
474 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
475 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
477 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
478 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
480 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
481 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:47,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=10,mpls_bos=1
484 dnl Modified MPLS controller action.
485 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
488 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)'
490 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
491 ovs-appctl -t ovs-ofctl exit
493 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
494 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
495 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
497 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
498 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
500 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
501 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:44:48,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=9,mpls_bos=1
504 dnl Modified MPLS actions.
505 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
508 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)'
510 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
511 ovs-appctl -t ovs-ofctl exit
513 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
514 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
515 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
517 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
518 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
520 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
521 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:55:55:55:55:55,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
524 dnl Modified MPLS ipv6 controller action.
525 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
528 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)'
530 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
531 ovs-appctl -t ovs-ofctl exit
533 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
534 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
535 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
537 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
538 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
540 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
541 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=70:77:77:77:77:77,dl_dst=50:54:00:00:00:07,mpls_label=1000,mpls_tc=7,mpls_ttl=64,mpls_bos=1
545 dnl Modified MPLS pop action.
546 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
547 dnl 60:66:66:66:66:66 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
548 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
550 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
553 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 66 66 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 40 06 3b 78 c0 a8 00 01 c0 a8 00 02 00 50 00 00 00 00 00 2a 00 00 00 2a 50 00 27 10 77 44 00 00 48 4f 47 45'
556 # 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)'
558 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
559 ovs-appctl -t ovs-ofctl exit
561 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
562 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
563 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,tp_src=80,tp_dst=0 tcp_csum:7744
565 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
566 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,tp_src=80,tp_dst=0 tcp_csum:7744
568 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
569 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,tp_src=80,tp_dst=0 tcp_csum:7744
573 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
576 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)'
578 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
579 ovs-appctl -t ovs-ofctl exit
581 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
582 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
583 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
585 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
586 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
588 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)
589 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
591 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)
592 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
594 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)
595 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
597 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)
598 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
600 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)
601 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
603 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)
604 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
606 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)
607 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
611 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
614 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'
616 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
617 ovs-appctl -t ovs-ofctl exit
619 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
620 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
621 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
623 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
624 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
626 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)
627 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
629 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)
630 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
632 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)
633 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
635 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)
636 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
638 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)
639 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
641 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)
642 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
644 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)
645 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
648 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
649 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
650 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
651 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
652 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)
653 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)
654 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)
655 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)
656 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)
657 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
658 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
659 cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
660 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
661 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
662 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
663 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
664 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
665 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
666 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
667 cookie=0xb, n_packets=3, n_bytes=180, mpls,dl_src=50:55:55:55:55:55 actions=load:0x3e8->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
668 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
669 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
670 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
677 AT_SETUP([ofproto-dpif - VLAN handling])
679 [set Bridge br0 fail-mode=standalone -- \
680 add-port br0 p1 trunks=10,12 -- \
681 add-port br0 p2 tag=10 -- \
682 add-port br0 p3 tag=12 \
683 other-config:priority-tags=true -- \
684 add-port br0 p4 tag=12 -- \
685 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
686 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
687 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
688 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
689 other-config:priority-tags=true -- \
690 set Interface p1 type=dummy -- \
691 set Interface p2 type=dummy -- \
692 set Interface p3 type=dummy -- \
693 set Interface p4 type=dummy -- \
694 set Interface p5 type=dummy -- \
695 set Interface p6 type=dummy -- \
696 set Interface p7 type=dummy -- \
697 set Interface p8 type=dummy --])
699 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
700 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
706 "100 10 0 1,5,6,7,8,pop_vlan,2" \
707 "100 10 1 1,5,6,7,8,pop_vlan,2" \
710 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
711 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
715 "1 10 0 5,6,7,8,100,pop_vlan,2" \
716 "1 10 1 5,6,7,8,100,pop_vlan,2" \
719 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
720 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
721 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
722 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
723 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
730 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
731 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
732 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
739 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
740 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
741 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
748 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
749 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
750 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
751 "5 10 0 1,6,7,8,100,pop_vlan,2" \
752 "5 10 1 1,6,7,8,100,pop_vlan,2" \
755 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
756 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
757 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
758 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
759 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
760 "6 10 0 1,5,7,8,100,pop_vlan,2" \
761 "6 10 1 1,5,7,8,100,pop_vlan,2" \
764 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
765 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
766 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
767 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
768 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
769 "7 10 0 1,5,6,8,100,pop_vlan,2" \
770 "7 10 1 1,5,6,8,100,pop_vlan,2" \
773 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
774 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
775 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
776 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
777 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
778 "8 10 0 1,5,6,7,100,pop_vlan,2" \
779 "8 10 1 1,5,6,7,100,pop_vlan,2" \
782 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
783 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
791 if test $vlan = none; then
792 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
794 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))"
797 echo "----------------------------------------------------------------------"
798 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
800 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
801 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
803 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
805 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
811 AT_SETUP([ofproto-dpif - fragment handling])
813 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
814 AT_DATA([flows.txt], [dnl
815 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
816 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
817 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
818 priority=50 tcp ip_frag=no actions=output:4
819 priority=50 tcp ip_frag=first actions=output:5
820 priority=50 tcp ip_frag=later actions=output:6
822 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
824 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"
825 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
826 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
827 later_flow="$base_flow,frag=later)"
829 # mode no first later
841 AT_CHECK([ovs-ofctl set-frags br0 $mode])
842 for type in no first later; do
843 eval flow=\$${type}_flow exp_output=\$$type
844 printf "\n%s\n" "----$mode $type-----"
845 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
847 if test $mode = drop && test $type != no; then
848 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
850 echo "Datapath actions: $exp_output" >> expout
851 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
857 AT_SETUP([ofproto-dpif - exit])
859 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
860 AT_DATA([flows.txt], [dnl
861 in_port=1 actions=output:10,exit,output:11
862 in_port=2 actions=output:12,resubmit:1,output:12
863 in_port=3 actions=output:13,resubmit:2,output:14
865 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
866 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
867 AT_CHECK([tail -1 stdout], [0],
868 [Datapath actions: 10
870 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
871 AT_CHECK([tail -1 stdout], [0],
872 [Datapath actions: 12,10
874 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy '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])
875 AT_CHECK([tail -1 stdout], [0],
876 [Datapath actions: 13,12,10
882 AT_SETUP([ofproto-dpif - mirroring, select_all])
884 ADD_OF_PORTS([br0], 1, 2, 3)
886 set Bridge br0 mirrors=@m --\
887 --id=@p3 get Port p3 --\
888 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
890 AT_DATA([flows.txt], [dnl
891 in_port=1 actions=output:2
892 in_port=2 actions=output:1
894 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
896 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)"
897 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
898 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
899 [Datapath actions: 2,3
902 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)"
903 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
904 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
905 [Datapath actions: 1,3
912 AT_SETUP([ofproto-dpif - mirroring, select_src])
914 ADD_OF_PORTS([br0], 1, 2, 3)
916 set Bridge br0 mirrors=@m --\
917 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
918 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
920 AT_DATA([flows.txt], [dnl
921 in_port=1 actions=output:2
922 in_port=2 actions=output:1
924 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
926 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)"
927 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
928 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
929 [Datapath actions: 2,3
932 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)"
933 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
934 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
940 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
942 ADD_OF_PORTS([br0], 1, 2)
944 set Bridge br0 mirrors=@m --\
945 --id=@p2 get Port p2 --\
946 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
948 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
950 # "in_port" defaults to OFPP_NONE if it's not specified.
951 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"
952 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
953 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
954 [Datapath actions: 1,2
961 AT_SETUP([ofproto-dpif - mirroring, select_dst])
963 ADD_OF_PORTS([br0], 1, 2, 3)
965 set Bridge br0 mirrors=@m --\
966 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
967 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
969 AT_DATA([flows.txt], [dnl
970 in_port=1 actions=output:2
971 in_port=2 actions=output:1
973 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
975 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
976 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
977 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
978 [Datapath actions: 2,3
981 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
982 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
983 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
991 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
993 ADD_OF_PORTS([br0], 1, 2, 3)
995 set Bridge br0 mirrors=@m --\
996 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
997 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
999 AT_DATA([flows.txt], [dnl
1000 in_port=1, actions=output:2
1002 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1004 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)"
1005 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1006 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1007 [Datapath actions: 2
1010 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))"
1011 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1012 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1013 [Datapath actions: 2
1016 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))"
1017 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1018 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1019 [Datapath actions: 2,3
1026 AT_SETUP([ofproto-dpif - mirroring, output_port])
1028 ADD_OF_PORTS([br0], 1, 2, 3)
1030 set Bridge br0 mirrors=@m --\
1031 --id=@p3 get Port p3 --\
1032 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1034 AT_DATA([flows.txt], [dnl
1035 in_port=1 actions=mod_vlan_vid:17,output:2
1036 in_port=2 actions=output:1
1038 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1040 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)"
1041 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1042 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1043 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1046 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)"
1047 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1048 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1049 [Datapath actions: 1,3
1055 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1057 ADD_OF_PORTS([br0], 1, 2)
1059 set Bridge br0 mirrors=@m --\
1060 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1062 AT_DATA([flows.txt], [dnl
1063 in_port=1 actions=output:2
1064 in_port=2 actions=mod_vlan_vid:17,output:1
1066 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1068 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)"
1069 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1070 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1072 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1073 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1075 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1077 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)"
1078 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1079 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1081 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1082 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1084 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1089 # Two testcases below are for the ofproto/trace command
1090 # The first one tests all correct syntax:
1091 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1092 # ofproto/trace br_name br_flow [-generate|packet]
1093 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1094 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1095 ADD_OF_PORTS([br0], 1, 2, 3)
1097 AT_DATA([flows.txt], [dnl
1098 in_port=1 actions=output:2
1099 in_port=2 actions=output:1
1101 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1103 odp_flow="in_port(1)"
1105 # Test command: ofproto/trace odp_flow
1106 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1107 AT_CHECK([tail -1 stdout], [0], [dnl
1111 # Test command: ofproto/trace dp_name odp_flow
1112 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1113 AT_CHECK([tail -1 stdout], [0], [dnl
1116 # Test commmand: ofproto/trace br_name br_flow
1117 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1118 AT_CHECK([tail -1 stdout], [0], [dnl
1122 # Delete the inserted flows
1123 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1124 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1126 # This section beflow tests the [-generate] option
1127 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1128 br_flow="arp,metadata=0,in_port=3,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=ff:ff:ff:ff:ff:ff"
1130 # Test command: ofproto/trace odp_flow
1131 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1132 # Check for no MAC learning entry
1133 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1137 # Test command: ofproto/trace br_name br_flow
1138 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1139 # Check for no MAC learning entry
1140 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1144 # Test command: ofproto/trace odp_flow -generate
1145 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1146 # Check for the MAC learning entry
1147 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1149 3 0 50:54:00:00:00:05 ?
1152 # Test command: ofproto/trace dp_name odp_flow -generate
1153 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1154 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1155 -generate], [0], [stdout])
1156 # Check for both MAC learning entries
1157 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1159 3 0 50:54:00:00:00:05 ?
1160 1 0 50:54:00:00:00:06 ?
1163 # Test command: ofproto/trace br_name br_flow -generate
1164 AT_CHECK([ovs-appctl ofproto/trace br0 \
1165 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1166 -generate], [0], [stdout])
1167 # Check for both MAC learning entries.
1168 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1170 3 0 50:54:00:00:00:05 ?
1171 1 0 50:54:00:00:00:06 ?
1172 2 0 50:54:00:00:00:07 ?
1175 # This section beflow tests the [packet] option
1176 # The ovs-tcpundump of packets between port1 and port2
1177 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1178 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1180 # Construct the MAC learning table
1181 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1182 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1183 -generate], [0], [stdout])
1185 # Construct the MAC learning table
1186 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1187 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1188 -generate], [0], [stdout])
1190 # Test command: ofproto/trace odp_flow packet
1191 AT_CHECK([ovs-appctl ofproto/trace \
1192 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1193 AT_CHECK([tail -1 stdout], [0], [dnl
1196 AT_CHECK([head -n 3 stdout], [0], [dnl
1198 Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1199 Flow: skb_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1202 # Test command: ofproto/trace dp_name odp_flow packet
1203 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1204 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1205 AT_CHECK([tail -1 stdout], [0], [dnl
1208 AT_CHECK([head -n 3 stdout], [0], [dnl
1210 Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1211 Flow: skb_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1214 # Test command: ofproto/trace br_name br_flow packet
1215 AT_CHECK([ovs-appctl ofproto/trace br0 \
1216 "in_port=2,skb_priority=2,skb_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1217 AT_CHECK([tail -1 stdout], [0], [dnl
1218 Datapath actions: set(skb_mark(0)),1
1220 AT_CHECK([head -n 2 stdout], [0], [dnl
1221 Packet: arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1222 Flow: skb_mark=0x1,skb_priority=0x2,arp,metadata=0,in_port=2,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
1228 # The second test tests the corner cases
1229 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1231 ADD_OF_PORTS([br0], 1, 2)
1234 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1235 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1237 generate="-generate"
1238 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1240 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1246 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1248 AT_CHECK([tail -2 stderr], [0], [dnl
1249 Cannot find datapath of this name
1250 ovs-appctl: ovs-vswitchd: server returned an error
1253 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1259 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1261 AT_CHECK([tail -2 stderr], [0], [dnl
1262 Cannot find datapath of this name
1263 ovs-appctl: ovs-vswitchd: server returned an error
1266 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1272 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1274 AT_CHECK([tail -2 stderr], [0], [dnl
1275 Cannot find datapath of this name
1276 ovs-appctl: ovs-vswitchd: server returned an error
1279 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1285 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1287 AT_CHECK([tail -2 stderr], [0], [dnl
1288 Cannot find datapath of this name
1289 ovs-appctl: ovs-vswitchd: server returned an error
1292 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1298 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1300 AT_CHECK([tail -2 stderr], [0], [dnl
1302 ovs-appctl: ovs-vswitchd: server returned an error
1305 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1311 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1313 AT_CHECK([tail -2 stderr], [0], [dnl
1314 Must specify bridge name
1315 ovs-appctl: ovs-vswitchd: server returned an error
1318 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1319 AT_CHECK([ovs-appctl ofproto/trace \
1320 ovs-dummy "$odp_flow" garbage_option],
1321 [2], [stdout],[stderr])
1322 AT_CHECK([tail -2 stderr], [0], [dnl
1323 Trailing garbage in packet data
1324 ovs-appctl: ovs-vswitchd: server returned an error
1327 # Test incorrect command: ofproto/trace with 4 arguments
1328 AT_CHECK([ovs-appctl ofproto/trace \
1329 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1330 AT_CHECK([tail -2 stderr], [0], [dnl
1331 "ofproto/trace" command takes at most 3 arguments
1332 ovs-appctl: ovs-vswitchd: server returned an error
1335 # Test incorrect command: ofproto/trace with 0 argument
1336 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1337 AT_CHECK([tail -2 stderr], [0], [dnl
1338 "ofproto/trace" command requires at least 1 arguments
1339 ovs-appctl: ovs-vswitchd: server returned an error
1345 m4_define([OFPROTO_TRACE],
1347 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1348 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1350 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1353 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1356 AT_SETUP([ofproto-dpif - MAC learning])
1357 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1358 ADD_OF_PORTS([br0], 1, 2, 3)
1360 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)'
1362 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1365 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1369 # Check for the MAC learning entry.
1370 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1372 3 0 50:54:00:00:00:05 ?
1375 # Trace a packet arrival destined for the learned MAC.
1376 # (This will also learn a MAC.)
1379 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1383 # Check for both MAC learning entries.
1384 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1386 3 0 50:54:00:00:00:05 ?
1387 1 0 50:54:00:00:00:06 ?
1390 # Trace a packet arrival that updates the first learned MAC entry.
1393 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1397 # Check that the MAC learning entry was updated.
1398 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1400 1 0 50:54:00:00:00:06 ?
1401 2 0 50:54:00:00:00:05 ?
1404 # Add another bridge.
1408 -- set bridge br1 datapath-type=dummy])
1409 ADD_OF_PORTS([br1], 4, 5)
1411 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1414 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1419 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1423 # Check that the MAC learning entries were added.
1424 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1426 4 0 50:54:00:00:00:06 ?
1427 5 0 50:54:00:00:00:07 ?
1430 # Delete port p1 and see that its MAC learning entry disappeared, and
1431 # that the MAC learning entry for the same MAC was also deleted from br1.
1432 AT_CHECK([ovs-vsctl del-port p1])
1433 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1435 2 0 50:54:00:00:00:05 ?
1437 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1439 5 0 50:54:00:00:00:07 ?
1445 AT_SETUP([ofproto-dpif - MAC table overflow])
1447 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1448 ADD_OF_PORTS([br0], 1, 2, 3)
1450 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)'
1452 AT_CHECK([ovs-appctl time/stop])
1454 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1455 for i in 0 1 2 3 4 5 6 7 8 9; do
1458 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1461 ovs-appctl time/warp 1000
1464 # Check for the MAC learning entries.
1465 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1467 3 0 50:54:00:00:00:00
1468 3 0 50:54:00:00:00:01
1469 3 0 50:54:00:00:00:02
1470 3 0 50:54:00:00:00:03
1471 3 0 50:54:00:00:00:04
1472 3 0 50:54:00:00:00:05
1473 3 0 50:54:00:00:00:06
1474 3 0 50:54:00:00:00:07
1475 3 0 50:54:00:00:00:08
1476 3 0 50:54:00:00:00:09
1480 # Trace another ARP packet on another MAC.
1483 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1487 # Check that the new one chased the oldest one out of the table.
1488 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1490 3 0 50:54:00:00:00:01 ?
1491 3 0 50:54:00:00:00:02 ?
1492 3 0 50:54:00:00:00:03 ?
1493 3 0 50:54:00:00:00:04 ?
1494 3 0 50:54:00:00:00:05 ?
1495 3 0 50:54:00:00:00:06 ?
1496 3 0 50:54:00:00:00:07 ?
1497 3 0 50:54:00:00:00:08 ?
1498 3 0 50:54:00:00:00:09 ?
1499 3 0 50:54:00:00:00:10 ?
1505 dnl Test that sFlow samples packets correctly.
1506 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1507 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1509 ON_EXIT([kill `cat test-sflow.pid`])
1510 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1511 AT_CAPTURE_FILE([sflow.log])
1512 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1514 ovs-appctl time/stop
1516 ADD_OF_PORTS([br0], 1, 2)
1518 set Interface br0 options:ifindex=1002 -- \
1519 set Interface p1 options:ifindex=1004 -- \
1520 set Interface p2 options:ifindex=1003 -- \
1521 set Bridge br0 sflow=@sf -- \
1522 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1523 header=128 sampling=1 polling=1
1525 dnl open with ARP packets to seed the bridge-learning. The output
1526 dnl ifIndex numbers should be reported predictably after that.
1527 dnl Since we set sampling=1 we should see all of these packets
1528 dnl reported. Sorting the output by data-source and seqNo makes
1529 dnl it deterministic. Ensuring that we send at least two packets
1530 dnl into each port means we get to check the seq nos are
1531 dnl incrementing correctly.
1533 ovs-appctl netdev-dummy/receive p1 'in_port(2),eth(src=50:54:00:00:00:05,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.2,tip=192.168.0.1,op=1,sha=50:54:00:00:00:05,tha=00:00:00:00:00:00)'
1534 ovs-appctl netdev-dummy/receive p2 'in_port(1),eth(src=50:54:00:00:00:07,dst=FF:FF:FF:FF:FF:FF),eth_type(0x0806),arp(sip=192.168.0.1,tip=192.168.0.2,op=1,sha=50:54:00:00:00:07,tha=00:00:00:00:00:00)'
1535 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)'
1536 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)'
1537 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(0x86dd),ipv6(src=fe80::1,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'
1539 dnl sleep long enough to get more than one counter sample
1540 dnl from each datasource so we can check sequence numbers
1541 for i in `seq 1 30`; do
1542 ovs-appctl time/warp 100
1545 ovs-appctl -t test-sflow exit
1547 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1568 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-05-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-05-C0-A8-00-02-00-00-00-00-00-00-C0-A8-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1588 hdr=FF-FF-FF-FF-FF-FF-50-54-00-00-00-07-08-06-00-01-08-00-06-04-00-01-50-54-00-00-00-07-C0-A8-00-01-00-00-00-00-00-00-C0-A8-00-02-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1608 hdr=50-54-00-00-00-07-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-01-C0-A8-00-02-08-00-F7-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1628 hdr=50-54-00-00-00-05-50-54-00-00-00-07-08-00-45-00-00-1C-00-00-00-00-40-01-F9-8D-C0-A8-00-02-C0-A8-00-01-00-00-FF-FF-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1648 hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
1651 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1665 in_broadcasts=4294967295
1668 in_unknownprotos=4294967295
1671 out_multicasts=4294967295
1672 out_broadcasts=4294967295
1688 in_broadcasts=4294967295
1691 in_unknownprotos=4294967295
1694 out_multicasts=4294967295
1695 out_broadcasts=4294967295
1711 in_broadcasts=4294967295
1714 in_unknownprotos=4294967295
1717 out_multicasts=4294967295
1718 out_broadcasts=4294967295
1734 in_broadcasts=4294967295
1737 in_unknownprotos=4294967295
1740 out_multicasts=4294967295
1741 out_broadcasts=4294967295
1757 in_broadcasts=4294967295
1760 in_unknownprotos=4294967295
1763 out_multicasts=4294967295
1764 out_broadcasts=4294967295
1780 in_broadcasts=4294967295
1783 in_unknownprotos=4294967295
1786 out_multicasts=4294967295
1787 out_broadcasts=4294967295
1796 dnl Test that basic NetFlow reports flow statistics correctly:
1797 dnl - The initial packet of a flow are correctly accounted.
1798 dnl - Later packets within a flow are correctly accounted.
1799 dnl - Flow actions changing (in this case, due to MAC learning)
1800 dnl cause a record to be sent.
1801 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1803 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1804 ADD_OF_PORTS([br0], 1, 2)
1806 ON_EXIT([kill `cat test-netflow.pid`])
1807 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1808 AT_CAPTURE_FILE([netflow.log])
1809 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1812 set Bridge br0 netflow=@nf -- \
1813 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1814 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1816 for delay in 1000 30000; do
1817 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)'
1818 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)'
1820 ovs-appctl time/warp $delay
1825 ovs-appctl -t test-netflow exit
1827 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1829 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1830 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1831 ' netflow.log | sort]], [0],
1833 header: v5, seq 0, engine 2,1
1834 header: v5, seq 1, engine 2,1
1835 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1836 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1837 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1841 dnl Test that basic NetFlow reports active expirations correctly.
1842 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1844 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1845 ADD_OF_PORTS([br0], 1, 2)
1847 ON_EXIT([kill `cat test-netflow.pid`])
1848 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1849 AT_CAPTURE_FILE([netflow.log])
1850 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1853 set Bridge br0 netflow=@nf -- \
1854 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1855 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1857 AT_CHECK([ovs-appctl time/stop])
1859 while test $n -le 60; do
1862 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)'
1863 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)'
1865 ovs-appctl time/warp 1000
1868 ovs-appctl time/warp 10000
1872 ovs-appctl -t test-netflow exit
1874 # Count the number of reported packets:
1875 # - From source to destination before MAC learning kicks in (just one).
1876 # - From source to destination after that.
1877 # - From destination to source.
1885 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1892 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1895 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1898 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1905 eval $counter=\`expr \$$counter + \$pkts\`
1906 n_recs=`expr $n_recs + 1`
1909 # There should be exactly 1 MAC learning packet,
1910 # exactly 59 other packets in that direction,
1911 # and exactly 60 packets in the other direction.
1912 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1915 # There should be 1 expiration for MAC learning,
1916 # at least 5 active and a final expiration in one direction,
1917 # and at least 5 active and a final expiration in the other direction.
1919 AT_CHECK([test $n_recs -ge 13])
1923 AT_SETUP([idle_age and hard_age increase over time])
1926 # get_ages DURATION HARD IDLE
1928 # Fetch the flow duration, hard age, and idle age into the variables
1929 # whose names are given as arguments. Rounds DURATION down to the
1930 # nearest integer. If hard_age doesn't appear in the output, sets
1931 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1934 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1936 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1937 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1938 AS_VAR_COPY([$1], [duration])
1940 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1941 if test X"$hard" = X; then
1944 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1946 AS_VAR_COPY([$2], [hard])
1948 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1949 if test X"$idle" = X; then
1952 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1954 AS_VAR_COPY([$3], [idle])
1957 # Add a flow and get its initial hard and idle age.
1958 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1959 get_ages duration1 hard1 idle1
1961 # Warp time forward by 10 seconds, then modify the flow's actions.
1962 ovs-appctl time/warp 10000
1963 get_ages duration2 hard2 idle2
1964 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1966 # Warp time forward by 10 seconds.
1967 ovs-appctl time/warp 10000
1968 get_ages duration3 hard3 idle3
1970 # Warp time forward 10 more seconds, then pass some packets through the flow,
1971 # then warp forward a few more times because idle times are only updated
1973 ovs-appctl time/warp 10000
1974 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)'
1975 ovs-appctl time/warp 1000
1976 ovs-appctl time/warp 1000
1977 ovs-appctl time/warp 1000
1978 get_ages duration4 hard4 idle4
1980 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1981 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1982 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1984 # Duration should increase steadily over time.
1985 AT_CHECK([test $duration1 -lt $duration2])
1986 AT_CHECK([test $duration2 -lt $duration3])
1987 AT_CHECK([test $duration3 -lt $duration4])
1989 # Hard age should be "none" initially because it's the same as flow_duration,
1990 # then it should increase.
1991 AT_CHECK([test $hard1 = none])
1992 AT_CHECK([test $hard2 = none])
1993 AT_CHECK([test $hard3 != none])
1994 AT_CHECK([test $hard4 != none])
1995 AT_CHECK([test $hard3 -lt $hard4])
1997 # Idle age should increase from 1 to 2 to 3, then decrease.
1998 AT_CHECK([test $idle1 -lt $idle2])
1999 AT_CHECK([test $idle2 -lt $idle3])
2000 AT_CHECK([test $idle3 -gt $idle4])
2002 # Check some invariant relationships.
2003 AT_CHECK([test $duration1 = $idle1])
2004 AT_CHECK([test $duration2 = $idle2])
2005 AT_CHECK([test $duration3 = $idle3])
2006 AT_CHECK([test $idle3 -gt $hard3])
2007 AT_CHECK([test $idle4 -lt $hard4])
2008 AT_CHECK([test $hard4 -lt $duration4])
2013 AT_SETUP([ofproto-dpif - fin_timeout])
2015 AT_DATA([flows.txt], [dnl
2016 in_port=1 actions=output:2
2017 in_port=2 actions=mod_vlan_vid:17,output:1
2019 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2020 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2022 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2024 # Check that a TCP SYN packet does not change the timeout. (Because
2025 # flow stats updates are mainly what implements the fin_timeout
2026 # feature, we warp forward a couple of times to ensure that flow stats
2027 # run before re-checking the flow table.)
2028 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2029 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2032 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2034 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2036 # Check that a TCP FIN packet does change the timeout.
2037 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2038 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2041 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2043 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2048 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2049 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2050 ADD_OF_PORTS([br0], [1], [2])
2051 ADD_OF_PORTS([br1], [3])
2053 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2060 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2061 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2062 ADD_OF_PORTS([br0], [1], [2])
2063 ADD_OF_PORTS([br1], [3])
2065 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2066 dummy@ovs-dummy: hit:0 missed:0
2067 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2068 overall avg: add rate: 0.000/min, del rate: 0.000/min
2070 br0 65534/100: (dummy)
2074 br1 65534/101: (dummy)
2080 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2081 OVS_VSWITCHD_START([add-br br1 -- \
2082 set bridge br1 datapath-type=dummy fail-mode=secure])
2083 ADD_OF_PORTS([br0], [1], [2])
2084 ADD_OF_PORTS([br1], [3])
2086 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)'])
2087 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)'])
2088 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)'])
2090 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2091 in_port(1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0x2),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2092 in_port(2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0x2),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2095 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2096 in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0x2),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2102 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2103 OVS_VSWITCHD_START([add-br br1 -- \
2104 set bridge br1 datapath-type=dummy fail-mode=secure])
2105 ADD_OF_PORTS([br0], [1], [2])
2106 ADD_OF_PORTS([br1], [3])
2108 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)'])
2109 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)'])
2110 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)'])
2112 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2113 in_port(1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0x2),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2114 in_port(2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0x2),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2117 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2118 in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0x2),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2121 AT_CHECK([ovs-appctl dpif/del-flows br0])
2122 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2125 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2126 in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0x2),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2132 AT_SETUP([ofproto-dpif - patch ports])
2133 OVS_VSWITCHD_START([add-br br1 \
2134 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2135 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2136 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2138 ADD_OF_PORTS([br0], [2])
2139 ADD_OF_PORTS([br1], [3])
2141 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2143 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2144 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2146 for i in $(seq 1 10); do
2147 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)'
2150 for i in $(seq 1 5); do
2151 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)'
2154 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2158 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2159 dummy@ovs-dummy: hit:13 missed:2
2160 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2161 overall avg: add rate: 0.000/min, del rate: 0.000/min
2163 br0 65534/100: (dummy)
2165 pbr0 1/none: (patch: peer=pbr1)
2167 br1 65534/101: (dummy)
2169 pbr1 1/none: (patch: peer=pbr0)
2172 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2173 in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0x2),icmp(type=8/0,code=0/0), packets:9, bytes:540, used:0.0s, actions:101,3,2
2175 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2176 in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0x2),icmp(type=8/0,code=0/0), packets:4, bytes:240, used:0.0s, actions:100,2,3
2179 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2180 OFPST_PORT reply (xid=0x4): 1 ports
2181 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2182 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2185 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2186 OFPST_PORT reply (xid=0x4): 1 ports
2187 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2188 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2194 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2195 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2196 ADD_OF_PORTS([br0], 1, 2)
2198 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2199 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2201 for i in $(seq 1 61); do
2202 ovs-appctl netdev-dummy/receive 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=64,frag=no),icmp(type=8,code=0)'
2203 ovs-appctl time/warp 10000
2204 ovs-appctl time/warp 50000
2207 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2210 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2211 dummy@ovs-dummy: hit:0 missed:61
2212 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2213 hourly avg: add rate: 0.641/min, del rate: 0.641/min
2214 overall avg: add rate: 1.000/min, del rate: 1.000/min
2215 br0: hit:0 missed:61
2216 br0 65534/100: (dummy)
2224 AT_SETUP([ofproto-dpif - port duration])
2225 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2226 ADD_OF_PORTS([br0], 1, 2)
2228 ovs-appctl time/warp 10000
2230 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2231 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2233 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2234 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2235 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2237 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2238 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2240 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2241 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2247 dnl ----------------------------------------------------------------------
2248 AT_BANNER([ofproto-dpif -- megaflows])
2250 # Strips out uninteresting parts of megaflow output, as well as parts
2251 # that vary from one run to another (e.g., timing and bond actions).
2252 m4_define([STRIP_XOUT], [[sed '
2253 s/used:[0-9]*\.[0-9]*/used:0.0/
2254 s/Datapath actions:.*/Datapath actions: <del>/
2257 AT_SETUP([ofproto-dpif megaflow - port classification])
2259 ADD_OF_PORTS([br0], [1], [2])
2260 AT_DATA([flows.txt], [dnl
2261 table=0 in_port=1 actions=output(2)
2263 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2264 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2265 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2266 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2267 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2272 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2274 ADD_OF_PORTS([br0], [1], [2])
2275 AT_DATA([flows.txt], [dnl
2276 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2278 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2279 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2280 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2281 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2282 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2283 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2288 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2290 ADD_OF_PORTS([br0], [1], [2])
2291 AT_DATA([flows.txt], [dnl
2292 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2294 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2295 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2296 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2297 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2298 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2299 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2304 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2306 ADD_OF_PORTS([br0], [1], [2])
2307 AT_DATA([flows.txt], [dnl
2308 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2310 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2311 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2312 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2313 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2314 skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2319 AT_SETUP([ofproto-dpif megaflow - normal])
2321 ADD_OF_PORTS([br0], [1], [2])
2322 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2323 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2324 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2325 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2326 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2327 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2332 AT_SETUP([ofproto-dpif megaflow - mpls])
2334 ADD_OF_PORTS([br0], [1], [2])
2335 AT_DATA([flows.txt], [dnl
2336 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2337 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2339 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2340 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
2341 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
2342 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2343 skb_priority=0,mpls,in_port=1,dl_src=50:54:00:00:00:09,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2344 skb_priority=0,mpls,in_port=1,dl_src=50:54:00:00:00:0b,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2349 AT_SETUP([ofproto-dpif megaflow - netflow])
2351 ADD_OF_PORTS([br0], [1], [2])
2353 dnl NetFlow configuration disables wildcarding relevant fields
2354 ON_EXIT([kill `cat test-netflow.pid`])
2355 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2356 AT_CAPTURE_FILE([netflow.log])
2357 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2359 set Bridge br0 netflow=@nf -- \
2360 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2361 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2363 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2364 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2365 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2366 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2367 skb_priority=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2368 skb_priority=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2373 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2375 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2376 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2377 set interface p2 type=dummy ofport_request=2 -- \
2378 set interface p3 type=dummy ofport_request=3])
2379 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2382 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2383 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2384 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2385 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2386 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2387 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2392 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2394 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2395 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2396 set interface p2 type=dummy ofport_request=2 -- \
2397 set interface p3 type=dummy ofport_request=3])
2398 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2401 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2402 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2403 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2404 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2405 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2406 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2411 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2412 # Create bond0 on br0 with interfaces p0 and p1
2413 # and bond1 on br1 with interfaces p2 and p3
2414 # with p0 patched to p2 and p1 patched to p3.
2416 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2417 other-config:lacp-time=fast \
2418 other-config:bond-rebalance-interval=0 -- \
2419 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2420 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2422 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2423 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2424 fail-mode=secure -- \
2425 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2426 other-config:lacp-time=fast \
2427 other-config:bond-rebalance-interval=0 -- \
2428 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2429 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2431 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2433 ADD_OF_PORTS([br0], [7])
2434 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2435 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2436 ovs-appctl time/warp 5000
2437 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),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)'])
2438 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2440 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2441 skb_priority=0,icmp,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2442 skb_priority=0,icmp,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_frag=no,icmp_type=8,icmp_code=0, n_subfacets:1, used:0.0s, Datapath actions: <del>
2447 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2449 ADD_OF_PORTS([br0], [1], [2])
2450 AT_DATA([flows.txt], [dnl
2451 table=0 in_port=1,ip actions=resubmit(90)
2452 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2454 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2455 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2456 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2457 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2458 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2459 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2464 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2466 ADD_OF_PORTS([br0], [1], [2])
2467 AT_DATA([flows.txt], [dnl
2468 table=0 in_port=1,ip actions=resubmit(,1)
2469 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2471 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2472 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2473 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=
2474 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2475 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2476 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2477 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2482 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2484 ADD_OF_PORTS([br0], [1], [2])
2485 AT_DATA([flows.txt], [dnl
2486 table=0 in_port=1,ip actions=goto_table(1)
2487 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2489 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2490 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2491 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2492 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2493 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2494 skb_priority=0,ip,in_port=1,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2499 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2501 ADD_OF_PORTS([br0], [1], [2], [3])
2503 set Bridge br0 mirrors=@m --\
2504 --id=@p3 get Port p3 --\
2505 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2507 AT_DATA([flows.txt], [dnl
2508 in_port=1 actions=output:2
2510 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2511 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2512 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2513 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2514 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2519 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2521 ADD_OF_PORTS([br0], [1], [2], [3])
2523 set Bridge br0 mirrors=@m --\
2524 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2525 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2527 AT_DATA([flows.txt], [dnl
2528 in_port=1 actions=output:2
2530 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2531 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=11,pcp=7),encap(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))'])
2532 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2533 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2534 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2535 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2540 AT_SETUP([ofproto-dpif megaflow - move action])
2542 ADD_OF_PORTS([br0], [1], [2])
2543 AT_DATA([flows.txt], [dnl
2544 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2545 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2546 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2548 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2549 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2550 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2551 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2552 skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2553 skb_priority=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2558 AT_SETUP([ofproto-dpif megaflow - push action])
2560 ADD_OF_PORTS([br0], [1], [2])
2561 AT_DATA([flows.txt], [dnl
2562 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2564 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2565 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2566 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2567 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2568 skb_priority=0,ip,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2569 skb_priority=0,ip,in_port=1,nw_src=10.0.0.4,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2574 AT_SETUP([ofproto-dpif megaflow - learning])
2576 ADD_OF_PORTS([br0], [1], [2])
2577 AT_DATA([flows.txt], [dnl
2578 table=0 in_port=1 actions=load:2->NXM_NX_REG0[[0..15]],learn(table=1,priority=65535,NXM_OF_ETH_SRC[[]],NXM_OF_VLAN_TCI[[0..11]],output:NXM_NX_REG0[[0..15]]),output:2
2580 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2581 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2582 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2583 dnl The original flow is missing due to a revalidation.
2584 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2585 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:09,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2586 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:0b,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2591 AT_SETUP([ofproto-dpif megaflow - tunnels])
2593 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2594 ofport_request=1 -- \
2595 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2596 ofport_request=2 options:key=flow -- \
2597 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2598 ofport_request=3 -- \
2599 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2600 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2601 AT_DATA([flows.txt], [dnl
2602 in_port=1,actions=output(2)
2603 in_port=3,actions=output(4)
2605 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2606 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2607 dnl will cause the packet to be dropped.
2608 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
2609 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
2610 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=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
2611 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
2612 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2613 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2614 skb_priority=0,ip,in_port=3,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2615 skb_priority=0,ip,in_port=3,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2620 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2622 ADD_OF_PORTS([br0], [1], [2])
2623 AT_DATA([flows.txt], [dnl
2624 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2626 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2627 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),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)'])
2628 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2629 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2630 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2631 skb_priority=0,icmp,in_port=1,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_ecn=0,nw_ttl=64, n_subfacets:1, used:0.0s, Datapath actions: <del>