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 br0 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
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 br0 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
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 br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
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 br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
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 br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=3,frag=no)'], [0], [stdout])
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 br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
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 br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
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:65534,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:65534
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 br0 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
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:65534,output:1,output:2,output:3,output:4,output:5,output:6,output:7
201 in_port=4 actions=enqueue:65534:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
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 br0 '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 br0 '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 br0 '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 br0 '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 br0 '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:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],controller
269 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
270 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
271 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
272 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
273 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
274 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
275 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
276 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
277 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
279 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
282 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
285 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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)'
288 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
289 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
290 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
291 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
293 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
294 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
296 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
297 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=9 tcp_csum:0
300 dnl Singleton controller action.
301 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
304 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)'
307 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
308 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
309 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
310 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
312 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
313 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
315 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
316 tcp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=10:11:11:11:11:11,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=8,tp_dst=10 tcp_csum:0
319 dnl Modified controller action.
320 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
323 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)'
326 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
327 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
328 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
329 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
331 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
332 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
334 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
335 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
338 dnl Modified MPLS controller action.
339 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
342 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)'
345 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
346 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
347 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
348 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
350 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
351 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
353 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
354 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
357 dnl Modified MPLS controller action.
358 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
360 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)
363 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)'
366 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
367 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
368 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
369 mpls,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
371 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
372 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
374 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
375 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
378 dnl Modified MPLS controller action.
379 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
382 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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))'
385 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
386 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
387 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
388 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
390 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
391 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
393 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
394 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
397 dnl Modified MPLS controller action.
398 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
401 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=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)'
404 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
405 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
406 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
407 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
409 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
410 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
412 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
413 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
416 dnl Modified MPLS controller action.
417 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
420 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)'
423 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
424 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
425 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
426 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
428 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
429 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
431 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
432 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
435 dnl Modified MPLS controller action.
436 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
439 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)'
442 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
443 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
444 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
445 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
447 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
448 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
450 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
451 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
454 dnl Modified MPLS controller action.
455 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
458 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)'
461 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
462 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
463 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
464 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
466 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
467 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
469 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
470 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
473 dnl Modified MPLS actions.
474 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
477 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:55:55:55:55:55,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=100,tc=7,ttl=64,bos=1),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no)'
480 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
481 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
482 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
483 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
485 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
486 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
488 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
489 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
492 dnl Modified MPLS ipv6 controller action.
493 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
496 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)'
499 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
500 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
501 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
502 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
504 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
505 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
507 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
508 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
512 dnl Modified MPLS pop action.
513 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
514 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)
515 dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
517 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
520 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'
523 # 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)'
526 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
527 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
528 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
529 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
531 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
532 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
534 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
535 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
539 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
542 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)'
545 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
546 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
547 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
548 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
550 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
551 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
553 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)
554 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
556 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)
557 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
559 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)
560 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
562 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)
563 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
565 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)
566 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
568 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)
569 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
571 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)
572 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
576 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
579 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'
582 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
583 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
584 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
585 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
587 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
588 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
590 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)
591 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
593 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)
594 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
596 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)
597 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
599 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)
600 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
602 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)
603 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
605 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)
606 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
608 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)
609 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
612 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
613 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
614 cookie=0x1, n_packets=2, n_bytes=120, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
615 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
616 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)
617 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)
618 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)
619 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)
620 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)
621 cookie=0x8, table=6, n_packets=2, n_bytes=120, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
622 cookie=0x9, table=7, n_packets=2, n_bytes=120, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
623 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
624 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
625 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
626 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
627 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
628 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
629 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
630 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
631 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
632 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
633 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
640 AT_SETUP([ofproto-dpif - VLAN handling])
642 [set Bridge br0 fail-mode=standalone -- \
643 add-port br0 p1 trunks=10,12 -- \
644 add-port br0 p2 tag=10 -- \
645 add-port br0 p3 tag=12 \
646 other-config:priority-tags=true -- \
647 add-port br0 p4 tag=12 -- \
648 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
649 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
650 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
651 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
652 other-config:priority-tags=true -- \
653 set Interface p1 type=dummy -- \
654 set Interface p2 type=dummy -- \
655 set Interface p3 type=dummy -- \
656 set Interface p4 type=dummy -- \
657 set Interface p5 type=dummy -- \
658 set Interface p6 type=dummy -- \
659 set Interface p7 type=dummy -- \
660 set Interface p8 type=dummy --])
662 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
663 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
669 "100 10 0 1,5,6,7,8,pop_vlan,2" \
670 "100 10 1 1,5,6,7,8,pop_vlan,2" \
673 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
674 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
678 "1 10 0 5,6,7,8,100,pop_vlan,2" \
679 "1 10 1 5,6,7,8,100,pop_vlan,2" \
682 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
683 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
684 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
685 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
686 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
693 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
694 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
695 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
702 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
703 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
704 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
711 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
712 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
713 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
714 "5 10 0 1,6,7,8,100,pop_vlan,2" \
715 "5 10 1 1,6,7,8,100,pop_vlan,2" \
718 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
719 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
720 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
721 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
722 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
723 "6 10 0 1,5,7,8,100,pop_vlan,2" \
724 "6 10 1 1,5,7,8,100,pop_vlan,2" \
727 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
728 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
729 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
730 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
731 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
732 "7 10 0 1,5,6,8,100,pop_vlan,2" \
733 "7 10 1 1,5,6,8,100,pop_vlan,2" \
736 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
737 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
738 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
739 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
740 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
741 "8 10 0 1,5,6,7,100,pop_vlan,2" \
742 "8 10 1 1,5,6,7,100,pop_vlan,2" \
745 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
746 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
754 if test $vlan = none; then
755 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
757 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))"
760 echo "----------------------------------------------------------------------"
761 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
763 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
764 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
766 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
768 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
774 AT_SETUP([ofproto-dpif - fragment handling])
776 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
777 AT_DATA([flows.txt], [dnl
778 priority=75 tcp ip_frag=no tp_dst=80 actions=output:1
779 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
780 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
781 priority=50 tcp ip_frag=no actions=output:4
782 priority=50 tcp ip_frag=first actions=output:5
783 priority=50 tcp ip_frag=later actions=output:6
785 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
787 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"
788 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
789 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
790 later_flow="$base_flow,frag=later)"
792 # mode no first later
804 AT_CHECK([ovs-ofctl set-frags br0 $mode])
805 for type in no first later; do
806 eval flow=\$${type}_flow exp_output=\$$type
807 printf "\n%s\n" "----$mode $type-----"
808 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
810 if test $mode = drop && test $type != no; then
811 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
813 echo "Datapath actions: $exp_output" >> expout
814 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
820 AT_SETUP([ofproto-dpif - exit])
822 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
823 AT_DATA([flows.txt], [dnl
824 in_port=1 actions=output:10,exit,output:11
825 in_port=2 actions=output:12,resubmit:1,output:12
826 in_port=3 actions=output:13,resubmit:2,output:14
828 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
829 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
830 AT_CHECK([tail -1 stdout], [0],
831 [Datapath actions: 10
833 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
834 AT_CHECK([tail -1 stdout], [0],
835 [Datapath actions: 12,10
837 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
838 AT_CHECK([tail -1 stdout], [0],
839 [Datapath actions: 13,12,10
845 AT_SETUP([ofproto-dpif - mirroring, select_all])
847 ADD_OF_PORTS([br0], 1, 2, 3)
849 set Bridge br0 mirrors=@m --\
850 --id=@p3 get Port p3 --\
851 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
853 AT_DATA([flows.txt], [dnl
854 in_port=1 actions=output:2
855 in_port=2 actions=output:1
857 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
859 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)"
860 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
861 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
862 [Datapath actions: 2,3
865 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)"
866 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
867 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
868 [Datapath actions: 1,3
875 AT_SETUP([ofproto-dpif - mirroring, select_src])
877 ADD_OF_PORTS([br0], 1, 2, 3)
879 set Bridge br0 mirrors=@m --\
880 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
881 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
883 AT_DATA([flows.txt], [dnl
884 in_port=1 actions=output:2
885 in_port=2 actions=output:1
887 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
889 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)"
890 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
891 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
892 [Datapath actions: 2,3
895 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)"
896 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
897 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
903 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
905 ADD_OF_PORTS([br0], 1, 2)
907 set Bridge br0 mirrors=@m --\
908 --id=@p2 get Port p2 --\
909 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
911 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
913 # "in_port" defaults to OFPP_NONE if it's not specified.
914 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"
915 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
916 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
917 [Datapath actions: 1,2
924 AT_SETUP([ofproto-dpif - mirroring, select_dst])
926 ADD_OF_PORTS([br0], 1, 2, 3)
928 set Bridge br0 mirrors=@m --\
929 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
930 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
932 AT_DATA([flows.txt], [dnl
933 in_port=1 actions=output:2
934 in_port=2 actions=output:1
936 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
938 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)"
939 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
940 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
941 [Datapath actions: 2,3
944 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)"
945 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
946 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
954 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
956 ADD_OF_PORTS([br0], 1, 2, 3)
958 set Bridge br0 mirrors=@m --\
959 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
960 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
962 AT_DATA([flows.txt], [dnl
963 in_port=1, actions=output:2
965 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
967 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)"
968 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
969 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
973 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))"
974 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
975 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
979 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))"
980 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
981 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
982 [Datapath actions: 2,3
989 AT_SETUP([ofproto-dpif - mirroring, output_port])
991 ADD_OF_PORTS([br0], 1, 2, 3)
993 set Bridge br0 mirrors=@m --\
994 --id=@p3 get Port p3 --\
995 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
997 AT_DATA([flows.txt], [dnl
998 in_port=1 actions=mod_vlan_vid:17,output:2
999 in_port=2 actions=output:1
1001 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1003 flow="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)"
1004 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1005 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1006 [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
1009 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)"
1010 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1011 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
1012 [Datapath actions: 1,3
1018 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
1020 ADD_OF_PORTS([br0], 1, 2)
1022 set Bridge br0 mirrors=@m --\
1023 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
1025 AT_DATA([flows.txt], [dnl
1026 in_port=1 actions=output:2
1027 in_port=2 actions=mod_vlan_vid:17,output:1
1029 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1031 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)"
1032 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1033 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1035 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
1036 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1038 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1040 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)"
1041 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
1042 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1044 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
1045 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1047 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1052 m4_define([OFPROTO_TRACE],
1054 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
1055 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1057 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
1060 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
1063 AT_SETUP([ofproto-dpif - MAC learning])
1064 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
1065 ADD_OF_PORTS([br0], 1, 2, 3)
1067 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)'
1069 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
1072 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1076 # Check for the MAC learning entry.
1077 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1079 3 0 50:54:00:00:00:05 ?
1082 # Trace a packet arrival destined for the learned MAC.
1083 # (This will also learn a MAC.)
1086 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
1090 # Check for both MAC learning entries.
1091 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1093 3 0 50:54:00:00:00:05 ?
1094 1 0 50:54:00:00:00:06 ?
1097 # Trace a packet arrival that updates the first learned MAC entry.
1100 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
1104 # Check that the MAC learning entry was updated.
1105 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1107 1 0 50:54:00:00:00:06 ?
1108 2 0 50:54:00:00:00:05 ?
1111 # Add another bridge.
1115 -- set bridge br1 datapath-type=dummy \
1116 -- add-port br1 p4 -- set interface p4 type=dummy \
1117 -- add-port br1 p5 -- set interface p5 type=dummy])
1119 # Trace some packet arrivals in br1 to create MAC learning entries there too.
1122 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
1127 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
1131 # Check that the MAC learning entries were added.
1132 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1134 4 0 50:54:00:00:00:06 ?
1135 5 0 50:54:00:00:00:07 ?
1138 # Delete port p1 and see that its MAC learning entry disappeared, and
1139 # that the MAC learning entry for the same MAC was also deleted from br1.
1140 AT_CHECK([ovs-vsctl del-port p1])
1141 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1143 2 0 50:54:00:00:00:05 ?
1145 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
1147 5 0 50:54:00:00:00:07 ?
1153 AT_SETUP([ofproto-dpif - MAC table overflow])
1155 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10 -- \
1156 add-port br0 p1 -- set Interface p1 type=dummy -- \
1157 add-port br0 p2 -- set Interface p2 type=dummy -- \
1158 add-port br0 p3 -- set Interface p3 type=dummy])
1160 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)'
1162 AT_CHECK([ovs-appctl time/stop])
1164 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
1165 for i in 0 1 2 3 4 5 6 7 8 9; do
1168 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
1171 ovs-appctl time/warp 1000
1174 # Check for the MAC learning entries.
1175 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
1177 3 0 50:54:00:00:00:00
1178 3 0 50:54:00:00:00:01
1179 3 0 50:54:00:00:00:02
1180 3 0 50:54:00:00:00:03
1181 3 0 50:54:00:00:00:04
1182 3 0 50:54:00:00:00:05
1183 3 0 50:54:00:00:00:06
1184 3 0 50:54:00:00:00:07
1185 3 0 50:54:00:00:00:08
1186 3 0 50:54:00:00:00:09
1190 # Trace another ARP packet on another MAC.
1193 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
1197 # Check that the new one chased the oldest one out of the table.
1198 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
1200 3 0 50:54:00:00:00:01 ?
1201 3 0 50:54:00:00:00:02 ?
1202 3 0 50:54:00:00:00:03 ?
1203 3 0 50:54:00:00:00:04 ?
1204 3 0 50:54:00:00:00:05 ?
1205 3 0 50:54:00:00:00:06 ?
1206 3 0 50:54:00:00:00:07 ?
1207 3 0 50:54:00:00:00:08 ?
1208 3 0 50:54:00:00:00:09 ?
1209 3 0 50:54:00:00:00:10 ?
1215 dnl Test that sFlow samples packets correctly.
1216 AT_SETUP([ofproto-dpif - sFlow packet sampling])
1217 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1219 ON_EXIT([kill `cat test-sflow.pid`])
1220 AT_CHECK([test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
1221 AT_CAPTURE_FILE([sflow.log])
1222 SFLOW_PORT=`parse_listening_port < test-sflow.log`
1224 ovs-appctl time/stop
1226 ADD_OF_PORTS([br0], 1, 2)
1228 set Interface br0 options:ifindex=1002 -- \
1229 set Interface p1 options:ifindex=1004 -- \
1230 set Interface p2 options:ifindex=1003 -- \
1231 set Bridge br0 sflow=@sf -- \
1232 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
1233 header=128 sampling=1 polling=1
1235 dnl open with ARP packets to seed the bridge-learning. The output
1236 dnl ifIndex numbers should be reported predictably after that.
1237 dnl Since we set sampling=1 we should see all of these packets
1238 dnl reported. Sorting the output by data-source and seqNo makes
1239 dnl it deterministic. Ensuring that we send at least two packets
1240 dnl into each port means we get to check the seq nos are
1241 dnl incrementing correctly.
1243 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)'
1244 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)'
1245 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)'
1246 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)'
1247 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)'
1249 dnl sleep long enough to get more than one counter sample
1250 dnl from each datasource so we can check sequence numbers
1251 for i in `seq 1 30`; do
1252 ovs-appctl time/warp 100
1255 ovs-appctl -t test-sflow exit
1257 AT_CHECK([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
1278 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
1298 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
1318 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
1338 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
1358 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
1361 AT_CHECK([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
1375 in_broadcasts=4294967295
1378 in_unknownprotos=4294967295
1381 out_multicasts=4294967295
1382 out_broadcasts=4294967295
1398 in_broadcasts=4294967295
1401 in_unknownprotos=4294967295
1404 out_multicasts=4294967295
1405 out_broadcasts=4294967295
1421 in_broadcasts=4294967295
1424 in_unknownprotos=4294967295
1427 out_multicasts=4294967295
1428 out_broadcasts=4294967295
1444 in_broadcasts=4294967295
1447 in_unknownprotos=4294967295
1450 out_multicasts=4294967295
1451 out_broadcasts=4294967295
1467 in_broadcasts=4294967295
1470 in_unknownprotos=4294967295
1473 out_multicasts=4294967295
1474 out_broadcasts=4294967295
1490 in_broadcasts=4294967295
1493 in_unknownprotos=4294967295
1496 out_multicasts=4294967295
1497 out_broadcasts=4294967295
1506 dnl Test that basic NetFlow reports flow statistics correctly:
1507 dnl - The initial packet of a flow are correctly accounted.
1508 dnl - Later packets within a flow are correctly accounted.
1509 dnl - Flow actions changing (in this case, due to MAC learning)
1510 dnl cause a record to be sent.
1511 AT_SETUP([ofproto-dpif - NetFlow flow expiration])
1513 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1514 ADD_OF_PORTS([br0], 1, 2)
1516 ON_EXIT([kill `cat test-netflow.pid`])
1517 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1518 AT_CAPTURE_FILE([netflow.log])
1519 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1522 set Bridge br0 netflow=@nf -- \
1523 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1524 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
1526 for delay in 1000 30000; do
1527 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)'
1528 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)'
1530 ovs-appctl time/warp $delay
1535 ovs-appctl -t test-netflow exit
1537 AT_CHECK([[sed -e 's/, uptime [0-9]*//
1539 s/time \([0-9]*\)\.\.\.\1$/time <moment>/
1540 s/time [0-9]*\.\.\.[0-9]*/time <range>/
1541 ' netflow.log | sort]], [0],
1543 header: v5, seq 0, engine 2,1
1544 header: v5, seq 1, engine 2,1
1545 seq 0: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1546 seq 1: 192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0, time <moment>
1547 seq 1: 192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0, time <range>
1551 dnl Test that basic NetFlow reports active expirations correctly.
1552 AT_SETUP([ofproto-dpif - NetFlow active expiration])
1554 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
1555 ADD_OF_PORTS([br0], 1, 2)
1557 ON_EXIT([kill `cat test-netflow.pid`])
1558 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
1559 AT_CAPTURE_FILE([netflow.log])
1560 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
1563 set Bridge br0 netflow=@nf -- \
1564 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
1565 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
1567 AT_CHECK([ovs-appctl time/stop])
1569 while test $n -le 60; do
1572 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)'
1573 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)'
1575 ovs-appctl time/warp 1000
1578 ovs-appctl time/warp 10000
1582 ovs-appctl -t test-netflow exit
1584 # Count the number of reported packets:
1585 # - From source to destination before MAC learning kicks in (just one).
1586 # - From source to destination after that.
1587 # - From destination to source.
1595 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
1602 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1605 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
1608 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
1615 eval $counter=\`expr \$$counter + \$pkts\`
1616 n_recs=`expr $n_recs + 1`
1619 # There should be exactly 1 MAC learning packet,
1620 # exactly 59 other packets in that direction,
1621 # and exactly 60 packets in the other direction.
1622 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
1625 # There should be 1 expiration for MAC learning,
1626 # at least 5 active and a final expiration in one direction,
1627 # and at least 5 active and a final expiration in the other direction.
1629 AT_CHECK([test $n_recs -ge 13])
1633 AT_SETUP([idle_age and hard_age increase over time])
1636 # get_ages DURATION HARD IDLE
1638 # Fetch the flow duration, hard age, and idle age into the variables
1639 # whose names are given as arguments. Rounds DURATION down to the
1640 # nearest integer. If hard_age doesn't appear in the output, sets
1641 # HARD to "none". If idle_age doesn't appear in the output, sets IDLE
1644 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
1646 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
1647 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
1648 AS_VAR_COPY([$1], [duration])
1650 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
1651 if test X"$hard" = X; then
1654 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
1656 AS_VAR_COPY([$2], [hard])
1658 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
1659 if test X"$idle" = X; then
1662 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
1664 AS_VAR_COPY([$3], [idle])
1667 # Add a flow and get its initial hard and idle age.
1668 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
1669 get_ages duration1 hard1 idle1
1671 # Warp time forward by 10 seconds, then modify the flow's actions.
1672 ovs-appctl time/warp 10000
1673 get_ages duration2 hard2 idle2
1674 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
1676 # Warp time forward by 10 seconds.
1677 ovs-appctl time/warp 10000
1678 get_ages duration3 hard3 idle3
1680 # Warp time forward 10 more seconds, then pass some packets through the flow,
1681 # then warp forward a few more times because idle times are only updated
1683 ovs-appctl time/warp 10000
1684 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)'
1685 ovs-appctl time/warp 1000
1686 ovs-appctl time/warp 1000
1687 ovs-appctl time/warp 1000
1688 get_ages duration4 hard4 idle4
1690 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
1691 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
1692 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
1694 # Duration should increase steadily over time.
1695 AT_CHECK([test $duration1 -lt $duration2])
1696 AT_CHECK([test $duration2 -lt $duration3])
1697 AT_CHECK([test $duration3 -lt $duration4])
1699 # Hard age should be "none" initially because it's the same as flow_duration,
1700 # then it should increase.
1701 AT_CHECK([test $hard1 = none])
1702 AT_CHECK([test $hard2 = none])
1703 AT_CHECK([test $hard3 != none])
1704 AT_CHECK([test $hard4 != none])
1705 AT_CHECK([test $hard3 -lt $hard4])
1707 # Idle age should increase from 1 to 2 to 3, then decrease.
1708 AT_CHECK([test $idle1 -lt $idle2])
1709 AT_CHECK([test $idle2 -lt $idle3])
1710 AT_CHECK([test $idle3 -gt $idle4])
1712 # Check some invariant relationships.
1713 AT_CHECK([test $duration1 = $idle1])
1714 AT_CHECK([test $duration2 = $idle2])
1715 AT_CHECK([test $duration3 = $idle3])
1716 AT_CHECK([test $idle3 -gt $hard3])
1717 AT_CHECK([test $idle4 -lt $hard4])
1718 AT_CHECK([test $hard4 -lt $duration4])
1723 AT_SETUP([ofproto-dpif - fin_timeout])
1725 AT_DATA([flows.txt], [dnl
1726 in_port=1 actions=output:2
1727 in_port=2 actions=mod_vlan_vid:17,output:1
1729 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
1730 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1732 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1734 # Check that a TCP SYN packet does not change the timeout. (Because
1735 # flow stats updates are mainly what implements the fin_timeout
1736 # feature, we warp forward a couple of times to ensure that flow stats
1737 # run before re-checking the flow table.)
1738 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307], [0], [success
1740 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1743 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1745 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
1747 # Check that a TCP FIN packet does change the timeout.
1748 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588], [0], [success
1750 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1753 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
1755 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
1760 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
1761 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1762 ADD_OF_PORTS([br0], [1], [2])
1763 ADD_OF_PORTS([br1], [3])
1765 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
1772 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
1773 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
1774 ADD_OF_PORTS([br0], [1], [2])
1775 ADD_OF_PORTS([br1], [3])
1777 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1778 br0 (dummy@ovs-dummy):
1779 lookups: hit:0 missed:0
1780 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1781 overall avg: add rate: 0.000/min, del rate: 0.000/min
1782 br0 65534/100: (dummy)
1785 br1 (dummy@ovs-dummy):
1786 lookups: hit:0 missed:0
1787 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1788 overall avg: add rate: 0.000/min, del rate: 0.000/min
1789 br1 65534/101: (dummy)
1793 AT_CHECK([ovs-appctl dpif/show br0], [0], [dnl
1794 br0 (dummy@ovs-dummy):
1795 lookups: hit:0 missed:0
1796 flows: cur: 0, avg: 0.000, max: 0, life span: 0(ms)
1797 overall avg: add rate: 0.000/min, del rate: 0.000/min
1798 br0 65534/100: (dummy)
1805 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
1806 OVS_VSWITCHD_START([add-br br1 -- \
1807 set bridge br1 datapath-type=dummy fail-mode=secure])
1808 ADD_OF_PORTS([br0], [1], [2])
1809 ADD_OF_PORTS([br1], [3])
1811 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1813 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'], [0], [success
1815 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1818 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1819 in_port(1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1820 in_port(2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1823 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1824 in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1830 AT_SETUP([ofproto-dpif - ovs-appctl dpif/del-flows])
1831 OVS_VSWITCHD_START([add-br br1 -- \
1832 set bridge br1 datapath-type=dummy fail-mode=secure])
1833 ADD_OF_PORTS([br0], [1], [2])
1834 ADD_OF_PORTS([br1], [3])
1836 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1838 AT_CHECK([ovs-appctl netdev-dummy/receive p2 'in_port(2),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x0800),ipv4(src=192.168.0.2,dst=192.168.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=0,code=0)'], [0], [success
1840 AT_CHECK([ovs-appctl netdev-dummy/receive p3 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'], [0], [success
1843 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1844 in_port(1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1845 in_port(2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1848 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1849 in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1852 AT_CHECK([ovs-appctl dpif/del-flows br0])
1853 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
1856 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
1857 in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:0.0s, actions:userspace(pid=0,slow_path(controller))
1863 AT_SETUP([ofproto-dpif - patch ports])
1864 OVS_VSWITCHD_START([add-br br1 \
1865 -- set bridge br1 datapath-type=dummy fail-mode=secure \
1866 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
1867 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
1869 ADD_OF_PORTS([br0], [2])
1870 ADD_OF_PORTS([br1], [3])
1872 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1873 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
1875 for i in $(seq 1 10); do
1876 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)'
1879 for i in $(seq 1 5); do
1880 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)'
1883 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
1887 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
1888 br0 (dummy@ovs-dummy):
1889 lookups: hit:9 missed:1
1890 flows: cur: 1, avg: 1.000, max: 1, life span: 0(ms)
1891 overall avg: add rate: 0.000/min, del rate: 0.000/min
1892 br0 65534/100: (dummy)
1894 pbr0 1/none: (patch: peer=pbr1)
1895 br1 (dummy@ovs-dummy):
1896 lookups: hit:4 missed:1
1897 flows: cur: 1, avg: 1.000, max: 1, life span: 0(ms)
1898 overall avg: add rate: 0.000/min, del rate: 0.000/min
1899 br1 65534/101: (dummy)
1901 pbr1 1/none: (patch: peer=pbr0)
1904 AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_USED], [0], [dnl
1905 in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:9, bytes:540, used:0.0s, actions:101,3,2
1907 AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_USED], [0], [dnl
1908 in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), packets:4, bytes:240, used:0.0s, actions:100,2,3
1911 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
1912 OFPST_PORT reply (xid=0x4): 1 ports
1913 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
1914 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
1917 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
1918 OFPST_PORT reply (xid=0x4): 1 ports
1919 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
1920 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
1926 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show rates])
1927 OVS_VSWITCHD_START([set Bridge br0 fail-mode=secure])
1928 ADD_OF_PORTS([br0], 1, 2)
1930 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
1932 for i in $(seq 1 61); do
1933 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)'
1934 ovs-appctl time/warp 10000
1935 ovs-appctl time/warp 50000
1938 AT_CHECK([ovs-appctl time/warp 10000], [0], [warped
1941 AT_CHECK([ovs-appctl dpif/show | sed 's/ 10[[0-9]]\{3\}(ms)$/ 10000(ms)/'], [0], [dnl
1942 br0 (dummy@ovs-dummy):
1943 lookups: hit:0 missed:61
1944 flows: cur: 0, avg: 1.000, max: 1, life span: 10000(ms)
1945 hourly avg: add rate: 0.641/min, del rate: 0.641/min
1946 overall avg: add rate: 1.000/min, del rate: 1.000/min
1947 br0 65534/100: (dummy)
1955 dnl ----------------------------------------------------------------------
1956 AT_BANNER([ofproto-dpif -- megaflows])
1958 # Strips out uninteresting parts of megaflow output, as well as parts
1959 # that vary from one run to another (e.g., timing and bond actions).
1960 m4_define([STRIP_USED], [[sed '
1961 s/used:[0-9]*\.[0-9]*/used:0.0/
1963 m4_define([STRIP_XOUT], [[sed '
1964 s/used:[0-9]*\.[0-9]*/used:0.0/
1965 s/Datapath actions:.*/Datapath actions: <del>/
1968 AT_SETUP([ofproto-dpif megaflow - port classification])
1970 ADD_OF_PORTS([br0], [1], [2])
1971 AT_DATA([flows.txt], [dnl
1972 table=0 in_port=1 actions=output(2)
1974 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1975 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)'], [0], [success
1977 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)'], [0], [success
1979 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
1980 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
1985 AT_SETUP([ofproto-dpif megaflow - L2 classification])
1987 ADD_OF_PORTS([br0], [1], [2])
1988 AT_DATA([flows.txt], [dnl
1989 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
1991 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1992 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)'], [0], [success
1994 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)'], [0], [success
1996 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
1997 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>
1998 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>
2003 AT_SETUP([ofproto-dpif megaflow - L3 classification])
2005 ADD_OF_PORTS([br0], [1], [2])
2006 AT_DATA([flows.txt], [dnl
2007 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
2009 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2010 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)'], [0], [success
2012 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)'], [0], [success
2014 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2015 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>
2016 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>
2021 AT_SETUP([ofproto-dpif megaflow - L4 classification])
2023 ADD_OF_PORTS([br0], [1], [2])
2024 AT_DATA([flows.txt], [dnl
2025 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
2027 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2028 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)'], [0], [success
2030 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)'], [0], [success
2032 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2033 skb_priority=0,icmp,in_port=1,nw_frag=no,icmp_type=8, n_subfacets:2, used:0.0s, Datapath actions: <del>
2038 AT_SETUP([ofproto-dpif megaflow - normal])
2040 ADD_OF_PORTS([br0], [1], [2])
2041 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2042 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)'], [0], [success
2044 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)'], [0], [success
2046 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2047 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>
2048 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>
2053 AT_SETUP([ofproto-dpif megaflow - mpls])
2055 ADD_OF_PORTS([br0], [1], [2])
2056 AT_DATA([flows.txt], [dnl
2057 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
2058 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
2060 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2061 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)'], [0], [success
2063 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)'], [0], [success
2065 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2066 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>
2067 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>
2072 AT_SETUP([ofproto-dpif megaflow - netflow])
2074 ADD_OF_PORTS([br0], [1], [2])
2076 dnl NetFlow configuration disables wildcarding relevant fields
2077 ON_EXIT([kill `cat test-netflow.pid`])
2078 AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
2079 AT_CAPTURE_FILE([netflow.log])
2080 NETFLOW_PORT=`parse_listening_port < test-netflow.log`
2082 set Bridge br0 netflow=@nf -- \
2083 --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
2084 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
2086 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2087 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)'], [0], [success
2089 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)'], [0], [success
2091 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2092 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>
2093 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>
2098 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
2100 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2101 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
2102 set interface p2 type=dummy ofport_request=2 -- \
2103 set interface p3 type=dummy ofport_request=3])
2104 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2107 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2108 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)'], [0], [success
2110 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)'], [0], [success
2112 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2113 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>
2114 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>
2119 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
2121 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
2122 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
2123 set interface p2 type=dummy ofport_request=2 -- \
2124 set interface p3 type=dummy ofport_request=3])
2125 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2128 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2129 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)'], [0], [success
2131 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)'], [0], [success
2133 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2134 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>
2135 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>
2140 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
2141 # Create bond0 on br0 with interfaces p0 and p1
2142 # and bond1 on br1 with interfaces p2 and p3
2143 # with p0 patched to p2 and p1 patched to p3.
2145 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
2146 other-config:lacp-time=fast \
2147 other-config:bond-rebalance-interval=0 -- \
2148 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
2149 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
2151 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
2152 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
2153 fail-mode=secure -- \
2154 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
2155 other-config:lacp-time=fast \
2156 other-config:bond-rebalance-interval=0 -- \
2157 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
2158 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
2160 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
2162 ADD_OF_PORTS([br0], [7])
2163 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
2164 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
2165 ovs-appctl time/warp 5000
2166 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)'], [0], [success
2168 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)'], [0], [success
2171 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2172 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>
2173 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>
2178 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
2180 ADD_OF_PORTS([br0], [1], [2])
2181 AT_DATA([flows.txt], [dnl
2182 table=0 in_port=1,ip actions=resubmit(90)
2183 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
2185 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2186 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)'], [0], [success
2188 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)'], [0], [success
2190 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2191 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>
2192 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>
2197 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
2199 ADD_OF_PORTS([br0], [1], [2])
2200 AT_DATA([flows.txt], [dnl
2201 table=0 in_port=1,ip actions=resubmit(,1)
2202 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2204 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2205 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)'], [0], [success
2207 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)'], [0], [success
2209 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2210 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>
2211 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>
2216 AT_SETUP([ofproto-dpif megaflow - goto_table action])
2218 ADD_OF_PORTS([br0], [1], [2])
2219 AT_DATA([flows.txt], [dnl
2220 table=0 in_port=1,ip actions=goto_table(1)
2221 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
2223 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2224 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)'], [0], [success
2226 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)'], [0], [success
2228 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2229 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>
2230 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>
2235 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
2237 ADD_OF_PORTS([br0], [1], [2], [3])
2239 set Bridge br0 mirrors=@m --\
2240 --id=@p3 get Port p3 --\
2241 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2243 AT_DATA([flows.txt], [dnl
2244 in_port=1 actions=output:2
2246 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2247 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)'], [0], [success
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)'], [0], [success
2251 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2252 skb_priority=0,ip,in_port=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2257 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
2259 ADD_OF_PORTS([br0], [1], [2], [3])
2261 set Bridge br0 mirrors=@m --\
2262 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2263 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2265 AT_DATA([flows.txt], [dnl
2266 in_port=1 actions=output:2
2268 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2269 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))'], [0], [success
2271 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)'], [0], [success
2273 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2274 skb_priority=0,ip,in_port=1,dl_vlan=11,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2275 skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: <del>
2280 AT_SETUP([ofproto-dpif megaflow - move action])
2282 ADD_OF_PORTS([br0], [1], [2])
2283 AT_DATA([flows.txt], [dnl
2284 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
2285 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
2286 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
2288 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2289 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)'], [0], [success
2291 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)'], [0], [success
2293 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2294 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>
2295 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>
2300 AT_SETUP([ofproto-dpif megaflow - push action])
2302 ADD_OF_PORTS([br0], [1], [2])
2303 AT_DATA([flows.txt], [dnl
2304 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
2306 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
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)'], [0], [success
2309 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)'], [0], [success
2311 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2312 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>
2313 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>
2318 AT_SETUP([ofproto-dpif megaflow - learning])
2320 ADD_OF_PORTS([br0], [1], [2])
2321 AT_DATA([flows.txt], [dnl
2322 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
2324 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2325 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)'], [0], [success
2327 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)'], [0], [success
2329 dnl The original flow is missing due to a revalidation.
2330 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2331 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>
2332 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>
2337 AT_SETUP([ofproto-dpif megaflow - tunnels])
2339 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2340 ofport_request=1 -- \
2341 add-port br0 p2 -- set Interface p2 type=gre options:remote_ip=1.1.1.1 \
2342 ofport_request=2 options:key=flow -- \
2343 add-port br0 p3 -- set Interface p3 type=dummy ofport_request=3 \
2344 ofport_request=3 -- \
2345 add-port br0 p4 -- set Interface p4 type=gre options:remote_ip=1.1.1.2 \
2346 options:tos=inherit options:ttl=inherit ofport_request=4 options:key=flow])
2347 AT_DATA([flows.txt], [dnl
2348 in_port=1,actions=output(2)
2349 in_port=3,actions=output(4)
2351 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2352 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
2353 dnl will cause the packet to be dropped.
2354 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)'], [0], [success
2356 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)'], [0], [success
2358 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)'], [0], [success
2360 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)'], [0], [success
2362 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2363 skb_priority=0,ip,in_port=1,nw_ecn=1,nw_frag=no, n_subfacets:2, used:0.0s, Datapath actions: <del>
2364 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>
2365 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>
2370 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
2372 ADD_OF_PORTS([br0], [1], [2])
2373 AT_DATA([flows.txt], [dnl
2374 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
2376 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2377 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)'], [0], [success
2379 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)'], [0], [success
2381 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
2382 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>
2383 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>
2388 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
2390 ADD_OF_PORTS([br0], [1], [2])
2391 AT_DATA([flows.txt], [dnl
2392 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
2394 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2395 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)'], [0], [success
2397 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)'], [0], [success
2399 dnl The megaflows do not match the same fields, since the first packet
2400 dnl is essentially a no-op. (The new destination MAC is the same as the
2401 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
2402 dnl so that a packet that doesn't need its MAC address changed doesn't
2403 dnl hide one that does. Since the first entry doesn't need to change,
2404 dnl only the destination MAC address is matched (as decided by
2405 dnl ofproto-dpif). The second entry actually updates the destination
2406 dnl MAC, so both the source and destination MAC addresses are
2407 dnl un-wildcarded, since the ODP commit functions update both the source
2408 dnl and destination MAC addresses.
2409 AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_USED], [0], [dnl
2410 skb_priority=0,ip,in_port=1,dl_dst=50:54:00:00:00:0a,nw_frag=no, n_subfacets:1, used:0.0s, Datapath actions: 2
2411 skb_priority=0,ip,in_port=1,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: set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2