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
255 AT_CAPTURE_FILE([ofctl_monitor.log])
256 AT_DATA([flows.txt], [dnl
257 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
258 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
259 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
261 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
262 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)
263 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)
264 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
265 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)
266 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
267 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
268 cookie=0xa dl_src=40:44:44:44:44:41 actions=push_vlan:0x8100,mod_vlan_vid:99,mod_vlan_pcp:1,controller
269 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
270 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
271 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
272 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
273 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
274 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
275 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
276 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
277 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
278 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
280 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
283 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
286 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([ovs-appctl -t ovs-ofctl exit])
290 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
291 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
292 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
294 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
295 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
297 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
298 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
301 dnl Singleton controller action.
302 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
305 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)'
308 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
309 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
310 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
311 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
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
320 dnl Modified controller action.
321 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
324 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)'
327 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
328 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
329 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
330 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
332 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
333 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
335 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
336 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 dnl Modified VLAN controller action.
340 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
343 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)'
346 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
347 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
348 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
349 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
351 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
352 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
354 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
355 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
358 dnl Modified MPLS controller action.
359 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
362 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)'
365 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
366 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
367 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
368 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
370 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
371 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
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
377 dnl Modified MPLS controller action.
378 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
380 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)
383 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)'
386 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
387 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
388 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
389 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
391 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
392 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
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
398 dnl Modified MPLS controller action.
399 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
402 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))'
405 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
406 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
407 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
408 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
410 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
411 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
413 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
414 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 dnl Modified MPLS controller action.
418 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
421 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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)'
424 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
425 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
426 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
427 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
429 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
430 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
432 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
433 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
436 dnl Modified MPLS controller action.
437 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
440 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)'
443 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
444 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
445 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
446 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
448 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
449 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
451 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
452 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
455 dnl Modified MPLS controller action.
456 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
459 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)'
462 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
463 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
464 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
465 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
467 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
468 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
470 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
471 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
474 dnl Modified MPLS controller action.
475 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
478 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)'
481 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
482 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
483 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
484 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
486 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
487 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
489 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
490 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
493 dnl Modified MPLS actions.
494 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
497 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)'
500 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
501 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
502 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
503 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
505 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
506 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
508 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
509 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
512 dnl Modified MPLS ipv6 controller action.
513 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
516 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)'
519 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
520 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
521 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
522 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
524 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
525 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
527 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
528 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
532 dnl Modified MPLS pop action.
533 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
534 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)
535 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
537 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
540 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'
543 # 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)'
546 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
547 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
548 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
549 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
551 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
552 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
554 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
555 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
559 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
562 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)'
565 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
566 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
567 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
568 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
570 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
571 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
573 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)
574 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
576 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)
577 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
579 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)
580 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
582 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)
583 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
585 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)
586 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
588 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)
589 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
591 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)
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=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
596 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
599 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'
602 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
603 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
604 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
605 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
607 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
608 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
610 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)
611 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
613 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)
614 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
616 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)
617 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
619 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)
620 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
622 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)
623 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
625 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)
626 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
628 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)
629 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
632 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
633 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
634 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
635 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
636 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)
637 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)
638 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)
639 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)
640 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)
641 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
642 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
643 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
644 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
645 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
646 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
647 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
648 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
649 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
650 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
651 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
652 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
653 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
654 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
661 AT_SETUP([ofproto-dpif - VLAN handling])
663 [set Bridge br0 fail-mode=standalone -- \
664 add-port br0 p1 trunks=10,12 -- \
665 add-port br0 p2 tag=10 -- \
666 add-port br0 p3 tag=12 \
667 other-config:priority-tags=true -- \
668 add-port br0 p4 tag=12 -- \
669 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
670 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
671 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
672 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
673 other-config:priority-tags=true -- \
674 set Interface p1 type=dummy -- \
675 set Interface p2 type=dummy -- \
676 set Interface p3 type=dummy -- \
677 set Interface p4 type=dummy -- \
678 set Interface p5 type=dummy -- \
679 set Interface p6 type=dummy -- \
680 set Interface p7 type=dummy -- \
681 set Interface p8 type=dummy --])
683 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
684 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
690 "100 10 0 1,5,6,7,8,pop_vlan,2" \
691 "100 10 1 1,5,6,7,8,pop_vlan,2" \
694 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
695 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
699 "1 10 0 5,6,7,8,100,pop_vlan,2" \
700 "1 10 1 5,6,7,8,100,pop_vlan,2" \
703 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
704 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
705 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
706 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
707 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
714 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
715 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
716 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
723 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
724 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
725 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
732 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
733 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
734 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
735 "5 10 0 1,6,7,8,100,pop_vlan,2" \
736 "5 10 1 1,6,7,8,100,pop_vlan,2" \
739 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
740 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
741 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
742 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
743 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
744 "6 10 0 1,5,7,8,100,pop_vlan,2" \
745 "6 10 1 1,5,7,8,100,pop_vlan,2" \
748 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
749 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
750 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
751 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
752 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
753 "7 10 0 1,5,6,8,100,pop_vlan,2" \
754 "7 10 1 1,5,6,8,100,pop_vlan,2" \
757 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
758 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
759 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
760 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
761 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
762 "8 10 0 1,5,6,7,100,pop_vlan,2" \
763 "8 10 1 1,5,6,7,100,pop_vlan,2" \
766 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
767 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
775 if test $vlan = none; then
776 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
778 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))"
781 echo "----------------------------------------------------------------------"
782 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
784 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
785 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
787 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
789 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
795 AT_SETUP([ofproto-dpif - fragment handling])
797 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
798 AT_DATA([flows.txt], [dnl
799 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
800 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
801 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
802 priority=50 tcp ip_frag=no actions=output:4
803 priority=50 tcp ip_frag=first actions=output:5
804 priority=50 tcp ip_frag=later actions=output:6
806 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
808 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"
809 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
810 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
811 later_flow="$base_flow,frag=later)"
813 # mode no first later
825 AT_CHECK([ovs-ofctl set-frags br0 $mode])
826 for type in no first later; do
827 eval flow=\$${type}_flow exp_output=\$$type
828 printf "\n%s\n" "----$mode $type-----"
829 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
831 if test $mode = drop && test $type != no; then
832 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
834 echo "Datapath actions: $exp_output" >> expout
835 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
841 AT_SETUP([ofproto-dpif - exit])
843 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
844 AT_DATA([flows.txt], [dnl
845 in_port=1 actions=output:10,exit,output:11
846 in_port=2 actions=output:12,resubmit:1,output:12
847 in_port=3 actions=output:13,resubmit:2,output:14
849 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
850 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])
851 AT_CHECK([tail -1 stdout], [0],
852 [Datapath actions: 10
854 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])
855 AT_CHECK([tail -1 stdout], [0],
856 [Datapath actions: 12,10
858 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])
859 AT_CHECK([tail -1 stdout], [0],
860 [Datapath actions: 13,12,10
866 AT_SETUP([ofproto-dpif - mirroring, select_all])
868 ADD_OF_PORTS([br0], 1, 2, 3)
870 set Bridge br0 mirrors=@m --\
871 --id=@p3 get Port p3 --\
872 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
874 AT_DATA([flows.txt], [dnl
875 in_port=1 actions=output:2
876 in_port=2 actions=output:1
878 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
880 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)"
881 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
882 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
883 [Datapath actions: 2,3
886 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)"
887 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
888 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
889 [Datapath actions: 1,3
896 AT_SETUP([ofproto-dpif - mirroring, select_src])
898 ADD_OF_PORTS([br0], 1, 2, 3)
900 set Bridge br0 mirrors=@m --\
901 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
902 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
904 AT_DATA([flows.txt], [dnl
905 in_port=1 actions=output:2
906 in_port=2 actions=output:1
908 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
910 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
911 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
912 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
913 [Datapath actions: 2,3
916 flow="in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
917 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
918 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
924 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
926 ADD_OF_PORTS([br0], 1, 2)
928 set Bridge br0 mirrors=@m --\
929 --id=@p2 get Port p2 --\
930 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
932 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
934 # "in_port" defaults to OFPP_NONE if it's not specified.
935 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"
936 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
937 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
938 [Datapath actions: 1,2
945 AT_SETUP([ofproto-dpif - mirroring, select_dst])
947 ADD_OF_PORTS([br0], 1, 2, 3)
949 set Bridge br0 mirrors=@m --\
950 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
951 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
953 AT_DATA([flows.txt], [dnl
954 in_port=1 actions=output:2
955 in_port=2 actions=output:1
957 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
959 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)"
960 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
961 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
962 [Datapath actions: 2,3
965 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)"
966 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
967 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
975 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
977 ADD_OF_PORTS([br0], 1, 2, 3)
979 set Bridge br0 mirrors=@m --\
980 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
981 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
983 AT_DATA([flows.txt], [dnl
984 in_port=1, actions=output:2
986 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
988 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)"
989 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
990 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
994 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))"
995 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
996 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1000 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))"
1001 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1002 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1003 [Datapath actions: 2,3
1010 AT_SETUP([ofproto-dpif - mirroring, output_port])
1012 ADD_OF_PORTS([br0], 1, 2, 3)
1014 set Bridge br0 mirrors=@m --\
1015 --id=@p3 get Port p3 --\
1016 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
1018 AT_DATA([flows.txt], [dnl
1019 in_port=1 actions=mod_vlan_vid:17,output:2
1020 in_port=2 actions=output:1
1022 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1024 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)"
1025 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1026 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1027 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1030 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)"
1031 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1032 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1033 [Datapath actions: 1,3
1039 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1041 ADD_OF_PORTS([br0], 1, 2)
1043 set Bridge br0 mirrors=@m --\
1044 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1046 AT_DATA([flows.txt], [dnl
1047 in_port=1 actions=output:2
1048 in_port=2 actions=mod_vlan_vid:17,output:1
1050 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1052 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)"
1053 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1054 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1056 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1057 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1059 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1061 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)"
1062 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1063 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1065 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1066 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1068 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1073 # Two testcases below are for the ofproto/trace command
1074 # The first one tests all correct syntax:
1075 # ofproto/trace [dp_name] odp_flow [-generate|packet]
1076 # ofproto/trace br_name br_flow [-generate|packet]
1077 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
1078 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1079 ADD_OF_PORTS([br0], 1, 2, 3)
1081 AT_DATA([flows.txt], [dnl
1082 in_port=1 actions=output:2
1083 in_port=2 actions=output:1
1085 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1087 odp_flow="in_port(1)"
1089 # Test command: ofproto/trace odp_flow
1090 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1091 AT_CHECK([tail -1 stdout], [0], [dnl
1095 # Test command: ofproto/trace dp_name odp_flow
1096 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
1097 AT_CHECK([tail -1 stdout], [0], [dnl
1100 # Test commmand: ofproto/trace br_name br_flow
1101 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1102 AT_CHECK([tail -1 stdout], [0], [dnl
1106 # Delete the inserted flows
1107 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
1108 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
1110 # This section beflow tests the [-generate] option
1111 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
1112 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"
1114 # Test command: ofproto/trace odp_flow
1115 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
1116 # Check for no MAC learning entry
1117 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1121 # Test command: ofproto/trace br_name br_flow
1122 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
1123 # Check for no MAC learning entry
1124 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1128 # Test command: ofproto/trace odp_flow -generate
1129 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
1130 # Check for the MAC learning entry
1131 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1133 3 0 50:54:00:00:00:05 ?
1136 # Test command: ofproto/trace dp_name odp_flow -generate
1137 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1138 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
1139 -generate], [0], [stdout])
1140 # Check for both MAC learning entries
1141 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1143 3 0 50:54:00:00:00:05 ?
1144 1 0 50:54:00:00:00:06 ?
1147 # Test command: ofproto/trace br_name br_flow -generate
1148 AT_CHECK([ovs-appctl ofproto/trace br0 \
1149 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
1150 -generate], [0], [stdout])
1151 # Check for both MAC learning entries.
1152 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1154 3 0 50:54:00:00:00:05 ?
1155 1 0 50:54:00:00:00:06 ?
1156 2 0 50:54:00:00:00:07 ?
1159 # This section beflow tests the [packet] option
1160 # The ovs-tcpundump of packets between port1 and port2
1161 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1162 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
1164 # Construct the MAC learning table
1165 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1166 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
1167 -generate], [0], [stdout])
1169 # Construct the MAC learning table
1170 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1171 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
1172 -generate], [0], [stdout])
1174 # Test command: ofproto/trace odp_flow packet
1175 AT_CHECK([ovs-appctl ofproto/trace \
1176 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1177 AT_CHECK([tail -1 stdout], [0], [dnl
1180 AT_CHECK([head -n 3 stdout], [0], [dnl
1182 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
1183 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
1186 # Test command: ofproto/trace dp_name odp_flow packet
1187 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
1188 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
1189 AT_CHECK([tail -1 stdout], [0], [dnl
1192 AT_CHECK([head -n 3 stdout], [0], [dnl
1194 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
1195 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
1198 # Test command: ofproto/trace br_name br_flow packet
1199 AT_CHECK([ovs-appctl ofproto/trace br0 \
1200 "in_port=2,skb_priority=2,skb_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
1201 AT_CHECK([tail -1 stdout], [0], [dnl
1202 Datapath actions: set(skb_mark(0)),1
1204 AT_CHECK([head -n 2 stdout], [0], [dnl
1205 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
1206 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
1212 # The second test tests the corner cases
1213 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
1215 ADD_OF_PORTS([br0], 1, 2)
1218 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
1219 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
1221 generate="-generate"
1222 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
1224 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
1230 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
1232 AT_CHECK([tail -2 stderr], [0], [dnl
1233 Cannot find datapath of this name
1234 ovs-appctl: ovs-vswitchd: server returned an error
1237 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
1243 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
1245 AT_CHECK([tail -2 stderr], [0], [dnl
1246 Cannot find datapath of this name
1247 ovs-appctl: ovs-vswitchd: server returned an error
1250 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
1256 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
1258 AT_CHECK([tail -2 stderr], [0], [dnl
1259 Cannot find datapath of this name
1260 ovs-appctl: ovs-vswitchd: server returned an error
1263 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
1269 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
1271 AT_CHECK([tail -2 stderr], [0], [dnl
1272 Cannot find datapath of this name
1273 ovs-appctl: ovs-vswitchd: server returned an error
1276 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
1282 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
1284 AT_CHECK([tail -2 stderr], [0], [dnl
1286 ovs-appctl: ovs-vswitchd: server returned an error
1289 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
1295 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
1297 AT_CHECK([tail -2 stderr], [0], [dnl
1298 Must specify bridge name
1299 ovs-appctl: ovs-vswitchd: server returned an error
1302 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
1303 AT_CHECK([ovs-appctl ofproto/trace \
1304 ovs-dummy "$odp_flow" garbage_option],
1305 [2], [stdout],[stderr])
1306 AT_CHECK([tail -2 stderr], [0], [dnl
1307 Trailing garbage in packet data
1308 ovs-appctl: ovs-vswitchd: server returned an error
1311 # Test incorrect command: ofproto/trace with 4 arguments
1312 AT_CHECK([ovs-appctl ofproto/trace \
1313 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
1314 AT_CHECK([tail -2 stderr], [0], [dnl
1315 "ofproto/trace" command takes at most 3 arguments
1316 ovs-appctl: ovs-vswitchd: server returned an error
1319 # Test incorrect command: ofproto/trace with 0 argument
1320 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
1321 AT_CHECK([tail -2 stderr], [0], [dnl
1322 "ofproto/trace" command requires at least 1 arguments
1323 ovs-appctl: ovs-vswitchd: server returned an error
1329 m4_define([OFPROTO_TRACE],
1331 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1332 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1334 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1337 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1340 AT_SETUP([ofproto-dpif - MAC learning])
1341 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1342 ADD_OF_PORTS([br0], 1, 2, 3)
1344 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)'
1346 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1349 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1353 # Check for the MAC learning entry.
1354 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1356 3 0 50:54:00:00:00:05 ?
1359 # Trace a packet arrival destined for the learned MAC.
1360 # (This will also learn a MAC.)
1363 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1367 # Check for both MAC learning entries.
1368 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1370 3 0 50:54:00:00:00:05 ?
1371 1 0 50:54:00:00:00:06 ?
1374 # Trace a packet arrival that updates the first learned MAC entry.
1377 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1381 # Check that the MAC learning entry was updated.
1382 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1384 1 0 50:54:00:00:00:06 ?
1385 2 0 50:54:00:00:00:05 ?
1388 # Add another bridge.
1392 -- set bridge br1 datapath-type=dummy])
1393 ADD_OF_PORTS([br1], 4, 5)
1395 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1398 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1403 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1407 # Check that the MAC learning entries were added.
1408 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1410 4 0 50:54:00:00:00:06 ?
1411 5 0 50:54:00:00:00:07 ?
1414 # Delete port p1 and see that its MAC learning entry disappeared, and
1415 # that the MAC learning entry for the same MAC was also deleted from br1.
1416 AT_CHECK([ovs-vsctl del-port p1])
1417 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1419 2 0 50:54:00:00:00:05 ?
1421 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1423 5 0 50:54:00:00:00:07 ?
1429 AT_SETUP([ofproto-dpif - MAC table overflow])
1431 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
1432 ADD_OF_PORTS([br0], 1, 2, 3)
1434 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)'
1436 AT_CHECK([ovs-appctl time/stop])
1438 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1439 for i in 0 1 2 3 4 5 6 7 8 9; do
1442 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1445 ovs-appctl time/warp 1000
1448 # Check for the MAC learning entries.
1449 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1451 3 0 50:54:00:00:00:00
1452 3 0 50:54:00:00:00:01
1453 3 0 50:54:00:00:00:02
1454 3 0 50:54:00:00:00:03
1455 3 0 50:54:00:00:00:04
1456 3 0 50:54:00:00:00:05
1457 3 0 50:54:00:00:00:06
1458 3 0 50:54:00:00:00:07
1459 3 0 50:54:00:00:00:08
1460 3 0 50:54:00:00:00:09
1464 # Trace another ARP packet on another MAC.
1467 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1471 # Check that the new one chased the oldest one out of the table.
1472 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1474 3 0 50:54:00:00:00:01 ?
1475 3 0 50:54:00:00:00:02 ?
1476 3 0 50:54:00:00:00:03 ?
1477 3 0 50:54:00:00:00:04 ?
1478 3 0 50:54:00:00:00:05 ?
1479 3 0 50:54:00:00:00:06 ?
1480 3 0 50:54:00:00:00:07 ?
1481 3 0 50:54:00:00:00:08 ?
1482 3 0 50:54:00:00:00:09 ?
1483 3 0 50:54:00:00:00:10 ?
1489 dnl Test that sFlow samples packets correctly.
1490 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1491 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1493 ON_EXIT([kill `cat test-sflow.pid`])
1494 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1495 AT_CAPTURE_FILE([sflow.log])
1496 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1498 ovs-appctl time/stop
1500 ADD_OF_PORTS([br0], 1, 2)
1502 set Interface br0 options:ifindex=1002 -- \
1503 set Interface p1 options:ifindex=1004 -- \
1504 set Interface p2 options:ifindex=1003 -- \
1505 set Bridge br0 sflow=@sf -- \
1506 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1507 header=128 sampling=1 polling=1
1509 dnl open with ARP packets to seed the bridge-learning. The output
1510 dnl ifIndex numbers should be reported predictably after that.
1511 dnl Since we set sampling=1 we should see all of these packets
1512 dnl reported. Sorting the output by data-source and seqNo makes
1513 dnl it deterministic. Ensuring that we send at least two packets
1514 dnl into each port means we get to check the seq nos are
1515 dnl incrementing correctly.
1517 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)'
1518 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)'
1519 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)'
1520 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)'
1521 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)'
1523 dnl sleep long enough to get more than one counter sample
1524 dnl from each datasource so we can check sequence numbers
1525 for i in `seq 1 30`; do
1526 ovs-appctl time/warp 100
1529 ovs-appctl -t test-sflow exit
1531 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1552 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
1572 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
1592 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
1612 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
1632 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
1635 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1649 in_broadcasts=4294967295
1652 in_unknownprotos=4294967295
1655 out_multicasts=4294967295
1656 out_broadcasts=4294967295
1672 in_broadcasts=4294967295
1675 in_unknownprotos=4294967295
1678 out_multicasts=4294967295
1679 out_broadcasts=4294967295
1695 in_broadcasts=4294967295
1698 in_unknownprotos=4294967295
1701 out_multicasts=4294967295
1702 out_broadcasts=4294967295
1718 in_broadcasts=4294967295
1721 in_unknownprotos=4294967295
1724 out_multicasts=4294967295
1725 out_broadcasts=4294967295
1741 in_broadcasts=4294967295
1744 in_unknownprotos=4294967295
1747 out_multicasts=4294967295
1748 out_broadcasts=4294967295
1764 in_broadcasts=4294967295
1767 in_unknownprotos=4294967295
1770 out_multicasts=4294967295
1771 out_broadcasts=4294967295
1780 dnl Test that basic NetFlow reports flow statistics correctly:
1781 dnl - The initial packet of a flow are correctly accounted.
1782 dnl - Later packets within a flow are correctly accounted.
1783 dnl - Flow actions changing (in this case, due to MAC learning)
1784 dnl cause a record to be sent.
1785 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1787 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1788 ADD_OF_PORTS([br0], 1, 2)
1790 ON_EXIT([kill `cat test-netflow.pid`])
1791 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1792 AT_CAPTURE_FILE([netflow.log])
1793 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1796 set Bridge br0 netflow=@nf -- \
1797 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1798 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1800 for delay in 1000 30000; do
1801 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)'
1802 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)'
1804 ovs-appctl time/warp $delay
1809 ovs-appctl -t test-netflow exit
1811 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1813 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1814 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1815 ' netflow.log | sort]], [0],
1817 header: v5, seq 0, engine 2,1
1818 header: v5, seq 1, engine 2,1
1819 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1820 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1821 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1825 dnl Test that basic NetFlow reports active expirations correctly.
1826 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1828 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1829 ADD_OF_PORTS([br0], 1, 2)
1831 ON_EXIT([kill `cat test-netflow.pid`])
1832 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1833 AT_CAPTURE_FILE([netflow.log])
1834 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1837 set Bridge br0 netflow=@nf -- \
1838 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1839 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1841 AT_CHECK([ovs-appctl time/stop])
1843 while test $n -le 60; do
1846 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)'
1847 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)'
1849 ovs-appctl time/warp 1000
1852 ovs-appctl time/warp 10000
1856 ovs-appctl -t test-netflow exit
1858 # Count the number of reported packets:
1859 # - From source to destination before MAC learning kicks in (just one).
1860 # - From source to destination after that.
1861 # - From destination to source.
1869 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1876 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1879 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1882 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1889 eval $counter=\`expr \$$counter + \$pkts\`
1890 n_recs=`expr $n_recs + 1`
1893 # There should be exactly 1 MAC learning packet,
1894 # exactly 59 other packets in that direction,
1895 # and exactly 60 packets in the other direction.
1896 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1899 # There should be 1 expiration for MAC learning,
1900 # at least 5 active and a final expiration in one direction,
1901 # and at least 5 active and a final expiration in the other direction.
1903 AT_CHECK([test $n_recs -ge 13])
1907 AT_SETUP([idle_age and hard_age increase over time])
1910 # get_ages DURATION HARD IDLE
1912 # Fetch the flow duration, hard age, and idle age into the variables
1913 # whose names are given as arguments. Rounds DURATION down to the
1914 # nearest integer. If hard_age doesn't appear in the output, sets
1915 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1918 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1920 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1921 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1922 AS_VAR_COPY([$1], [duration])
1924 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1925 if test X"$hard" = X; then
1928 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1930 AS_VAR_COPY([$2], [hard])
1932 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1933 if test X"$idle" = X; then
1936 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1938 AS_VAR_COPY([$3], [idle])
1941 # Add a flow and get its initial hard and idle age.
1942 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1943 get_ages duration1 hard1 idle1
1945 # Warp time forward by 10 seconds, then modify the flow's actions.
1946 ovs-appctl time/warp 10000
1947 get_ages duration2 hard2 idle2
1948 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1950 # Warp time forward by 10 seconds.
1951 ovs-appctl time/warp 10000
1952 get_ages duration3 hard3 idle3
1954 # Warp time forward 10 more seconds, then pass some packets through the flow,
1955 # then warp forward a few more times because idle times are only updated
1957 ovs-appctl time/warp 10000
1958 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)'
1959 ovs-appctl time/warp 1000
1960 ovs-appctl time/warp 1000
1961 ovs-appctl time/warp 1000
1962 get_ages duration4 hard4 idle4
1964 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1965 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1966 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1968 # Duration should increase steadily over time.
1969 AT_CHECK([test $duration1 -lt $duration2])
1970 AT_CHECK([test $duration2 -lt $duration3])
1971 AT_CHECK([test $duration3 -lt $duration4])
1973 # Hard age should be "none" initially because it's the same as flow_duration,
1974 # then it should increase.
1975 AT_CHECK([test $hard1 = none])
1976 AT_CHECK([test $hard2 = none])
1977 AT_CHECK([test $hard3 != none])
1978 AT_CHECK([test $hard4 != none])
1979 AT_CHECK([test $hard3 -lt $hard4])
1981 # Idle age should increase from 1 to 2 to 3, then decrease.
1982 AT_CHECK([test $idle1 -lt $idle2])
1983 AT_CHECK([test $idle2 -lt $idle3])
1984 AT_CHECK([test $idle3 -gt $idle4])
1986 # Check some invariant relationships.
1987 AT_CHECK([test $duration1 = $idle1])
1988 AT_CHECK([test $duration2 = $idle2])
1989 AT_CHECK([test $duration3 = $idle3])
1990 AT_CHECK([test $idle3 -gt $hard3])
1991 AT_CHECK([test $idle4 -lt $hard4])
1992 AT_CHECK([test $hard4 -lt $duration4])
1997 AT_SETUP([ofproto-dpif - fin_timeout])
1999 AT_DATA([flows.txt], [dnl
2000 in_port=1 actions=output:2
2001 in_port=2 actions=mod_vlan_vid:17,output:1
2003 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
2004 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2006 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2008 # Check that a TCP SYN packet does not change the timeout. (Because
2009 # flow stats updates are mainly what implements the fin_timeout
2010 # feature, we warp forward a couple of times to ensure that flow stats
2011 # run before re-checking the flow table.)
2012 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
2013 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2016 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2018 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
2020 # Check that a TCP FIN packet does change the timeout.
2021 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
2022 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2025 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
2027 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
2032 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
2033 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2034 ADD_OF_PORTS([br0], [1], [2])
2035 ADD_OF_PORTS([br1], [3])
2037 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
2044 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
2045 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
2046 ADD_OF_PORTS([br0], [1], [2])
2047 ADD_OF_PORTS([br1], [3])
2049 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2050 dummy@ovs-dummy: hit:0 missed:0
2051 flows: cur: 0, avg: 0, max: 0, life span: 0ms
2052 overall avg: add rate: 0.000/min, del rate: 0.000/min
2054 br0 65534/100: (dummy)
2058 br1 65534/101: (dummy)
2064 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
2065 OVS_VSWITCHD_START([add-br br1 -- \
2066 set bridge br1 datapath-type=dummy fail-mode=secure])
2067 ADD_OF_PORTS([br0], [1], [2])
2068 ADD_OF_PORTS([br1], [3])
2070 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)'])
2071 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)'])
2072 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)'])
2074 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2075 in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2076 in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2079 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2080 in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2086 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
2087 OVS_VSWITCHD_START([add-br br1 -- \
2088 set bridge br1 datapath-type=dummy fail-mode=secure])
2089 ADD_OF_PORTS([br0], [1], [2])
2090 ADD_OF_PORTS([br1], [3])
2092 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)'])
2093 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)'])
2094 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)'])
2096 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2097 in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2098 in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2101 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2102 in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2105 AT_CHECK([ovs-appctl dpif/del-flows br0])
2106 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
2109 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
2110 in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
2116 AT_SETUP([ofproto-dpif - patch ports])
2117 OVS_VSWITCHD_START([add-br br1 \
2118 -- set bridge br1 datapath-type=dummy fail-mode=secure \
2119 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
2120 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
2122 ADD_OF_PORTS([br0], [2])
2123 ADD_OF_PORTS([br1], [3])
2125 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2127 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2128 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
2130 for i in $(seq 1 10); do
2131 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)'
2134 for i in $(seq 1 5); do
2135 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)'
2138 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
2142 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
2143 dummy@ovs-dummy: hit:13 missed:2
2144 flows: cur: 2, avg: 1, max: 2, life span: 1250ms
2145 overall avg: add rate: 0.000/min, del rate: 0.000/min
2147 br0 65534/100: (dummy)
2149 pbr0 1/none: (patch: peer=pbr1)
2151 br1 65534/101: (dummy)
2153 pbr1 1/none: (patch: peer=pbr0)
2156 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
2157 in_port(100),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:9, bytes:540, used:0.0s, actions:101,3,2
2159 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
2160 in_port(101),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:4, bytes:240, used:0.0s, actions:100,2,3
2163 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
2164 OFPST_PORT reply (xid=0x4): 1 ports
2165 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
2166 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
2169 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
2170 OFPST_PORT reply (xid=0x4): 1 ports
2171 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
2172 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
2178 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
2179 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
2180 ADD_OF_PORTS([br0], 1, 2)
2182 AT_CHECK([ovs-appctl time/stop]) dnl Make life span averages consistent.
2183 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
2185 for i in $(seq 1 61); do
2186 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)'
2187 ovs-appctl time/warp 10000
2188 ovs-appctl time/warp 50000
2191 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
2194 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
2195 dummy@ovs-dummy: hit:0 missed:61
2196 flows: cur: 0, avg: 0, max: 1, life span: 1666ms
2197 hourly avg: add rate: 0.641/min, del rate: 0.641/min
2198 overall avg: add rate: 1.000/min, del rate: 1.000/min
2199 br0: hit:0 missed:61
2200 br0 65534/100: (dummy)
2208 AT_SETUP([ofproto-dpif - port duration])
2209 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
2210 ADD_OF_PORTS([br0], 1, 2)
2212 ovs-appctl time/warp 10000
2214 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
2215 AT_CHECK([sed 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/' stdout], [0],
2217 OFPST_PORT reply (OF1.3) (xid=0x2): 3 ports
2218 port 1: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2219 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2221 port 2: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2222 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2224 port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
2225 tx pkts=0, bytes=0, drop=0, errs=0, coll=0
2231 dnl ----------------------------------------------------------------------
2232 AT_BANNER([ofproto-dpif -- megaflows])
2234 # Strips out uninteresting parts of megaflow output, as well as parts
2235 # that vary from one run to another (e.g., timing and bond actions).
2236 m4_define([STRIP_XOUT], [[sed '
2237 s/used:[0-9]*\.[0-9]*/used:0.0/
2238 s/Datapath actions:.*/Datapath actions: <del>/
2241 AT_SETUP([ofproto-dpif megaflow - port classification])
2243 ADD_OF_PORTS([br0], [1], [2])
2244 AT_DATA([flows.txt], [dnl
2245 table=0 in_port=1 actions=output(2)
2247 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2248 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)'])
2249 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)'])
2250 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2251 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2256 AT_SETUP([ofproto-dpif megaflow - L2 classification])
2258 ADD_OF_PORTS([br0], [1], [2])
2259 AT_DATA([flows.txt], [dnl
2260 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
2262 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2263 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)'])
2264 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)'])
2265 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2266 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>
2267 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>
2272 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2274 ADD_OF_PORTS([br0], [1], [2])
2275 AT_DATA([flows.txt], [dnl
2276 table=0 in_port=1,icmp,nw_src=10.0.0.4 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,icmp,in_port=1,nw_src=10.0.0.2,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2283 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>
2288 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2290 ADD_OF_PORTS([br0], [1], [2])
2291 AT_DATA([flows.txt], [dnl
2292 table=0 in_port=1,icmp,icmp_type=8 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_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2303 AT_SETUP([ofproto-dpif megaflow - normal])
2305 ADD_OF_PORTS([br0], [1], [2])
2306 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2307 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)'])
2308 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)'])
2309 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2310 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>
2311 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>
2316 AT_SETUP([ofproto-dpif megaflow - mpls])
2318 ADD_OF_PORTS([br0], [1], [2])
2319 AT_DATA([flows.txt], [dnl
2320 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2321 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2323 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2324 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)'])
2325 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)'])
2326 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2327 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>
2328 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>
2333 AT_SETUP([ofproto-dpif megaflow - netflow])
2335 ADD_OF_PORTS([br0], [1], [2])
2337 dnl NetFlow configuration disables wildcarding relevant fields
2338 ON_EXIT([kill `cat test-netflow.pid`])
2339 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2340 AT_CAPTURE_FILE([netflow.log])
2341 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2343 set Bridge br0 netflow=@nf -- \
2344 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2345 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2347 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2348 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)'])
2349 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)'])
2350 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2351 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>
2352 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>
2357 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2359 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2360 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2361 set interface p2 type=dummy ofport_request=2 -- \
2362 set interface p3 type=dummy ofport_request=3])
2363 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2366 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2367 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)'])
2368 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)'])
2369 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2370 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>
2371 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>
2376 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2378 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2379 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2380 set interface p2 type=dummy ofport_request=2 -- \
2381 set interface p3 type=dummy ofport_request=3])
2382 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2385 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2386 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)'])
2387 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)'])
2388 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2389 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>
2390 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>
2395 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2396 # Create bond0 on br0 with interfaces p0 and p1
2397 # and bond1 on br1 with interfaces p2 and p3
2398 # with p0 patched to p2 and p1 patched to p3.
2400 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2401 other-config:lacp-time=fast \
2402 other-config:bond-rebalance-interval=0 -- \
2403 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2404 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2406 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2407 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2408 fail-mode=secure -- \
2409 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2410 other-config:lacp-time=fast \
2411 other-config:bond-rebalance-interval=0 -- \
2412 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2413 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2415 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2417 ADD_OF_PORTS([br0], [7])
2418 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2419 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2420 ovs-appctl time/warp 5000
2421 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)'])
2422 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)'])
2424 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2425 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>
2426 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>
2431 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2433 ADD_OF_PORTS([br0], [1], [2])
2434 AT_DATA([flows.txt], [dnl
2435 table=0 in_port=1,ip actions=resubmit(90)
2436 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2438 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2439 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)'])
2440 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)'])
2441 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2442 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>
2443 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>
2448 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2450 ADD_OF_PORTS([br0], [1], [2])
2451 AT_DATA([flows.txt], [dnl
2452 table=0 in_port=1,ip actions=resubmit(,1)
2453 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2455 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2456 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)'])
2457 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=
2458 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
2459 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2460 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>
2461 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>
2466 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2468 ADD_OF_PORTS([br0], [1], [2])
2469 AT_DATA([flows.txt], [dnl
2470 table=0 in_port=1,ip actions=goto_table(1)
2471 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2473 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2474 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)'])
2475 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)'])
2476 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2477 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>
2478 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>
2483 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2485 ADD_OF_PORTS([br0], [1], [2], [3])
2487 set Bridge br0 mirrors=@m --\
2488 --id=@p3 get Port p3 --\
2489 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2491 AT_DATA([flows.txt], [dnl
2492 in_port=1 actions=output:2
2494 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2495 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)'])
2496 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)'])
2497 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2498 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2503 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2505 ADD_OF_PORTS([br0], [1], [2], [3])
2507 set Bridge br0 mirrors=@m --\
2508 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2509 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2511 AT_DATA([flows.txt], [dnl
2512 in_port=1 actions=output:2
2514 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2515 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))'])
2516 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)'])
2517 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2518 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2519 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2524 AT_SETUP([ofproto-dpif megaflow - move action])
2526 ADD_OF_PORTS([br0], [1], [2])
2527 AT_DATA([flows.txt], [dnl
2528 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2529 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2530 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2532 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2533 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)'])
2534 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)'])
2535 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2536 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>
2537 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>
2542 AT_SETUP([ofproto-dpif megaflow - push action])
2544 ADD_OF_PORTS([br0], [1], [2])
2545 AT_DATA([flows.txt], [dnl
2546 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],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 - learning])
2560 ADD_OF_PORTS([br0], [1], [2])
2561 AT_DATA([flows.txt], [dnl
2562 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
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 dnl The original flow is missing due to a revalidation.
2568 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2569 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>
2570 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>
2575 AT_SETUP([ofproto-dpif megaflow - tunnels])
2577 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2578 ofport_request=1 -- \
2579 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2580 ofport_request=2 options:key=flow -- \
2581 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2582 ofport_request=3 -- \
2583 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2584 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2585 AT_DATA([flows.txt], [dnl
2586 in_port=1,actions=output(2)
2587 in_port=3,actions=output(4)
2589 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2590 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2591 dnl will cause the packet to be dropped.
2592 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)'])
2593 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)'])
2594 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)'])
2595 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)'])
2596 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2597 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2598 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>
2599 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>
2604 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2606 ADD_OF_PORTS([br0], [1], [2])
2607 AT_DATA([flows.txt], [dnl
2608 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2610 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2611 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)'])
2612 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)'])
2613 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2614 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>
2615 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>