tests/ofproto-dpif.at: Add delay before stopping time.
[cascardo/ovs.git] / tests / ofproto-dpif.at
1 AT_BANNER([ofproto-dpif])
2
3 AT_SETUP([ofproto-dpif, active-backup bonding])
4 # Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
5 #    and br1 with interfaces p3, p4 and p8.
6 # toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
7 OVS_VSWITCHD_START(
8   [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
9    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
10    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
11    add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
12    add-br br1 -- \
13    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
14    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
15                   fail-mode=secure -- \
16    add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
17    add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
18    add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
19 sleep 2
20 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
21
22 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
23 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
24 ovs-appctl netdev-dummy/set-admin-state up
25 ovs-appctl time/warp 100
26 ovs-appctl netdev-dummy/set-admin-state p2 down
27 ovs-appctl time/stop
28 ovs-appctl time/warp 100
29 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),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)'])
30 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
31 ovs-appctl time/warp 100
32 ovs-appctl netdev-dummy/set-admin-state p2 up
33 ovs-appctl netdev-dummy/set-admin-state p1 down
34 ovs-appctl time/warp 100
35 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
36 AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
37 ovs-appctl time/warp 100
38 ovs-appctl time/warp 100
39 sleep 1
40 AT_CHECK([cat ovs-vswitchd.log | grep 'in_port([[348]])' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
41 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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/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), actions: <del>
42 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
43 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=10.0.0.5/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), actions: <del>
44 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=10.0.0.6/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), actions: <del>
45 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:09/00:00:00:00:00:00,tha=50:54:00:00:00:09/00:00:00:00:00:00), actions: <del>
46 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(4),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:0b/00:00:00:00:00:00,tha=50:54:00:00:00:0b/00:00:00:00:00:00), actions: <del>
47 ])
48 OVS_VSWITCHD_STOP
49 AT_CLEANUP
50
51 AT_SETUP([ofproto-dpif, balance-slb bonding])
52 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
53 #    and br1 with interfaces p4, p5, p6 and p8.
54 #    p1 <-> p4, p2 <-> p5, p3 <-> p6
55 # Send some traffic, make sure the traffic are spread based on source mac.
56 OVS_VSWITCHD_START(
57   [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
58    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
59    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
60    set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
61    add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
62    add-br br1 -- \
63    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
64    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
65                   fail-mode=secure -- \
66    add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
67    add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
68    add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
69    add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
70 sleep 2
71 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
72 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
73 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
74 ])
75 ovs-appctl netdev-dummy/set-admin-state up
76 ovs-appctl time/stop
77 ovs-appctl time/warp 100
78 (
79 for i in `seq 0 100 |xargs printf '%02x\n'`;
80     do
81     pkt="in_port(7),eth(src=50:54:00:00:00:$i,dst=50:54:00:00:01:00),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)"
82     AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
83     done
84 )
85 ovs-appctl time/warp 100
86 AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
87 # Make sure there is resonable distribution to all three ports.
88 # We don't want to make this check precise, in case hash function changes.
89 AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
90 AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
91 AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
92 OVS_VSWITCHD_STOP
93 AT_CLEANUP
94
95 AT_SETUP([ofproto-dpif, balance-tcp bonding])
96 # Create br0 with interfaces bond0(p1, p2, p3) and p7,
97 #    and br1 with interfaces bond1(p4, p5, p6) and p8.
98 #    bond0 <-> bond1
99 # Send some traffic, make sure the traffic are spread based on L4 headers.
100 OVS_VSWITCHD_START(
101   [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
102         other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
103    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
104    set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
105    set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
106    add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
107    add-br br1 -- \
108    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
109    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
110                   fail-mode=secure -- \
111    add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
112         other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
113    set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
114    set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
115    set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
116    add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
117 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
118 ])
119 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
120 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
121 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
122 ], [])
123 sleep 2
124 ovs-appctl time/stop
125 ovs-appctl time/warp 100
126 ovs-appctl lacp/show > lacp.txt
127 ovs-appctl bond/show > bond.txt
128 (
129 for i in `seq 0 255` ;
130     do
131     pkt="in_port(7),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=$i),tcp_flags(0x010)"
132     AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
133     done
134 )
135 ovs-appctl time/warp 100
136 ovs-appctl time/warp 100
137 ovs-appctl time/warp 100
138 AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
139 AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
140 # Make sure there is resonable distribution to all three ports.
141 # We don't want to make this check precise, in case hash function changes.
142 AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 24])
143 AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24])
144 AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24])
145 OVS_VSWITCHD_STOP()
146 AT_CLEANUP
147
148 AT_SETUP([ofproto-dpif - resubmit])
149 OVS_VSWITCHD_START
150 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
151                     [16], [17], [18], [19], [20], [21])
152 AT_DATA([flows.txt], [dnl
153 table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
154 table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
155 table=0 in_port=3 priority=2000 icmp actions=output(20)
156 table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
157 table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
158 table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
159 ])
160 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
161 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])
162 AT_CHECK([tail -1 stdout], [0],
163   [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
164 ])
165 OVS_VSWITCHD_STOP
166 AT_CLEANUP
167
168 AT_SETUP([ofproto-dpif - goto table])
169 OVS_VSWITCHD_START
170 ADD_OF_PORTS([br0], [1], [10], [11])
171 echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
172 for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
173 echo "table=64 actions=output(11)" >> flows.txt
174 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
175 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])
176 AT_CHECK([tail -1 stdout], [0],
177   [Datapath actions: 10,11
178 ])
179 OVS_VSWITCHD_STOP
180 AT_CLEANUP
181
182 AT_SETUP([ofproto-dpif - write actions])
183 OVS_VSWITCHD_START
184 ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
185 AT_DATA([flows.txt], [dnl
186 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
187 table=1 ip actions=write_actions(output(13)),goto_table(2)
188 table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
189 ])
190 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
191 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])
192 AT_CHECK([tail -2 stdout], [0],
193   [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
194 Datapath actions: 10,set(ipv4(src=192.168.3.91,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11,set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),13
195 ])
196 OVS_VSWITCHD_STOP
197 AT_CLEANUP
198
199 AT_SETUP([ofproto-dpif - clear actions])
200 OVS_VSWITCHD_START
201 ADD_OF_PORTS([br0], [1], [10], [11], [12])
202 AT_DATA([flows.txt], [dnl
203 table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
204 table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
205 ])
206 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
207 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=6,nw_tos=0,nw_ttl=128,tp_src=8,tp_dst=9'], [0], [stdout])
208 AT_CHECK([tail -2 stdout], [0],
209   [Megaflow: recirc_id=0,skb_priority=0,tcp,in_port=1,nw_frag=no,tp_src=8,tp_dst=9
210 Datapath actions: 10,set(tcp(src=91,dst=9)),11
211 ])
212 OVS_VSWITCHD_STOP
213 AT_CLEANUP
214
215 AT_SETUP([ofproto-dpif - group chaining not supported])
216 OVS_VSWITCHD_START
217 ADD_OF_PORTS([br0], [1], [10], [11])
218 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,group:123,bucket=output:11'],
219   [1], [], [stderr])
220 AT_CHECK([STRIP_XIDS stderr | sed 1q], [0],
221   [OFPT_ERROR (OF1.2): OFPGMFC_CHAINING_UNSUPPORTED
222 ])
223 OVS_VSWITCHD_STOP
224 AT_CLEANUP
225
226 AT_SETUP([ofproto-dpif - all group in action list])
227 OVS_VSWITCHD_START
228 ADD_OF_PORTS([br0], [1], [10], [11])
229 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
230 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
231 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])
232 AT_CHECK([tail -2 stdout], [0],
233   [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
234 Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
235 ])
236 OVS_VSWITCHD_STOP
237 AT_CLEANUP
238
239 AT_SETUP([ofproto-dpif - indirect group in action list])
240 OVS_VSWITCHD_START
241 ADD_OF_PORTS([br0], [1], [10])
242 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
243 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
244 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])
245 AT_CHECK([tail -1 stdout], [0],
246   [Datapath actions: 10
247 ])
248 OVS_VSWITCHD_STOP
249 AT_CLEANUP
250
251 AT_SETUP([ofproto-dpif - all group in action set])
252 OVS_VSWITCHD_START
253 ADD_OF_PORTS([br0], [1], [10], [11])
254 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,set_field:192.168.3.90->ip_src,bucket=output:11'])
255 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
256 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])
257 AT_CHECK([tail -2 stdout], [0],
258   [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=128
259 Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no)),11
260 ])
261 OVS_VSWITCHD_STOP
262 AT_CLEANUP
263
264 AT_SETUP([ofproto-dpif - indirect group in action set])
265 OVS_VSWITCHD_START
266 ADD_OF_PORTS([br0], [1], [10])
267 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
268 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
269 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])
270 AT_CHECK([tail -1 stdout], [0],
271   [Datapath actions: 10
272 ])
273 OVS_VSWITCHD_STOP
274 AT_CLEANUP
275
276 AT_SETUP([ofproto-dpif - select group])
277 OVS_VSWITCHD_START
278 ADD_OF_PORTS([br0], [1], [10], [11])
279 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
280 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
281
282 # Try a bunch of different flows and make sure that they get distributed
283 # at least somewhat.
284 for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
285     AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:0$d,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])
286     tail -1 stdout >> results
287 done
288 sort results | uniq -c
289 AT_CHECK([sort results | uniq], [0],
290   [Datapath actions: 10
291 Datapath actions: 11
292 ])
293 OVS_VSWITCHD_STOP
294 AT_CLEANUP
295
296 AT_SETUP([ofproto-dpif - select group with watch port])
297 OVS_VSWITCHD_START
298 ADD_OF_PORTS([br0], [1], [10], [11])
299 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
300 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
301 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,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])
302 AT_CHECK([tail -1 stdout], [0],
303   [Datapath actions: 11
304 ])
305 OVS_VSWITCHD_STOP
306 AT_CLEANUP
307
308 AT_SETUP([ofproto-dpif - select group with weight])
309 OVS_VSWITCHD_START
310 ADD_OF_PORTS([br0], [1], [10], [11], [12])
311 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11,weight=2000,bucket=output:12,weight=0'])
312 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
313 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:07,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])
314 AT_CHECK([tail -1 stdout], [0],
315   [Datapath actions: 11
316 ])
317 OVS_VSWITCHD_STOP
318 AT_CLEANUP
319
320 AT_SETUP([ofproto-dpif - fast failover group])
321 OVS_VSWITCHD_START
322 ADD_OF_PORTS([br0], [1], [10], [11])
323 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=ff,bucket=watch_port:10,output:10,bucket=watch_port:11,output:11'])
324 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
325 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])
326 AT_CHECK([tail -1 stdout], [0],
327   [Datapath actions: drop
328 ])
329 OVS_VSWITCHD_STOP
330 AT_CLEANUP
331
332 AT_SETUP([ofproto-dpif - group stats single bucket])
333 OVS_VSWITCHD_START
334 ADD_OF_PORTS([br0], [1], [10], [11])
335 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,weight=2000,bucket=output:11,weight=0'])
336 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
337 (
338 for i in `seq 0 2`;
339     do
340     pkt="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),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)"
341     AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
342     done
343 )
344 ovs-appctl time/warp 100
345 sleep 1  # wait for forwarders process packets
346 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
347 AT_CHECK([STRIP_XIDS stdout | sort], [0], [dnl
348  group_id=1234,ref_count=0,packet_count=3,byte_count=180,bucket0:packet_count=3,byte_count=180,bucket1:packet_count=0,byte_count=0
349 OFPST_GROUP reply (OF1.2):
350 ])
351 OVS_VSWITCHD_STOP
352 AT_CLEANUP
353
354 AT_SETUP([ofproto-dpif - group stats all buckets])
355 OVS_VSWITCHD_START
356 ADD_OF_PORTS([br0], [1], [10], [11])
357 AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:11'])
358 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
359 (
360 for i in `seq 0 2`;
361     do
362     pkt="in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:01:00),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)"
363     AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
364     done
365 )
366 ovs-appctl time/warp 100
367 sleep 1  # wait for forwarders process packets
368 AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
369 AT_CHECK([STRIP_XIDS stdout | sort], [0], [dnl
370  group_id=1234,ref_count=0,packet_count=3,byte_count=180,bucket0:packet_count=3,byte_count=180,bucket1:packet_count=3,byte_count=180
371 OFPST_GROUP reply (OF1.2):
372 ])
373 OVS_VSWITCHD_STOP
374 AT_CLEANUP
375
376 AT_SETUP([ofproto-dpif - registers])
377 OVS_VSWITCHD_START
378 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
379 AT_DATA([flows.txt], [dnl
380 in_port=90                 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
381 in_port=91                 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
382 in_port=92                 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
383 in_port=93                 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
384
385 in_port=2                  actions=load:0x000db000->NXM_NX_REG0[[]]
386 in_port=3                  actions=load:0xdea->NXM_NX_REG0[[20..31]]
387 in_port=4                  actions=load:0xeef->NXM_NX_REG0[[0..11]]
388 in_port=5                  actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
389 in_port=6                  actions=load:0x22222222->NXM_NX_REG2[[]]
390 in_port=7                  actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
391 in_port=8                  actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
392 in_port=9,reg0=0xdeadbeef  actions=output:20
393 in_port=10,reg1=0xdeadbeef actions=output:21
394 in_port=11,reg2=0xeef22dea actions=output:22
395
396 dnl Sanilty check all registers
397 in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
398 in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
399 in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
400 in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
401
402 ])
403 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
404 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
405 AT_CHECK([tail -1 stdout], [0],
406   [Datapath actions: 20,21,22,33
407 ])
408 OVS_VSWITCHD_STOP
409 AT_CLEANUP
410
411 AT_SETUP([ofproto-dpif - push-pop])
412 OVS_VSWITCHD_START
413 ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
414 AT_DATA([flows.txt], [dnl
415 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
416 in_port=2            actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
417 in_port=3            actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
418 in_port=4            actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
419 in_port=5            actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
420
421 ])
422 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
423 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
424 AT_CHECK([tail -1 stdout], [0],
425   [Datapath actions: 33,22,21,20
426 ])
427 OVS_VSWITCHD_STOP
428 AT_CLEANUP
429
430 AT_SETUP([ofproto-dpif - output])
431 OVS_VSWITCHD_START
432 ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
433 AT_DATA([flows.txt], [dnl
434 in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
435 in_port=2 actions=output:9
436 in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
437 in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
438 in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
439 in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
440 in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
441 in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
442 ])
443 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
444 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
445 AT_CHECK([tail -1 stdout], [0],
446   [Datapath actions: 9,55,10,55,66,11,77,88,9,1
447 ])
448 OVS_VSWITCHD_STOP
449 AT_CLEANUP
450
451 AT_SETUP([ofproto-dpif - dec_ttl])
452 OVS_VSWITCHD_START
453 ADD_OF_PORTS([br0], [1], [2], [3], [4])
454 AT_DATA([flows.txt], [dnl
455 table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
456 table=1 in_port=1 action=dec_ttl,output:3
457 ])
458 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
459 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
460 AT_CHECK([tail -4 stdout], [0],
461   [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=2
462 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),2,4
463 This flow is handled by the userspace slow path because it:
464         - Sends "packet-in" messages to the OpenFlow controller.
465 ])
466 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=3,frag=no)'], [0], [stdout])
467 AT_CHECK([tail -2 stdout], [0],
468   [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=1,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=3
469 Datapath actions: set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)),2,set(ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=1,frag=no)),3,4
470 ])
471 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'], [0], [stdout])
472 AT_CHECK([tail -2 stdout], [0],
473   [Megaflow: recirc_id=0,skb_priority=0,ipv6,in_port=1,ipv6_src=::1,ipv6_dst=::2,ipv6_label=0x00000,nw_proto=10,nw_tos=112,nw_ecn=0,nw_ttl=128
474 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
475 ])
476
477 AT_CAPTURE_FILE([ofctl_monitor.log])
478 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
479 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=111,tos=0,ttl=2,frag=no)' -generate], [0], [stdout])
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): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
483 ip,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_proto=111,nw_tos=0,nw_ecn=0,nw_ttl=1
484 ])
485 OVS_VSWITCHD_STOP
486 AT_CLEANUP
487
488 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
489 dnl buffer to be resized just before pushing the id of the dec_ttl action.
490 dnl Thus the implementation must account for this by using the
491 dnl reallocated buffer rather than the original buffer.
492 dnl
493 dnl A number of similar rules are added to try and exercise
494 dnl xrealloc sufficiently that it returns a different base pointer
495 AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
496 OVS_VSWITCHD_START
497 ADD_OF_PORTS([br0], [1])
498 (for i in `seq 0 255`; do
499   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
500  done) > flows.txt
501 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
502 OVS_VSWITCHD_STOP
503 AT_CLEANUP
504
505 dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
506 dnl buffer to be resized just before pushing the id of the dec_ttl action.
507 dnl Thus the implementation must account for this by using the
508 dnl reallocated buffer rather than the original buffer.
509 dnl
510 dnl A number of similar rules are added to try and exercise
511 dnl xrealloc sufficiently that it returns a different base pointer
512 AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
513 OVS_VSWITCHD_START
514 ADD_OF_PORTS([br0], [1])
515 (for i in `seq 0 255`; do
516   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
517  done) > flows.txt
518 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
519 OVS_VSWITCHD_STOP
520 AT_CLEANUP
521
522 dnl A note action at offset 24 in ofpacts will cause the ofpacts
523 dnl buffer to be resized just before pushing the id of the dec_ttl action.
524 dnl Thus the implementation must account for this by using the
525 dnl reallocated buffer rather than the original buffer.
526 dnl
527 dnl A number of similar rules are added to try and exercise
528 dnl xrealloc sufficiently that it returns a different base pointer
529 AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
530 OVS_VSWITCHD_START
531 ADD_OF_PORTS([br0], [1])
532 (for i in `seq 0 255`; do
533   printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
534  done) > flows.txt
535 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
536 OVS_VSWITCHD_STOP
537 AT_CLEANUP
538
539 AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
540 OVS_VSWITCHD_START
541 ADD_OF_PORTS([br0], [1], [2])
542
543 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
544
545 # "in_port" defaults to OFPP_NONE if it's not specified.
546 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"
547 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
548 AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
549 1
550 2
551 100
552 ])
553
554 OVS_VSWITCHD_STOP
555 AT_CLEANUP
556
557 AT_SETUP([ofproto-dpif - DSCP])
558 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
559 ADD_OF_PORTS([br0], [9])
560 AT_DATA([flows.txt], [dnl
561 actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
562 ])
563 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
564 AT_CHECK([ovs-vsctl -- \
565         set Port p1 qos=@newqos --\
566         --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
567         --id=@q1 create Queue dscp=1 --\
568         --id=@q2 create Queue dscp=2], [0], [ignore])
569 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(9),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0xff,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
570 AT_CHECK([tail -2 stdout], [0],
571   [Megaflow: recirc_id=0,skb_priority=0,icmp,in_port=9,nw_src=1.1.1.1,nw_dst=2.2.2.2,nw_tos=252,nw_ecn=3,nw_ttl=128
572 Datapath actions: dnl
573 100,dnl
574 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
575 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
576 1,dnl
577 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
578 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
579 set(ipv4(src=1.1.1.1,dst=2.2.2.2,proto=1,tos=0x3,ttl=128,frag=no)),1,dnl
580 100
581 ])
582 OVS_VSWITCHD_STOP
583 AT_CLEANUP
584
585 AT_SETUP([ofproto-dpif - output/flood flags])
586 OVS_VSWITCHD_START
587 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
588
589 AT_DATA([flows.txt], [dnl
590 in_port=local actions=local,flood
591 in_port=1 actions=flood
592 in_port=2 actions=all
593 in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
594 in_port=4 actions=enqueue:LOCAL:1,enqueue:1:1,enqueue:2:1,enqueue:3:2,enqueue:4:1,enqueue:5:1,enqueue:6:1,enqueue:7:1
595 ])
596 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
597 AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
598 AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
599
600 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
601 AT_CHECK([tail -1 stdout \
602 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
603 1
604 2
605 3
606 4
607 7
608 ])
609
610 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
611 AT_CHECK([tail -1 stdout \
612 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
613 100
614 2
615 3
616 4
617 7
618 ])
619
620 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
621 AT_CHECK([tail -1 stdout \
622 | sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
623 1
624 100
625 3
626 4
627 6
628 7
629 ])
630
631 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
632 AT_CHECK([tail -1 stdout], [0],
633   [Datapath actions: 100,1,2,4,6,7
634 ])
635
636 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=00:00:00:00:00:01,dst=00:00:00:00:00:02),eth_type(0x0900)'], [0], [stdout])
637 AT_CHECK([tail -1 stdout], [0],
638   [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
639 ])
640 OVS_VSWITCHD_STOP
641 AT_CLEANUP
642
643 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
644 OVS_VSWITCHD_START([dnl
645    add-port br0 p1 -- set Interface p1 type=dummy
646 ])
647 ON_EXIT([kill `cat ovs-ofctl.pid`])
648
649 AT_CAPTURE_FILE([ofctl_monitor.log])
650
651 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
652
653 for i in 1 2 3 ; do
654     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),tcp_flags(0x010)'
655 done
656 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
657 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
658 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
659 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
660 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_flags=0x010 tcp_csum:0
661 dnl
662 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
663 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_flags=0x010 tcp_csum:0
664 dnl
665 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
666 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_flags=0x010 tcp_csum:0
667 ])
668
669 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
670 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
671 NXST_FLOW reply:
672 ])
673
674 OVS_VSWITCHD_STOP
675 AT_CLEANUP
676
677 AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
678 OVS_VSWITCHD_START([dnl
679    add-port br0 p1 -- set Interface p1 type=dummy
680 ])
681 ON_EXIT([kill `cat ovs-ofctl.pid`])
682
683 AT_CAPTURE_FILE([ofctl_monitor.log])
684 AT_CHECK([ovs-ofctl del-flows br0])
685
686 AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
687
688 dnl Test that missed packets are droped
689 for i in 1 2 3 ; do
690     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),tcp_flags(0x010)'
691 done
692 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
693
694 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
695 ])
696
697 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
698 AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
699 OFPST_FLOW reply (OF1.3):
700 ])
701
702 OVS_VSWITCHD_STOP
703 AT_CLEANUP
704
705 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
706 OVS_VSWITCHD_START([dnl
707    add-port br0 p1 -- set Interface p1 type=dummy
708 ])
709 ON_EXIT([kill `cat ovs-ofctl.pid`])
710
711 AT_CAPTURE_FILE([ofctl_monitor.log])
712 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
713
714 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
715
716 for i in 1 2 3 ; do
717     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),tcp_flags(0x010)'
718 done
719 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
720 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
721 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
722 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
723 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_flags=0x010 tcp_csum:0
724 dnl
725 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
726 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_flags=0x010 tcp_csum:0
727 dnl
728 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
729 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_flags=0x010 tcp_csum:0
730 ])
731
732 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
733 sleep 1  # wait for revalidator to update stats
734 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
735  n_packets=3, n_bytes=180, actions=goto_table:1
736 OFPST_FLOW reply (OF1.2):
737 ])
738
739 OVS_VSWITCHD_STOP
740 AT_CLEANUP
741
742 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
743 OVS_VSWITCHD_START([dnl
744    add-port br0 p1 -- set Interface p1 type=dummy
745 ])
746 ON_EXIT([kill `cat ovs-ofctl.pid`])
747
748 AT_CAPTURE_FILE([ofctl_monitor.log])
749 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
750
751 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
752
753 for i in 1 2 3 ; do
754     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),tcp_flags(0x010)'
755 done
756
757 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
758 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
759 ])
760
761 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
762 sleep 1  # wait for revalidator to update stats
763 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
764  n_packets=3, n_bytes=180, actions=resubmit(1,1)
765 OFPST_FLOW reply (OF1.2):
766 ])
767
768 OVS_VSWITCHD_STOP
769 AT_CLEANUP
770
771 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
772 OVS_VSWITCHD_START([dnl
773    add-port br0 p1 -- set Interface p1 type=dummy
774 ])
775 ON_EXIT([kill `cat ovs-ofctl.pid`])
776
777 AT_CAPTURE_FILE([ofctl_monitor.log])
778 AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
779 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
780
781 dnl Miss table 0, Hit table 1
782 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
783
784 for i in 1 2 3 ; do
785     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=9),tcp_flags(0x010)'
786 done
787 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
788 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
789
790 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
791 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
792 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=9,tcp_flags=0x010 tcp_csum:0
793 dnl
794 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
795 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=9,tcp_flags=0x010 tcp_csum:0
796 dnl
797 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
798 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=9,tcp_flags=0x010 tcp_csum:0
799 ])
800
801 dnl Hit table 0, Miss all other tables, sent to controller
802 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
803
804 for i in 1 2 3 ; do
805     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),tcp_flags(0x010)'
806 done
807 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
808 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
809
810 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
811 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
812 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_flags=0x010 tcp_csum:0
813 dnl
814 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
815 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_flags=0x010 tcp_csum:0
816 dnl
817 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
818 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_flags=0x010 tcp_csum:0
819 ])
820
821 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
822 sleep 1  # wait for revalidator to update stats
823 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
824  table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
825 OFPST_FLOW reply (OF1.2):
826 ])
827
828 OVS_VSWITCHD_STOP
829 AT_CLEANUP
830
831 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
832 OVS_VSWITCHD_START([dnl
833    add-port br0 p1 -- set Interface p1 type=dummy
834 ])
835 ON_EXIT([kill `cat ovs-ofctl.pid`])
836
837 AT_CAPTURE_FILE([ofctl_monitor.log])
838 AT_DATA([flows.txt], [dnl
839 table=0 actions=goto_table(1)
840 table=2 dl_src=10:11:11:11:11:11 actions=controller
841 ])
842 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
843 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
844
845 dnl Hit table 0, Miss table 1, Hit table 2
846 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
847
848 for i in 1 2 3 ; do
849     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=9),tcp_flags(0x010)'
850 done
851 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
852 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
853
854 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
855 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
856 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=9,tcp_flags=0x010 tcp_csum:0
857 dnl
858 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
859 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=9,tcp_flags=0x010 tcp_csum:0
860 dnl
861 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
862 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=9,tcp_flags=0x010 tcp_csum:0
863 ])
864
865 dnl Hit table 1, Miss all other tables, sent to controller
866 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
867
868 for i in 1 2 3 ; do
869     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),tcp_flags(0x010)'
870 done
871 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
872 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
873
874 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
875 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
876 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_flags=0x010 tcp_csum:0
877 dnl
878 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
879 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_flags=0x010 tcp_csum:0
880 dnl
881 NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
882 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_flags=0x010 tcp_csum:0
883 ])
884
885 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
886 sleep 1  # wait for revalidator to update stats
887 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
888  n_packets=6, n_bytes=360, actions=goto_table:1
889  table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
890 OFPST_FLOW reply (OF1.2):
891 ])
892
893 OVS_VSWITCHD_STOP
894 AT_CLEANUP
895
896 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
897 OVS_VSWITCHD_START([dnl
898    add-port br0 p1 -- set Interface p1 type=dummy
899 ])
900 ON_EXIT([kill `cat ovs-ofctl.pid`])
901
902 AT_CAPTURE_FILE([ofctl_monitor.log])
903 AT_DATA([flows.txt], [dnl
904 table=0 actions=resubmit(1,1)
905 table=2 dl_src=10:11:11:11:11:11 actions=controller
906 ])
907 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
908 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
909
910 dnl Hit table 0, Miss table 1, Dropped
911 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
912
913 for i in 1 2 3 ; do
914     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=9),tcp_flags(0x010)'
915 done
916 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
917
918 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
919 ])
920
921 dnl Hit table 1, Dropped
922 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
923
924 for i in 1 2 3 ; do
925     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),tcp_flags(0x010)'
926 done
927 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
928
929 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
930 ])
931
932 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
933 sleep 1  # wait for revalidator to update stats
934 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
935  n_packets=6, n_bytes=360, actions=resubmit(1,1)
936  table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
937 OFPST_FLOW reply (OF1.2):
938 ])
939
940 OVS_VSWITCHD_STOP
941 AT_CLEANUP
942
943 AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
944 OVS_VSWITCHD_START([dnl
945    add-port br0 p1 -- set Interface p1 type=dummy
946 ])
947 ON_EXIT([kill `cat ovs-ofctl.pid`])
948
949 AT_CAPTURE_FILE([ofctl_monitor.log])
950 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
951
952 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
953
954 dnl Test that missed packets are droped
955 for i in 1 2 3 ; do
956     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),tcp_flags(0x010)'
957 done
958 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
959
960 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
961 ])
962
963 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
964 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
965 NXST_FLOW reply:
966 ])
967
968 OVS_VSWITCHD_STOP
969 AT_CLEANUP
970
971 AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
972 OVS_VSWITCHD_START([dnl
973    add-port br0 p1 -- set Interface p1 type=dummy
974 ])
975 ON_EXIT([kill `cat ovs-ofctl.pid`])
976
977 AT_CAPTURE_FILE([ofctl_monitor.log])
978 AT_CHECK([ovs-ofctl del-flows br0])
979 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
980 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
981
982 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
983
984 dnl Test that missed packets are droped
985 for i in 1 2 3 ; do
986     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),tcp_flags(0x010)'
987 done
988 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
989
990 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
991 ])
992
993 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
994 sleep 1  # wait for revalidator to update stats
995 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
996  n_packets=3, n_bytes=180, actions=goto_table:1
997 OFPST_FLOW reply (OF1.2):
998 ])
999
1000 OVS_VSWITCHD_STOP
1001 AT_CLEANUP
1002
1003 AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1004 OVS_VSWITCHD_START([dnl
1005    add-port br0 p1 -- set Interface p1 type=dummy
1006 ])
1007 ON_EXIT([kill `cat ovs-ofctl.pid`])
1008
1009 AT_CAPTURE_FILE([ofctl_monitor.log])
1010 AT_CHECK([ovs-ofctl del-flows br0])
1011 AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1012 AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1013
1014 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1015
1016 dnl Test that missed packets are droped
1017 for i in 1 2 3 ; do
1018     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),tcp_flags(0x010)'
1019 done
1020 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1021
1022 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1023 ])
1024
1025 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1026 sleep 1  # wait for revalidator to update stats
1027 AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1028  n_packets=3, n_bytes=180, actions=resubmit(1,1)
1029 OFPST_FLOW reply (OF1.2):
1030 ])
1031
1032 OVS_VSWITCHD_STOP
1033 AT_CLEANUP
1034
1035 AT_SETUP([ofproto-dpif - controller])
1036 OVS_VSWITCHD_START([dnl
1037    add-port br0 p1 -- set Interface p1 type=dummy
1038 ])
1039 ON_EXIT([kill `cat ovs-ofctl.pid`])
1040
1041 AT_CAPTURE_FILE([ofctl_monitor.log])
1042 AT_DATA([flows.txt], [dnl
1043 cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
1044 cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
1045 cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1046
1047 cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1048 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)
1049 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)
1050 cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1051 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)
1052 cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1053 cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
1054 cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
1055 cookie=0xd dl_src=80:88:88:88:88:88 arp actions=load:2->OXM_OF_ARP_OP[[]],controller,load:0xc0a88001->OXM_OF_ARP_SPA[[]],controller,load:0x404444444441->OXM_OF_ARP_THA[[]],load:0x01010101->OXM_OF_ARP_SPA[[]],load:0x02020202->OXM_OF_ARP_TPA[[]],controller
1056 ])
1057 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1058
1059 dnl Flow miss.
1060 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1061
1062 for i in 1 2 3 ; do
1063     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),tcp_flags(0x010)'
1064 done
1065 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1066 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1067
1068 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1069 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1070 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_flags=0x010 tcp_csum:0
1071 dnl
1072 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1073 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_flags=0x010 tcp_csum:0
1074 dnl
1075 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1076 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_flags=0x010 tcp_csum:0
1077 ])
1078
1079 dnl Singleton controller action.
1080 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1081
1082 for i in 1 2 3 ; do
1083     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),tcp_flags(0x002)'
1084 done
1085 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1086 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1087
1088 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1089 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1090 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_flags=0x002 tcp_csum:0
1091 dnl
1092 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1093 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_flags=0x002 tcp_csum:0
1094 dnl
1095 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1096 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_flags=0x002 tcp_csum:0
1097 ])
1098
1099 dnl Modified controller action.
1100 AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1101
1102 for i in 1 2 3 ; do
1103     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),tcp_flags(0x001)'
1104 done
1105 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1106 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1107
1108 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1109 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1110 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_flags=0x001 tcp_csum:0
1111 dnl
1112 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1113 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_flags=0x001 tcp_csum:0
1114 dnl
1115 OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1116 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_flags=0x001 tcp_csum:0
1117 ])
1118
1119 dnl Modified VLAN controller action.
1120 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1121
1122 for i in 1 2 3; do
1123     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:41,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=16,tos=0,ttl=64,frag=no)'
1124 done
1125 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1126 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1127
1128 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1129 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1130 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1131 dnl
1132 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1133 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1134 dnl
1135 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1136 ip,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:44:41,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1137 ])
1138
1139 dnl Checksum TCP.
1140 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1141
1142 for i in 1 ; do
1143     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),tcp_flags(0x001)'
1144 done
1145 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1146 ovs-appctl -t ovs-ofctl exit
1147
1148 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1149 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1150 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_flags=0x001 tcp_csum:0
1151 dnl
1152 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1153 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_flags=0x001 tcp_csum:0
1154 dnl
1155 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)
1156 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_flags=0x001 tcp_csum:0
1157 dnl
1158 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)
1159 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_flags=0x001 tcp_csum:0
1160 dnl
1161 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)
1162 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_flags=0x001 tcp_csum:1a03
1163 dnl
1164 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)
1165 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_flags=0x001 tcp_csum:3205
1166 dnl
1167 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)
1168 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_flags=0x001 tcp_csum:31b8
1169 dnl
1170 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)
1171 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_flags=0x001 tcp_csum:316d
1172 dnl
1173 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)
1174 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_flags=0x001 tcp_csum:316d
1175 ])
1176
1177 dnl Checksum UDP.
1178 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1179
1180 for i in 1 ; do
1181     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'
1182 done
1183 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1184 ovs-appctl -t ovs-ofctl exit
1185
1186 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1187 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1188 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
1189 dnl
1190 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered)
1191 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
1192 dnl
1193 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)
1194 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
1195 dnl
1196 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)
1197 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
1198 dnl
1199 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)
1200 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
1201 dnl
1202 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)
1203 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
1204 dnl
1205 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)
1206 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
1207 dnl
1208 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)
1209 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
1210 dnl
1211 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)
1212 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
1213 ])
1214
1215 dnl Modified ARP controller action.
1216 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1217
1218 for i in 1 2 3; do
1219     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,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:05,tha=00:00:00:00:00:00)'
1220 done
1221
1222 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1223 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1224 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1225 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1226 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1227 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1228 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1229 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1230 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1231 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1232 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1233 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1234 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1235 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1236 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1237 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1238 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1239 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1240 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1241 arp,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=1.1.1.1,arp_tpa=2.2.2.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1242 ])
1243
1244 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1245
1246 dnl Checksum SCTP.
1247 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1248
1249 for i in 1 ; do
1250     ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 20 22 22 22 22 22 08 00 45 00 00 24 00 00 00 00 00 84 00 00 C0 A8 00 01 C0 A8 00 02 04 58 08 af 00 00 00 00 d9 d7 91 57 01 00 00 34 cf 28 ec 4e 00 01 40 00 00 0a ff ff b7 53 24 19 00 05 00 08 7f 00 00 01 00 05 00 08 c0 a8 02 07 00 0c 00 06 00 05 00 00 80 00 00 04 c0 00 00 04'
1251 done
1252
1253 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1254 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1255 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1256 NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
1257 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1258 dnl
1259 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 in_port=1 reg0=0x1 (via action) data_len=102 (unbuffered)
1260 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1261 dnl
1262 NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=102 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=102 (unbuffered)
1263 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1264 dnl
1265 NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=102 (unbuffered)
1266 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1267 dnl
1268 NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=102 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=102 (unbuffered)
1269 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1270 dnl
1271 NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1272 sctp,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=1112,tp_dst=2223 sctp_csum:d9d79157
1273 dnl
1274 NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1275 sctp,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=2223 sctp_csum:7f12662e
1276 dnl
1277 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1278 sctp,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 sctp_csum:a7e86f67
1279 dnl
1280 NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=102 (unbuffered)
1281 sctp,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 sctp_csum:a7e86f67
1282 ])
1283
1284 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1285  cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1286  cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1287  cookie=0x3, table=1, n_packets=3, n_bytes=218, in_port=80 actions=load:0x1->NXM_NX_REG0[[]],mod_vlan_vid:80,CONTROLLER:65535,resubmit(81,2)
1288  cookie=0x4, table=2, n_packets=3, n_bytes=218, in_port=81 actions=load:0x2->NXM_NX_REG1[[]],mod_dl_src:80:81:81:81:81:81,CONTROLLER:65535,resubmit(82,3)
1289  cookie=0x5, table=3, n_packets=3, n_bytes=218, in_port=82 actions=load:0x3->NXM_NX_REG2[[]],mod_dl_dst:82:82:82:82:82:82,CONTROLLER:65535,resubmit(83,4)
1290  cookie=0x6, table=4, n_packets=3, n_bytes=218, in_port=83 actions=load:0x4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,CONTROLLER:65535,resubmit(84,5)
1291  cookie=0x7, table=5, n_packets=3, n_bytes=218, 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)
1292  cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1293  cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1294  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,CONTROLLER:65535
1295  cookie=0xd, n_packets=3, n_bytes=180, arp,dl_src=80:88:88:88:88:88 actions=load:0x2->NXM_OF_ARP_OP[[]],CONTROLLER:65535,load:0xc0a88001->NXM_OF_ARP_SPA[[]],CONTROLLER:65535,load:0x404444444441->NXM_NX_ARP_THA[[]],load:0x1010101->NXM_OF_ARP_SPA[[]],load:0x2020202->NXM_OF_ARP_TPA[[]],CONTROLLER:65535
1296  n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1297 NXST_FLOW reply:
1298 ])
1299
1300 OVS_VSWITCHD_STOP
1301 AT_CLEANUP
1302
1303 AT_SETUP([ofproto-dpif - MPLS handling])
1304 OVS_VSWITCHD_START([dnl
1305    add-port br0 p1 -- set Interface p1 type=dummy
1306 ])
1307 ON_EXIT([kill `cat ovs-ofctl.pid`])
1308
1309 AT_CAPTURE_FILE([ofctl_monitor.log])
1310 AT_DATA([flows.txt], [dnl
1311 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
1312 cookie=0xa dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],load:3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,controller
1313 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
1314 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
1315 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
1316 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
1317 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
1318 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
1319 cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1320 cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1321 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
1322 ])
1323 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1324
1325 dnl Modified MPLS controller action.
1326 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1327
1328 for i in 1 2 3; do
1329     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=17,tos=0,ttl=64,frag=no),udp(src=7777,dst=80)'
1330 done
1331 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1332 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1333
1334 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1335 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1336 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
1337 dnl
1338 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1339 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
1340 dnl
1341 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1342 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
1343 ])
1344
1345 dnl Modified MPLS controller action.
1346 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1347
1348 for i in 1 2 3; do
1349     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=41: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=16,tos=0,ttl=64,frag=no)'
1350 done
1351 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1352 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1353
1354 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1355 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1356 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1357 dnl
1358 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1359 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1360 dnl
1361 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1362 ip,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=41:44:44:44:44:42,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=16,nw_tos=0,nw_ecn=0,nw_ttl=64
1363 ])
1364
1365 dnl Modified MPLS controller action.
1366 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1367
1368 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)
1369
1370 for i in 1 2 3; do
1371     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)'
1372 done
1373 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1374 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1375
1376 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1377 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1378 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,mpls_lse1=46912
1379 dnl
1380 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1381 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,mpls_lse1=46912
1382 dnl
1383 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1384 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,mpls_lse1=46912
1385 ])
1386
1387 dnl Modified MPLS controller action.
1388 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1389
1390 for i in 1 2 3; do
1391     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=16,tos=0,ttl=64,frag=no))'
1392 done
1393 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1394 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1395
1396 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1397 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1398 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
1399 dnl
1400 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1401 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
1402 dnl
1403 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1404 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
1405 ])
1406
1407 dnl Modified MPLS controller action.
1408 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1409
1410 for i in 1 2 3; do
1411     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=16,tos=0,ttl=64,frag=no)'
1412 done
1413 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1414 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1415
1416 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1417 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1418 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
1419 dnl
1420 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1421 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
1422 dnl
1423 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1424 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
1425 ])
1426
1427 dnl Modified MPLS controller action.
1428 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1429
1430 for i in 1 2 3; do
1431     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=16,tos=0,ttl=64,frag=no)'
1432 done
1433 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1434 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1435
1436 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1437 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1438 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
1439 dnl
1440 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1441 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
1442 dnl
1443 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1444 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
1445 ])
1446
1447 dnl Modified MPLS controller action.
1448 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1449
1450 for i in 1 2 3; do
1451     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=16,tos=0,ttl=64,frag=no)'
1452 done
1453 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1454 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1455
1456 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1457 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1458 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
1459 dnl
1460 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1461 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
1462 dnl
1463 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1464 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
1465 ])
1466
1467 dnl Modified MPLS controller action.
1468 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1469
1470 for i in 1 2 3; do
1471     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=16,tos=0,ttl=64,frag=no)'
1472 done
1473 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1474 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1475
1476 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1477 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1478 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
1479 dnl
1480 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1481 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
1482 dnl
1483 NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1484 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
1485 ])
1486
1487 dnl Modified MPLS actions.
1488 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1489
1490 for i in 1 2 3; do
1491     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)'
1492 done
1493 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1494 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1495
1496 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1497 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1498 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
1499 dnl
1500 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1501 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
1502 dnl
1503 NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1504 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
1505 ])
1506
1507 dnl Modified MPLS ipv6 controller action.
1508 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1509
1510 for i in 1 2 3; do
1511     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)'
1512 done
1513 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1514 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1515
1516 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1517 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1518 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=128,mpls_bos=1
1519 dnl
1520 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1521 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=128,mpls_bos=1
1522 dnl
1523 NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1524 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=128,mpls_bos=1
1525 ])
1526
1527
1528 dnl Modified MPLS pop action.
1529 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1530 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)
1531 dnl             (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1532
1533 AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1534
1535 for i in 1 2 3; do
1536     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'
1537 done
1538 #for i in 2 3; do
1539 #    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)'
1540 #done
1541 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1542 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1543
1544 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1545 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1546 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_flags=0x000 tcp_csum:7744
1547 dnl
1548 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1549 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_flags=0x000 tcp_csum:7744
1550 dnl
1551 NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
1552 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_flags=0x000 tcp_csum:7744
1553 ])
1554
1555 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1556
1557 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1558  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
1559  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
1560  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
1561  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
1562  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
1563  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
1564  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
1565  cookie=0xa, n_packets=3, n_bytes=180, dl_src=41:44:44:44:44:42 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],load:0x3->OXM_OF_MPLS_TC[[]],pop_mpls:0x0800,CONTROLLER:65535
1566  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
1567  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
1568  cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1569 NXST_FLOW reply:
1570 ])
1571
1572 OVS_VSWITCHD_STOP
1573 AT_CLEANUP
1574
1575
1576 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
1577 OVS_VSWITCHD_START([dnl
1578    add-port br0 p1 -- set Interface p1 type=dummy
1579 ])
1580 ON_EXIT([kill `cat ovs-ofctl.pid`])
1581
1582 AT_CAPTURE_FILE([ofctl_monitor.log])
1583 # A table-miss flow has priority 0 and no match
1584 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1585
1586 dnl Singleton controller action.
1587 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1588
1589 for i in 1 2 3 ; do
1590     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),tcp_flags(0x002)'
1591 done
1592 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1593 ovs-appctl -t ovs-ofctl exit
1594
1595 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1596 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1597 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_flags=0x002 tcp_csum:0
1598 dnl
1599 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1600 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_flags=0x002 tcp_csum:0
1601 dnl
1602 OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
1603 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_flags=0x002 tcp_csum:0
1604 ])
1605
1606 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1607
1608 AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1609  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1610 NXST_FLOW reply:
1611 ])
1612
1613 OVS_VSWITCHD_STOP
1614 AT_CLEANUP
1615
1616
1617 AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
1618 OVS_VSWITCHD_START([dnl
1619    add-port br0 p1 -- set Interface p1 type=dummy
1620 ])
1621 ON_EXIT([kill `cat ovs-ofctl.pid`])
1622
1623 AT_CAPTURE_FILE([ofctl_monitor.log])
1624 # A table-miss flow has priority 0 and no match
1625 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
1626
1627 dnl Singleton controller action.
1628 AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1629
1630 for i in 1 2 3 ; do
1631     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),tcp_flags(0x002)'
1632 done
1633 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1634 ovs-appctl -t ovs-ofctl exit
1635
1636 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1637
1638 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1639 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1640 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_flags=0x002 tcp_csum:0
1641 dnl
1642 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1643 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_flags=0x002 tcp_csum:0
1644 dnl
1645 OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
1646 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_flags=0x002 tcp_csum:0
1647 ])
1648
1649 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1650
1651 AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1652  n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
1653 OFPST_FLOW reply (OF1.3):
1654 ])
1655
1656 OVS_VSWITCHD_STOP
1657 AT_CLEANUP
1658
1659 AT_SETUP([ofproto-dpif - ARP modification slow-path])
1660 OVS_VSWITCHD_START
1661 ADD_OF_PORTS([br0], [1], [2])
1662
1663 ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
1664 ovs-ofctl add-flow br0 'in_port=1,arp actions=load:2->OXM_OF_ARP_OP[[]],2,load:0xc0a88001->OXM_OF_ARP_SPA[[]],2,load:0x404444444441->OXM_OF_ARP_THA[[]],2'
1665
1666 # Input some packets that should follow the arp modification slow-path.
1667 for i in 1 2 3; do
1668     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=80:88:88:88:88:88,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:05,tha=00:00:00:00:00:00)'
1669 done
1670 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1671
1672 # Check the packets that were output.
1673 AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
1674 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1675 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1676 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1677 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1678 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1679 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1680 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1681 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=00:00:00:00:00:00
1682 arp,metadata=0,in_port=ANY,vlan_tci=0x0000,dl_src=80:88:88:88:88:88,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.128.1,arp_tpa=192.168.0.2,arp_op=2,arp_sha=50:54:00:00:00:05,arp_tha=40:44:44:44:44:41
1683 ])
1684
1685 OVS_VSWITCHD_STOP
1686 AT_CLEANUP
1687
1688 AT_SETUP([ofproto-dpif - VLAN handling])
1689 OVS_VSWITCHD_START(
1690   [set Bridge br0 fail-mode=standalone -- \
1691    add-port br0 p1                                  trunks=10,12 -- \
1692    add-port br0 p2                           tag=10              -- \
1693    add-port br0 p3                           tag=12              \
1694                    other-config:priority-tags=true               -- \
1695    add-port br0 p4                           tag=12              -- \
1696    add-port br0 p5 vlan_mode=native-tagged   tag=10              -- \
1697    add-port br0 p6 vlan_mode=native-tagged   tag=10 trunks=10,12 -- \
1698    add-port br0 p7 vlan_mode=native-untagged tag=12              -- \
1699    add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
1700                    other-config:priority-tags=true               -- \
1701    set Interface p1 type=dummy -- \
1702    set Interface p2 type=dummy -- \
1703    set Interface p3 type=dummy -- \
1704    set Interface p4 type=dummy -- \
1705    set Interface p5 type=dummy -- \
1706    set Interface p6 type=dummy -- \
1707    set Interface p7 type=dummy -- \
1708    set Interface p8 type=dummy --])
1709
1710 dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
1711 dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
1712 dnl actions.
1713 for tuple in \
1714         "100 none 0 drop" \
1715         "100 0    0 drop" \
1716         "100 0    1 drop" \
1717         "100 10   0 1,5,6,7,8,pop_vlan,2" \
1718         "100 10   1 1,5,6,7,8,pop_vlan,2" \
1719         "100 11   0 5,7" \
1720         "100 11   1 5,7" \
1721         "100 12   0 1,5,6,pop_vlan,3,4,7,8" \
1722         "100 12   1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1723         "1  none 0 drop" \
1724         "1  0    0 drop" \
1725         "1  0    1 drop" \
1726         "1  10   0 5,6,7,8,100,pop_vlan,2" \
1727         "1  10   1 5,6,7,8,100,pop_vlan,2" \
1728         "1  11   0 drop" \
1729         "1  11   1 drop" \
1730         "1  12   0 5,6,100,pop_vlan,3,4,7,8" \
1731         "1  12   1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1732         "2  none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1733         "2  0    0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
1734         "2  0    1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
1735         "2  10   0 drop" \
1736         "2  10   1 drop" \
1737         "2  11   0 drop" \
1738         "2  11   1 drop" \
1739         "2  12   0 drop" \
1740         "2  12   1 drop" \
1741         "3  none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1742         "3  0    0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1743         "3  0    1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1744         "3  10   0 drop" \
1745         "3  10   1 drop" \
1746         "3  11   0 drop" \
1747         "3  11   1 drop" \
1748         "3  12   0 drop" \
1749         "3  12   1 drop" \
1750         "4  none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1751         "4  0    0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1752         "4  0    1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1753         "4  10   0 drop" \
1754         "4  10   1 drop" \
1755         "4  11   0 drop" \
1756         "4  11   1 drop" \
1757         "4  12   0 drop" \
1758         "4  12   1 drop" \
1759         "5  none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1760         "5  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
1761         "5  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
1762         "5  10   0 1,6,7,8,100,pop_vlan,2" \
1763         "5  10   1 1,6,7,8,100,pop_vlan,2" \
1764         "5  11   0 7,100" \
1765         "5  11   1 7,100" \
1766         "5  12   0 1,6,100,pop_vlan,3,4,7,8" \
1767         "5  12   1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1768         "6  none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1769         "6  0    0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
1770         "6  0    1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
1771         "6  10   0 1,5,7,8,100,pop_vlan,2" \
1772         "6  10   1 1,5,7,8,100,pop_vlan,2" \
1773         "6  11   0 drop" \
1774         "6  11   1 drop" \
1775         "6  12   0 1,5,100,pop_vlan,3,4,7,8" \
1776         "6  12   1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
1777         "7  none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1778         "7  0    0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
1779         "7  0    1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
1780         "7  10   0 1,5,6,8,100,pop_vlan,2" \
1781         "7  10   1 1,5,6,8,100,pop_vlan,2" \
1782         "7  11   0 5,100" \
1783         "7  11   1 5,100" \
1784         "7  12   0 1,5,6,100,pop_vlan,3,4,8" \
1785         "7  12   1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
1786         "8  none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1787         "8  0    0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
1788         "8  0    1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
1789         "8  10   0 1,5,6,7,100,pop_vlan,2" \
1790         "8  10   1 1,5,6,7,100,pop_vlan,2" \
1791         "8  11   0 drop" \
1792         "8  11   1 drop" \
1793         "8  12   0 1,5,6,100,pop_vlan,3,4,7" \
1794         "8  12   1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
1795 do
1796   set $tuple
1797   in_port=$1
1798   vlan=$2
1799   pcp=$3
1800   expected=$4
1801
1802   if test $vlan = none; then
1803     flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
1804   else
1805     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))"
1806   fi
1807
1808   echo "----------------------------------------------------------------------"
1809   echo "in_port=$in_port vlan=$vlan pcp=$pcp"
1810
1811   AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
1812   actual=`tail -1 stdout | sed 's/Datapath actions: //'`
1813
1814   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
1815   mv stdout expout
1816   AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
1817 done
1818
1819 OVS_VSWITCHD_STOP
1820 AT_CLEANUP
1821
1822 AT_SETUP([ofproto-dpif - MPLS handling])
1823 OVS_VSWITCHD_START([dnl
1824    add-port br0 p1 -- set Interface p1 type=dummy
1825 ])
1826 ON_EXIT([kill `cat ovs-ofctl.pid`])
1827
1828 AT_CAPTURE_FILE([ofctl_monitor.log])
1829 AT_DATA([flows.txt], [dnl
1830 dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
1831 dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
1832 dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
1833 ])
1834 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1835
1836 dnl In this test, we push an MPLS tag to an ethernet packet.
1837 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1838
1839 for i in 1 2 3; do
1840     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:00,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)'
1841 done
1842 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1843 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1844
1845 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1846 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1847 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1848 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1849 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1850 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1851 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1852 dnl
1853 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1854 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1855 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1856 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1857 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1858 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1859 dnl
1860 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1861 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1862 00000000  50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
1863 00000010  01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
1864 00000020  00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
1865 00000030  00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
1866 ])
1867
1868 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1869 dnl copied exactly, except for the BOS bit.
1870 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1871
1872 for i in 1 2 3; do
1873     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:01,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
1874 done
1875 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1876 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1877
1878 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1879 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1880 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1881 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1882 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1883 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1884 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1885 dnl
1886 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1887 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1888 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1889 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1890 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1891 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1892 dnl
1893 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1894 mpls,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:01,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1895 00000000  50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
1896 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1897 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1898 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1899 ])
1900
1901 dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
1902 dnl copied exactly, except for the BOS bit. The ethertype should be updated
1903 dnl to the MPLS ethertype of the MPLS push action which differs to that
1904 dnl of the input packet.
1905 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1906
1907 for i in 1 2 3; do
1908     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:00:02,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=0,ttl=64,bos=1)'
1909 done
1910 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1911 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1912
1913 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1914 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1915 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1916 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1917 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1918 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1919 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1920 dnl
1921 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1922 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1923 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1924 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1925 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1926 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1927 dnl
1928 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
1929 mplsm,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=40:44:44:44:00:02,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=0,mpls_lse1=41280
1930 00000000  50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
1931 00000010  a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
1932 00000020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1933 00000030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1934 ])
1935
1936 OVS_VSWITCHD_STOP
1937 AT_CLEANUP
1938
1939 AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
1940 OVS_VSWITCHD_START([dnl
1941    add-port br0 p1 -- set Interface p1 type=dummy
1942 ])
1943 ON_EXIT([kill `cat ovs-ofctl.pid`])
1944
1945 AT_CAPTURE_FILE([ofctl_monitor.log])
1946 AT_DATA([flows.txt], [dnl
1947 cookie=0xa dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,controller
1948 cookie=0xa dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,controller
1949 cookie=0xa dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,controller
1950 cookie=0xa dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,controller
1951 cookie=0xa dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1952 cookie=0xa dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_vlan_vid:99,set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1953 cookie=0xa dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1954 cookie=0xa dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1955 cookie=0xa dl_src=40:44:44:44:54:58,vlan_tci=0x1000/0x1000 actions=load:99->OXM_OF_VLAN_VID[[]],set_vlan_pcp:1,push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],controller
1956 cookie=0xa dl_src=40:44:44:44:54:59,vlan_tci=0x1000/0x1000 actions=push_mpls:0x8847,load:10->OXM_OF_MPLS_LABEL[[]],set_vlan_pcp:1,load:99->OXM_OF_VLAN_VID[[]],controller
1957 ])
1958 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
1959
1960 dnl Modified MPLS controller action.
1961 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
1962 dnl both of these in the final flow
1963 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
1964
1965 for i in 1 2 3; do
1966     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:50,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)'
1967 done
1968 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
1969 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1970
1971 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
1972 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1973 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1974 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1975 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1976 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1977 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1978 00000040  00 00 00 00
1979 dnl
1980 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1981 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1982 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1983 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1984 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1985 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1986 00000040  00 00 00 00
1987 dnl
1988 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
1989 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:50,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
1990 00000000  50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
1991 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
1992 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
1993 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
1994 00000040  00 00 00 00
1995 ])
1996
1997 dnl Modified MPLS controller action.
1998 dnl In this test, the input packet in vlan-tagged, which should be stripped
1999 dnl before we push the MPLS and VLAN tags.
2000 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2001
2002 for i in 1 2 3; do
2003     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:51,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2004 done
2005 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2006 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2007
2008 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2009 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2010 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2011 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2012 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2013 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2014 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2015 dnl
2016 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2017 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2018 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2019 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2020 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2021 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2022 dnl
2023 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2024 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:51,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2025 00000000  50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
2026 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2027 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2028 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2029 ])
2030
2031 dnl Modified MPLS controller action.
2032 dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
2033 dnl both of these in the final flow
2034 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2035
2036 for i in 1 2 3; do
2037     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:52,dst=52: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)'
2038 done
2039 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2040 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2041
2042 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2043 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2044 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2045 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2046 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2047 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2048 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2049 00000040  00 00 00 00
2050 dnl
2051 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2052 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2053 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2054 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2055 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2056 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2057 00000040  00 00 00 00
2058 dnl
2059 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2060 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:52,dl_dst=52:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2061 00000000  52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
2062 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2063 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2064 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2065 00000040  00 00 00 00
2066 ])
2067
2068 dnl Modified MPLS controller action.
2069 dnl In this test, the input packet in vlan-tagged, which should be stripped
2070 dnl before we push the MPLS and VLAN tags.
2071 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2072
2073 for i in 1 2 3; do
2074     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:53,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2075 done
2076 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2077 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2078
2079 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2080 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2081 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2082 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2083 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2084 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2085 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2086 dnl
2087 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2088 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2089 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2090 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2091 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2092 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2093 dnl
2094 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2095 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:53,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2096 00000000  50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
2097 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2098 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2099 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2100 ])
2101
2102 dnl Modified MPLS controller action.
2103 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2104 dnl actions are reordered, so we see both of these in the final flow.
2105 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2106
2107 for i in 1 2 3; do
2108     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:54,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)'
2109 done
2110 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2111 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2112
2113 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2114 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2115 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2116 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2117 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2118 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2119 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2120 00000040  00 00 00 00
2121 dnl
2122 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2123 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2124 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2125 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2126 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2127 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2128 00000040  00 00 00 00
2129 dnl
2130 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2131 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:54,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2132 00000000  50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
2133 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2134 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2135 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2136 00000040  00 00 00 00
2137 ])
2138
2139 dnl Modified MPLS controller action.
2140 dnl In this test, the input packet in vlan-tagged, which should be stripped
2141 dnl before we push the MPLS and VLAN tags.
2142 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2143
2144 for i in 1 2 3; do
2145     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:55,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2146 done
2147 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2148 OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
2149
2150 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2151 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2152 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2153 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2154 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2155 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2156 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2157 dnl
2158 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2159 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2160 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2161 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2162 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2163 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2164 dnl
2165 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2166 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:55,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2167 00000000  50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
2168 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2169 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2170 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2171 ])
2172
2173 dnl Modified MPLS controller action.
2174 dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
2175 dnl actions are reordered, so we see both of these in the final flow.
2176 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2177
2178 for i in 1 2 3; do
2179     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:56,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)'
2180 done
2181 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2182 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2183
2184 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2185 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2186 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2187 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2188 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2189 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2190 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2191 00000040  00 00 00 00
2192 dnl
2193 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2194 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2195 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2196 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2197 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2198 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2199 00000040  00 00 00 00
2200 dnl
2201 OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
2202 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:56,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2203 00000000  50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
2204 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2205 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2206 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2207 00000040  00 00 00 00
2208 ])
2209
2210 dnl Modified MPLS controller action.
2211 dnl In this test, the input packet in vlan-tagged, which should be stripped
2212 dnl before we push the MPLS and VLAN tags.
2213 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2214
2215 for i in 1 2 3; do
2216     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:57,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2217 done
2218 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2219 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2220
2221 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2222 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2223 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2224 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2225 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2226 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2227 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2228 dnl
2229 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2230 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2231 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2232 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2233 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2234 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2235 dnl
2236 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2237 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:57,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2238 00000000  50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
2239 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2240 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2241 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2242 ])
2243
2244 dnl Modified MPLS controller action.
2245 dnl In this test, the input packet in vlan-tagged, which should be stripped
2246 dnl before we push the MPLS and VLAN tags.
2247 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2248
2249 for i in 1 2 3; do
2250     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:58,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2251 done
2252 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2253 OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2254
2255 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2256 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2257 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2258 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2259 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2260 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2261 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2262 dnl
2263 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2264 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2265 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2266 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2267 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2268 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2269 dnl
2270 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2271 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:58,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2272 00000000  50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
2273 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2274 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2275 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2276 ])
2277
2278 dnl Modified MPLS controller action.
2279 dnl In this test, the input packet in vlan-tagged, which should be modified
2280 dnl before we push MPLS and VLAN tags.
2281 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
2282
2283 for i in 1 2 3; do
2284     ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:54:59,dst=50:54:00:00:00:07),eth_type(0x8100),vlan(vid=88,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))'
2285 done
2286 OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
2287 ovs-appctl -t ovs-ofctl exit
2288
2289 AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
2290 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2291 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2292 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2293 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2294 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2295 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2296 dnl
2297 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2298 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2299 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2300 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2301 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2302 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2303 dnl
2304 OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
2305 mpls,metadata=0,in_port=0,dl_vlan=99,dl_vlan_pcp=1,dl_src=40:44:44:44:54:59,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=0,mpls_ttl=64,mpls_bos=1
2306 00000000  50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
2307 00000010  88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
2308 00000020  f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
2309 00000030  00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
2310 ])
2311
2312 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2313 AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2314  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:50 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
2315  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:51 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,CONTROLLER:65535
2316  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:52 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
2317  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:53 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,CONTROLLER:65535
2318  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:54 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2319  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:55 actions=push_vlan:0x8100,set_field:4195->vlan_vid,set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2320  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:56 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2321  cookie=0xa, n_packets=3, n_bytes=180, dl_src=40:44:44:44:54:57 actions=push_vlan:0x8100,load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2322  cookie=0xa, n_packets=3, n_bytes=180, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:58 actions=load:0x63->OXM_OF_VLAN_VID[[]],set_field:1->vlan_pcp,push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
2323  cookie=0xa, n_packets=3, n_bytes=180, vlan_tci=0x1000/0x1000,dl_src=40:44:44:44:54:59 actions=push_mpls:0x8847,load:0xa->OXM_OF_MPLS_LABEL[[]],set_field:1->vlan_pcp,load:0x63->OXM_OF_VLAN_VID[[]],CONTROLLER:65535
2324 OFPST_FLOW reply (OF1.2):
2325 ])
2326
2327 OVS_VSWITCHD_STOP
2328 AT_CLEANUP
2329
2330 AT_SETUP([ofproto-dpif - fragment handling])
2331 OVS_VSWITCHD_START
2332 ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
2333 AT_DATA([flows.txt], [dnl
2334 priority=75 tcp ip_frag=no    tp_dst=80 actions=output:1
2335 priority=75 tcp ip_frag=first tp_dst=80 actions=output:2
2336 priority=75 tcp ip_frag=later tp_dst=80 actions=output:3
2337 priority=50 tcp ip_frag=no              actions=output:4
2338 priority=50 tcp ip_frag=first           actions=output:5
2339 priority=50 tcp ip_frag=later           actions=output:6
2340 ])
2341 AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
2342
2343 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"
2344 no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
2345 first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
2346 later_flow="$base_flow,frag=later)"
2347
2348     # mode    no  first  later
2349 for tuple in \
2350     'normal    1     5      6' \
2351     'drop      1  drop   drop' \
2352     'nx-match  1     2      6'
2353 do
2354   set $tuple
2355   mode=$1
2356   no=$2
2357   first=$3
2358   later=$4
2359
2360   AT_CHECK([ovs-ofctl set-frags br0 $mode])
2361   for type in no first later; do
2362     eval flow=\$${type}_flow exp_output=\$$type
2363     printf "\n%s\n" "----$mode $type-----"
2364     AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2365     : > expout
2366     if test $mode = drop && test $type != no; then
2367         echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
2368     fi
2369     echo "Datapath actions: $exp_output" >> expout
2370     AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
2371   done
2372 done
2373 OVS_VSWITCHD_STOP
2374 AT_CLEANUP
2375
2376 AT_SETUP([ofproto-dpif - exit])
2377 OVS_VSWITCHD_START
2378 ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
2379 AT_DATA([flows.txt], [dnl
2380 in_port=1 actions=output:10,exit,output:11
2381 in_port=2 actions=output:12,resubmit:1,output:12
2382 in_port=3 actions=output:13,resubmit:2,output:14
2383 ])
2384 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2385 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
2386 AT_CHECK([tail -1 stdout], [0],
2387   [Datapath actions: 10
2388 ])
2389 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
2390 AT_CHECK([tail -1 stdout], [0],
2391   [Datapath actions: 12,10
2392 ])
2393 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'], [0], [stdout])
2394 AT_CHECK([tail -1 stdout], [0],
2395   [Datapath actions: 13,12,10
2396 ])
2397 OVS_VSWITCHD_STOP
2398 AT_CLEANUP
2399
2400
2401 AT_SETUP([ofproto-dpif - mirroring, select_all])
2402 OVS_VSWITCHD_START
2403 ADD_OF_PORTS([br0], 1, 2, 3)
2404 ovs-vsctl \
2405         set Bridge br0 mirrors=@m --\
2406         --id=@p3 get Port p3 --\
2407         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2408
2409 AT_DATA([flows.txt], [dnl
2410 in_port=1 actions=output:2
2411 in_port=2 actions=output:1
2412 ])
2413 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2414
2415 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)"
2416 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2417 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2418   [Datapath actions: 2,3
2419 ])
2420
2421 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)"
2422 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2423 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2424   [Datapath actions: 1,3
2425 ])
2426
2427 OVS_VSWITCHD_STOP
2428 AT_CLEANUP
2429
2430
2431 AT_SETUP([ofproto-dpif - mirroring, select_src])
2432 OVS_VSWITCHD_START
2433 ADD_OF_PORTS([br0], 1, 2, 3)
2434 ovs-vsctl \
2435         set Bridge br0 mirrors=@m --\
2436         --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
2437         --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
2438
2439 AT_DATA([flows.txt], [dnl
2440 in_port=1 actions=output:2
2441 in_port=2 actions=output:1
2442 ])
2443 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2444
2445 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)"
2446 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2447 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2448   [Datapath actions: 2,3
2449 ])
2450
2451 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)"
2452 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2453 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2454   [Datapath actions: 1
2455 ])
2456 OVS_VSWITCHD_STOP
2457 AT_CLEANUP
2458
2459 AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
2460 OVS_VSWITCHD_START
2461 ADD_OF_PORTS([br0], 1, 2)
2462 ovs-vsctl \
2463         set Bridge br0 mirrors=@m --\
2464         --id=@p2 get Port p2 --\
2465         --id=@m create Mirror name=mymirror select_all=true output_port=@p2
2466
2467 AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
2468
2469 # "in_port" defaults to OFPP_NONE if it's not specified.
2470 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"
2471 AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
2472 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2473   [Datapath actions: 1,2
2474 ])
2475
2476 OVS_VSWITCHD_STOP
2477 AT_CLEANUP
2478
2479
2480 AT_SETUP([ofproto-dpif - mirroring, select_dst])
2481 OVS_VSWITCHD_START
2482 ADD_OF_PORTS([br0], 1, 2, 3)
2483 ovs-vsctl \
2484         set Bridge br0 mirrors=@m --\
2485         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2486         --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
2487
2488 AT_DATA([flows.txt], [dnl
2489 in_port=1 actions=output:2
2490 in_port=2 actions=output:1
2491 ])
2492 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2493
2494 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)"
2495 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2496 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2497   [Datapath actions: 2,3
2498 ])
2499
2500 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)"
2501 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2502 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2503   [Datapath actions: 1
2504 ])
2505
2506 OVS_VSWITCHD_STOP
2507 AT_CLEANUP
2508
2509
2510 AT_SETUP([ofproto-dpif - mirroring, select_vlan])
2511 OVS_VSWITCHD_START
2512 ADD_OF_PORTS([br0], 1, 2, 3)
2513 ovs-vsctl \
2514         set Bridge br0 mirrors=@m --\
2515         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
2516         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
2517
2518 AT_DATA([flows.txt], [dnl
2519 in_port=1, actions=output:2
2520 ])
2521 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2522
2523 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)"
2524 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2525 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2526   [Datapath actions: 2
2527 ])
2528
2529 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))"
2530 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2531 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2532   [Datapath actions: 2
2533 ])
2534
2535 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))"
2536 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2537 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2538   [Datapath actions: 2,3
2539 ])
2540
2541 OVS_VSWITCHD_STOP
2542 AT_CLEANUP
2543
2544
2545 AT_SETUP([ofproto-dpif - mirroring, output_port])
2546 OVS_VSWITCHD_START
2547 ADD_OF_PORTS([br0], 1, 2, 3)
2548 ovs-vsctl \
2549         set Bridge br0 mirrors=@m --\
2550         --id=@p3 get Port p3 --\
2551         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
2552
2553 AT_DATA([flows.txt], [dnl
2554 in_port=1 actions=mod_vlan_vid:17,output:2
2555 in_port=2 actions=output:1
2556 ])
2557 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2558
2559 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)"
2560 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2561 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2562   [Datapath actions: push_vlan(vid=17,pcp=0),2,pop_vlan,3
2563 ])
2564
2565 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)"
2566 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2567 AT_CHECK_UNQUOTED([tail -1 stdout], [0],
2568   [Datapath actions: 1,3
2569 ])
2570
2571 OVS_VSWITCHD_STOP
2572 AT_CLEANUP
2573
2574 AT_SETUP([ofproto-dpif - mirroring, output_vlan])
2575 OVS_VSWITCHD_START
2576 ADD_OF_PORTS([br0], 1, 2)
2577 ovs-vsctl \
2578         set Bridge br0 mirrors=@m --\
2579         --id=@m create Mirror name=mymirror select_all=true output_vlan=12
2580
2581 AT_DATA([flows.txt], [dnl
2582 in_port=1 actions=output:2
2583 in_port=2 actions=mod_vlan_vid:17,output:1
2584 ])
2585 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2586
2587 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)"
2588 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2589 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2590
2591 expected="2,push_vlan(vid=12,pcp=0),1,2,100"
2592 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2593 mv stdout expout
2594 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2595
2596 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)"
2597 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
2598 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2599
2600 expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
2601 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
2602 mv stdout expout
2603 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
2604
2605 OVS_VSWITCHD_STOP
2606 AT_CLEANUP
2607
2608 # Two testcases below are for the ofproto/trace command
2609 # The first one tests all correct syntax:
2610 # ofproto/trace [dp_name] odp_flow [-generate|packet]
2611 # ofproto/trace br_name br_flow [-generate|packet]
2612 AT_SETUP([ofproto-dpif - ofproto/trace command 1])
2613 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2614 ADD_OF_PORTS([br0], 1, 2, 3)
2615
2616 AT_DATA([flows.txt], [dnl
2617 in_port=1 actions=output:2
2618 in_port=2 actions=output:1
2619 ])
2620 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2621
2622 odp_flow="in_port(1)"
2623 br_flow="in_port=1"
2624 # Test command: ofproto/trace odp_flow with in_port as a name.
2625 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2626 AT_CHECK([tail -1 stdout], [0], [dnl
2627 Datapath actions: 2
2628 ])
2629
2630 odp_flow="in_port(1)"
2631 # Test command: ofproto/trace odp_flow
2632 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2633 AT_CHECK([tail -1 stdout], [0], [dnl
2634 Datapath actions: 2
2635 ])
2636
2637 # Test command: ofproto/trace dp_name odp_flow
2638 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
2639 AT_CHECK([tail -1 stdout], [0], [dnl
2640 Datapath actions: 2
2641 ])
2642 # Test commmand: ofproto/trace br_name br_flow
2643 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2644 AT_CHECK([tail -1 stdout], [0], [dnl
2645 Datapath actions: 2
2646 ])
2647
2648 # Delete the inserted flows
2649 AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
2650 AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
2651
2652 # This section beflow tests the [-generate] option
2653 odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
2654 br_flow="arp,metadata=0,in_port=3,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=ff:ff:ff:ff:ff:ff"
2655
2656 # Test command: ofproto/trace odp_flow
2657 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
2658 # Check for no MAC learning entry
2659 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2660  port  VLAN  MAC                Age
2661 ])
2662
2663 # Test command: ofproto/trace br_name br_flow
2664 AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
2665 # Check for no MAC learning entry
2666 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2667  port  VLAN  MAC                Age
2668 ])
2669
2670 # Test command: ofproto/trace odp_flow -generate
2671 AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
2672 # Check for the MAC learning entry
2673 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2674  port  VLAN  MAC                Age
2675     3     0  50:54:00:00:00:05    ?
2676 ])
2677
2678 # Test command: ofproto/trace dp_name odp_flow -generate
2679 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2680   "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
2681   -generate], [0], [stdout])
2682 # Check for both MAC learning entries
2683 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2684  port  VLAN  MAC                Age
2685     3     0  50:54:00:00:00:05    ?
2686     1     0  50:54:00:00:00:06    ?
2687 ])
2688
2689 # Test command: ofproto/trace br_name br_flow -generate
2690 AT_CHECK([ovs-appctl ofproto/trace br0 \
2691   "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
2692   -generate], [0], [stdout])
2693 # Check for both MAC learning entries.
2694 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2695  port  VLAN  MAC                Age
2696     3     0  50:54:00:00:00:05    ?
2697     1     0  50:54:00:00:00:06    ?
2698     2     0  50:54:00:00:00:07    ?
2699 ])
2700
2701 # This section beflow tests the [packet] option
2702 # The ovs-tcpundump of packets between port1 and port2
2703 pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2704 pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
2705
2706 # Construct the MAC learning table
2707 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2708   "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
2709   -generate], [0], [stdout])
2710
2711 # Construct the MAC learning table
2712 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2713   "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
2714   -generate], [0], [stdout])
2715
2716 # Test command: ofproto/trace odp_flow packet
2717 AT_CHECK([ovs-appctl ofproto/trace \
2718   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2719 AT_CHECK([tail -1 stdout], [0], [dnl
2720 Datapath actions: 2
2721 ])
2722 AT_CHECK([head -n 2 stdout], [0], [dnl
2723 Bridge: br0
2724 Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
2725 ])
2726
2727 # Test command: ofproto/trace dp_name odp_flow packet
2728 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
2729   "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
2730 AT_CHECK([tail -1 stdout], [0], [dnl
2731 Datapath actions: 2
2732 ])
2733 AT_CHECK([head -n 2 stdout], [0], [dnl
2734 Bridge: br0
2735 Flow: pkt_mark=0x2,skb_priority=0x1,arp,metadata=0,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
2736 ])
2737
2738 # Test command: ofproto/trace br_name br_flow packet
2739 AT_CHECK([ovs-appctl ofproto/trace br0 \
2740   "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
2741 AT_CHECK([tail -1 stdout], [0], [dnl
2742 Datapath actions: 1
2743 ])
2744 AT_CHECK([head -n 2 stdout], [0], [dnl
2745 Bridge: br0
2746 Flow: pkt_mark=0x1,skb_priority=0x2,arp,metadata=0,in_port=2,vlan_tci=0x0000,dl_src=50:54:00:00:00:02,dl_dst=50:54:00:00:00:01,arp_spa=0.0.0.0,arp_tpa=0.0.0.0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
2747 ])
2748
2749 OVS_VSWITCHD_STOP
2750 AT_CLEANUP
2751
2752 # The second test tests the corner cases
2753 AT_SETUP([ofproto-dpif - ofproto/trace command 2])
2754 OVS_VSWITCHD_START
2755 ADD_OF_PORTS([br0], 1, 2)
2756
2757 # Define flows
2758 odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
2759 br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
2760 # Define options
2761 generate="-generate"
2762 pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
2763
2764 # Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
2765 m4_foreach(
2766 [option],
2767 [[],
2768 ["$generate"],
2769 ["$pkt"]],
2770 [AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
2771   [2], [], [stderr])
2772 AT_CHECK([tail -2 stderr], [0], [dnl
2773 Cannot find the datapath
2774 ovs-appctl: ovs-vswitchd: server returned an error
2775 ])])
2776
2777 # Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
2778 m4_foreach(
2779 [option],
2780 [[],
2781 ["$generate"],
2782 ["$pkt"]],
2783 [AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
2784   [2], [], [stderr])
2785 AT_CHECK([tail -2 stderr], [0], [dnl
2786 Cannot find the datapath
2787 ovs-appctl: ovs-vswitchd: server returned an error
2788 ])])
2789
2790 # Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
2791 m4_foreach(
2792 [option],
2793 [[],
2794 ["$generate"],
2795 ["$pkt"]],
2796 [AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
2797   [2], [], [stderr])
2798 AT_CHECK([tail -2 stderr], [0], [dnl
2799 Cannot find the datapath
2800 ovs-appctl: ovs-vswitchd: server returned an error
2801 ])])
2802
2803 # Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
2804 m4_foreach(
2805 [option],
2806 [[],
2807 ["$generate"],
2808 ["$pkt"]],
2809 [AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
2810   [2], [], [stderr])
2811 AT_CHECK([tail -2 stderr], [0], [dnl
2812 Cannot find the datapath
2813 ovs-appctl: ovs-vswitchd: server returned an error
2814 ])])
2815
2816 # Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
2817 m4_foreach(
2818 [option],
2819 [[],
2820 ["$generate"],
2821 ["$pkt"]],
2822 [AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
2823   [2], [], [stderr])
2824 AT_CHECK([tail -2 stderr], [0], [dnl
2825 Unknown bridge name
2826 ovs-appctl: ovs-vswitchd: server returned an error
2827 ])])
2828
2829 # Test incorrect command: ofproto/trace br_flow [-generate|packet]
2830 m4_foreach(
2831 [option],
2832 [[],
2833 ["$generate"],
2834 ["$pkt"]],
2835 [AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
2836   [2], [], [stderr])
2837 AT_CHECK([tail -2 stderr], [0], [dnl
2838 Must specify bridge name
2839 ovs-appctl: ovs-vswitchd: server returned an error
2840 ])])
2841
2842 # Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
2843 AT_CHECK([ovs-appctl ofproto/trace \
2844   ovs-dummy "$odp_flow" garbage_option],
2845   [2], [stdout],[stderr])
2846 AT_CHECK([tail -2 stderr], [0], [dnl
2847 Trailing garbage in packet data
2848 ovs-appctl: ovs-vswitchd: server returned an error
2849 ])
2850
2851 # Test incorrect command: ofproto/trace with 4 arguments
2852 AT_CHECK([ovs-appctl ofproto/trace \
2853   arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
2854 AT_CHECK([tail -2 stderr], [0], [dnl
2855 "ofproto/trace" command takes at most 3 arguments
2856 ovs-appctl: ovs-vswitchd: server returned an error
2857 ])
2858
2859 # Test incorrect command: ofproto/trace with 0 argument
2860 AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
2861 AT_CHECK([tail -2 stderr], [0], [dnl
2862 "ofproto/trace" command requires at least 1 arguments
2863 ovs-appctl: ovs-vswitchd: server returned an error
2864 ])
2865
2866 OVS_VSWITCHD_STOP
2867 AT_CLEANUP
2868
2869 AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
2870 OVS_VSWITCHD_START
2871 ADD_OF_PORTS([br0], 1, 2, 3)
2872
2873 AT_DATA([flows.txt], [dnl
2874 in_port=1 actions=output:2
2875 in_port=2 actions=output:1
2876 ])
2877 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2878
2879 AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
2880 AT_CHECK([tail -1 stdout], [0], [dnl
2881 Datapath actions: push_vlan(vid=123,pcp=0),2
2882 ])
2883
2884 OVS_VSWITCHD_STOP
2885 AT_CLEANUP
2886
2887
2888 m4_define([OFPROTO_TRACE],
2889   [flow="$2"
2890    AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
2891    actual=`tail -1 stdout | sed 's/Datapath actions: //'`
2892    expected="$4"
2893    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
2894      [0], [stdout])
2895    mv stdout expout
2896    AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
2897      [0], [expout])])
2898
2899 AT_SETUP([ofproto-dpif - MAC learning])
2900 OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
2901 ADD_OF_PORTS([br0], 1, 2, 3)
2902
2903 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)'
2904
2905 # Trace an ARP packet arriving on p3, to create a MAC learning entry.
2906 OFPROTO_TRACE(
2907   [ovs-dummy],
2908   [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2909   [-generate],
2910   [1,2,100])
2911
2912 # Check for the MAC learning entry.
2913 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2914  port  VLAN  MAC                Age
2915     3     0  50:54:00:00:00:05    ?
2916 ])
2917
2918 # Trace a packet arrival destined for the learned MAC.
2919 # (This will also learn a MAC.)
2920 OFPROTO_TRACE(
2921   [ovs-dummy],
2922   [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
2923   [-generate],
2924   [3])
2925
2926 # Check for both MAC learning entries.
2927 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2928  port  VLAN  MAC                Age
2929     3     0  50:54:00:00:00:05    ?
2930     1     0  50:54:00:00:00:06    ?
2931 ])
2932
2933 # Trace a packet arrival that updates the first learned MAC entry.
2934 OFPROTO_TRACE(
2935   [ovs-dummy],
2936   [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
2937   [-generate],
2938   [1,3,100])
2939
2940 # Check that the MAC learning entry was updated.
2941 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2942  port  VLAN  MAC                Age
2943     1     0  50:54:00:00:00:06    ?
2944     2     0  50:54:00:00:00:05    ?
2945 ])
2946
2947 # Add another bridge.
2948 AT_CHECK(
2949   [ovs-vsctl \
2950      -- add-br br1 \
2951      -- set bridge br1 datapath-type=dummy])
2952 ADD_OF_PORTS([br1], 4, 5)
2953
2954 # Trace some packet arrivals in br1 to create MAC learning entries there too.
2955 OFPROTO_TRACE(
2956   [ovs-dummy],
2957   [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
2958   [-generate],
2959   [5,101])
2960 OFPROTO_TRACE(
2961   [ovs-dummy],
2962   [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
2963   [-generate],
2964   [4,101])
2965
2966 # Check that the MAC learning entries were added.
2967 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2968  port  VLAN  MAC                Age
2969     4     0  50:54:00:00:00:06    ?
2970     5     0  50:54:00:00:00:07    ?
2971 ])
2972
2973 # Delete port p1 and see that its MAC learning entry disappeared, and
2974 # that the MAC learning entry for the same MAC was also deleted from br1.
2975 AT_CHECK([ovs-vsctl del-port p1])
2976 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2977  port  VLAN  MAC                Age
2978     2     0  50:54:00:00:00:05    ?
2979 ])
2980 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
2981  port  VLAN  MAC                Age
2982     5     0  50:54:00:00:00:07    ?
2983 ])
2984
2985 OVS_VSWITCHD_STOP
2986 AT_CLEANUP
2987
2988 AT_SETUP([ofproto-dpif - MAC table overflow])
2989 OVS_VSWITCHD_START(
2990   [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
2991 ADD_OF_PORTS([br0], 1, 2, 3)
2992
2993 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)'
2994
2995 AT_CHECK([ovs-appctl time/stop])
2996
2997 # Trace 10 ARP packets arriving on p3, to create MAC learning entries.
2998 for i in 0 1 2 3 4 5 6 7 8 9; do
2999     OFPROTO_TRACE(
3000       [ovs-dummy],
3001       [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
3002       [-generate],
3003       [1,2,100])
3004     ovs-appctl time/warp 1000
3005 done
3006
3007 # Check for the MAC learning entries.
3008 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
3009   [0], [dnl
3010     3     0  50:54:00:00:00:00
3011     3     0  50:54:00:00:00:01
3012     3     0  50:54:00:00:00:02
3013     3     0  50:54:00:00:00:03
3014     3     0  50:54:00:00:00:04
3015     3     0  50:54:00:00:00:05
3016     3     0  50:54:00:00:00:06
3017     3     0  50:54:00:00:00:07
3018     3     0  50:54:00:00:00:08
3019     3     0  50:54:00:00:00:09
3020  port  VLAN  MAC                Age
3021 ])
3022
3023 # Trace another ARP packet on another MAC.
3024 OFPROTO_TRACE(
3025   [ovs-dummy],
3026   [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
3027   [-generate],
3028   [1,2,100])
3029
3030 # Check that the new one chased the oldest one out of the table.
3031 AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
3032   [0], [dnl
3033     3     0  50:54:00:00:00:01    ?
3034     3     0  50:54:00:00:00:02    ?
3035     3     0  50:54:00:00:00:03    ?
3036     3     0  50:54:00:00:00:04    ?
3037     3     0  50:54:00:00:00:05    ?
3038     3     0  50:54:00:00:00:06    ?
3039     3     0  50:54:00:00:00:07    ?
3040     3     0  50:54:00:00:00:08    ?
3041     3     0  50:54:00:00:00:09    ?
3042     3     0  50:54:00:00:00:10    ?
3043  port  VLAN  MAC                Age
3044 ])
3045 OVS_VSWITCHD_STOP
3046 AT_CLEANUP
3047
3048 # CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR, ADDR_WITHOUT_BRACKETS)
3049 #
3050 # Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
3051 #
3052 # IP_VERSION_TYPE is used in AT_SETUP
3053 m4_define([CHECK_SFLOW_SAMPLING_PACKET],
3054   [AT_SETUP([ofproto-dpif - sFlow packet sampling - $2 collector])
3055   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3056
3057   ON_EXIT([kill `cat test-sflow.pid`])
3058   AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
3059   AT_CAPTURE_FILE([sflow.log])
3060   SFLOW_PORT=`parse_listening_port < test-sflow.log`
3061   ovs-appctl time/stop
3062
3063   ADD_OF_PORTS([br0], 1, 2)
3064   ovs-vsctl \
3065      set Interface br0 options:ifindex=1002 -- \
3066      set Interface p1 options:ifindex=1004 -- \
3067      set Interface p2 options:ifindex=1003 -- \
3068      set Bridge br0 sflow=@sf -- \
3069      --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
3070        header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
3071
3072   dnl open with ARP packets to seed the bridge-learning.  The output
3073   dnl ifIndex numbers should be reported predictably after that.
3074   dnl Since we set sampling=1 we should see all of these packets
3075   dnl reported. Sorting the output by data-source and seqNo makes
3076   dnl it deterministic. Ensuring that we send at least two packets
3077   dnl into each port means we get to check the seq nos are
3078   dnl incrementing correctly.
3079   dnl because packets from different ports can be handled by separate
3080   dnl threads, put some sleeps
3081
3082   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)'
3083   sleep 1
3084   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)'
3085   sleep 1
3086   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)'
3087   sleep 1
3088   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)'
3089   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)'
3090
3091   dnl sleep long enough to get more than one counter sample
3092   dnl from each datasource so we can check sequence numbers
3093   for i in `seq 1 30`; do
3094       ovs-appctl time/warp 100
3095   done
3096   OVS_VSWITCHD_STOP
3097   ovs-appctl -t test-sflow exit
3098
3099   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
3100         /g']], [0], [dnl
3101 HEADER
3102         dgramSeqNo=1
3103         ds=127.0.0.1>2:1000
3104         fsSeqNo=1
3105         in_vlan=0
3106         in_priority=0
3107         out_vlan=0
3108         out_priority=0
3109         meanSkip=1
3110         samplePool=1
3111         dropEvents=0
3112         in_ifindex=1004
3113         in_format=0
3114         out_ifindex=2
3115         out_format=2
3116         hdr_prot=1
3117         pkt_len=64
3118         stripped=4
3119         hdr_len=60
3120         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
3121 HEADER
3122         dgramSeqNo=1
3123         ds=127.0.0.1>2:1000
3124         fsSeqNo=2
3125         in_vlan=0
3126         in_priority=0
3127         out_vlan=0
3128         out_priority=0
3129         meanSkip=1
3130         samplePool=2
3131         dropEvents=0
3132         in_ifindex=1003
3133         in_format=0
3134         out_ifindex=2
3135         out_format=2
3136         hdr_prot=1
3137         pkt_len=64
3138         stripped=4
3139         hdr_len=60
3140         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
3141 HEADER
3142         dgramSeqNo=1
3143         ds=127.0.0.1>2:1000
3144         fsSeqNo=3
3145         in_vlan=0
3146         in_priority=0
3147         out_vlan=0
3148         out_priority=0
3149         meanSkip=1
3150         samplePool=3
3151         dropEvents=0
3152         in_ifindex=1004
3153         in_format=0
3154         out_ifindex=1003
3155         out_format=0
3156         hdr_prot=1
3157         pkt_len=64
3158         stripped=4
3159         hdr_len=60
3160         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
3161 HEADER
3162         dgramSeqNo=1
3163         ds=127.0.0.1>2:1000
3164         fsSeqNo=4
3165         in_vlan=0
3166         in_priority=0
3167         out_vlan=0
3168         out_priority=0
3169         meanSkip=1
3170         samplePool=4
3171         dropEvents=0
3172         in_ifindex=1003
3173         in_format=0
3174         out_ifindex=1004
3175         out_format=0
3176         hdr_prot=1
3177         pkt_len=64
3178         stripped=4
3179         hdr_len=60
3180         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
3181 HEADER
3182         dgramSeqNo=1
3183         ds=127.0.0.1>2:1000
3184         fsSeqNo=5
3185         in_vlan=0
3186         in_priority=0
3187         out_vlan=0
3188         out_priority=0
3189         meanSkip=1
3190         samplePool=5
3191         dropEvents=0
3192         in_ifindex=1003
3193         in_format=0
3194         out_ifindex=1004
3195         out_format=0
3196         hdr_prot=1
3197         pkt_len=64
3198         stripped=4
3199         hdr_len=60
3200         hdr=50-54-00-00-00-05-50-54-00-00-00-07-86-DD-67-00-00-00-00-00-0A-80-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-01-FE-80-00-00-00-00-00-00-00-00-00-00-00-00-00-02-00-00-00-00-00-00
3201 ])
3202
3203   AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR' | head -6 | sed 's/ /\
3204         /g']], [0], [dnl
3205 IFCOUNTERS
3206         dgramSeqNo=2
3207         ds=127.0.0.1>0:1002
3208         csSeqNo=1
3209         ifindex=1002
3210         type=6
3211         ifspeed=100000000
3212         direction=0
3213         status=0
3214         in_octets=0
3215         in_unicasts=0
3216         in_multicasts=0
3217         in_broadcasts=4294967295
3218         in_discards=0
3219         in_errors=0
3220         in_unknownprotos=4294967295
3221         out_octets=120
3222         out_unicasts=2
3223         out_multicasts=4294967295
3224         out_broadcasts=4294967295
3225         out_discards=0
3226         out_errors=0
3227         promiscuous=0
3228 IFCOUNTERS
3229         dgramSeqNo=2
3230         ds=127.0.0.1>0:1003
3231         csSeqNo=1
3232         ifindex=1003
3233         type=6
3234         ifspeed=100000000
3235         direction=0
3236         status=0
3237         in_octets=138
3238         in_unicasts=3
3239         in_multicasts=0
3240         in_broadcasts=4294967295
3241         in_discards=0
3242         in_errors=0
3243         in_unknownprotos=4294967295
3244         out_octets=120
3245         out_unicasts=2
3246         out_multicasts=4294967295
3247         out_broadcasts=4294967295
3248         out_discards=0
3249         out_errors=0
3250         promiscuous=0
3251 IFCOUNTERS
3252         dgramSeqNo=2
3253         ds=127.0.0.1>0:1004
3254         csSeqNo=1
3255         ifindex=1004
3256         type=6
3257         ifspeed=100000000
3258         direction=0
3259         status=0
3260         in_octets=84
3261         in_unicasts=2
3262         in_multicasts=0
3263         in_broadcasts=4294967295
3264         in_discards=0
3265         in_errors=0
3266         in_unknownprotos=4294967295
3267         out_octets=180
3268         out_unicasts=3
3269         out_multicasts=4294967295
3270         out_broadcasts=4294967295
3271         out_discards=0
3272         out_errors=0
3273         promiscuous=0
3274 IFCOUNTERS
3275         dgramSeqNo=3
3276         ds=127.0.0.1>0:1002
3277         csSeqNo=2
3278         ifindex=1002
3279         type=6
3280         ifspeed=100000000
3281         direction=0
3282         status=0
3283         in_octets=0
3284         in_unicasts=0
3285         in_multicasts=0
3286         in_broadcasts=4294967295
3287         in_discards=0
3288         in_errors=0
3289         in_unknownprotos=4294967295
3290         out_octets=120
3291         out_unicasts=2
3292         out_multicasts=4294967295
3293         out_broadcasts=4294967295
3294         out_discards=0
3295         out_errors=0
3296         promiscuous=0
3297 IFCOUNTERS
3298         dgramSeqNo=3
3299         ds=127.0.0.1>0:1003
3300         csSeqNo=2
3301         ifindex=1003
3302         type=6
3303         ifspeed=100000000
3304         direction=0
3305         status=0
3306         in_octets=138
3307         in_unicasts=3
3308         in_multicasts=0
3309         in_broadcasts=4294967295
3310         in_discards=0
3311         in_errors=0
3312         in_unknownprotos=4294967295
3313         out_octets=120
3314         out_unicasts=2
3315         out_multicasts=4294967295
3316         out_broadcasts=4294967295
3317         out_discards=0
3318         out_errors=0
3319         promiscuous=0
3320 IFCOUNTERS
3321         dgramSeqNo=3
3322         ds=127.0.0.1>0:1004
3323         csSeqNo=2
3324         ifindex=1004
3325         type=6
3326         ifspeed=100000000
3327         direction=0
3328         status=0
3329         in_octets=84
3330         in_unicasts=2
3331         in_multicasts=0
3332         in_broadcasts=4294967295
3333         in_discards=0
3334         in_errors=0
3335         in_unknownprotos=4294967295
3336         out_octets=180
3337         out_unicasts=3
3338         out_multicasts=4294967295
3339         out_broadcasts=4294967295
3340         out_discards=0
3341         out_errors=0
3342         promiscuous=0
3343 ])
3344   AT_CLEANUP])
3345
3346 CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1], [IPv4])
3347 CHECK_SFLOW_SAMPLING_PACKET([[[::1]]], [IPv6])
3348
3349 # CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3350 #
3351 # Test that basic NetFlow reports flow statistics correctly:
3352 # The initial packet of a flow are correctly accounted.
3353 # Later packets within a flow are correctly accounted.
3354 # Flow actions changing (in this case, due to MAC learning)
3355 # cause a record to be sent.
3356 #
3357 # IP_VERSION_TYPE is used in AT_SETUP
3358 m4_define([CHECK_NETFLOW_EXPIRATION],
3359   [AT_SETUP([ofproto-dpif - NetFlow flow expiration - $2 collector])
3360   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3361   ADD_OF_PORTS([br0], 1, 2)
3362
3363   ovs-appctl time/stop
3364   ON_EXIT([kill `cat test-netflow.pid`])
3365   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3366   AT_CAPTURE_FILE([netflow.log])
3367   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3368
3369   ovs-vsctl \
3370      set Bridge br0 netflow=@nf -- \
3371      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3372        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
3373
3374   for delay in 1000 30000; do
3375       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)'
3376       sleep 1  # ensure the order in which these two packets are processed
3377       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)'
3378
3379       ovs-appctl time/warp $delay
3380   done
3381
3382   ovs-appctl time/warp 6000
3383   sleep 1
3384   OVS_VSWITCHD_STOP
3385   ovs-appctl -t test-netflow exit
3386
3387   AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
3388
3389   AT_CHECK([test `grep "192.168.0.1 > 192.168.0.2, if 1 > 2, 1 pkts, 60 bytes, ICMP 8:0" netflow.log | wc -l` -eq 1])
3390
3391   combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
3392   separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
3393   AT_CHECK([test $separate = 2 || test $combined = 1], [0])
3394
3395   AT_CLEANUP])
3396
3397 CHECK_NETFLOW_EXPIRATION([127.0.0.1], [IPv4])
3398 CHECK_NETFLOW_EXPIRATION([[[::1]]], [IPv6])
3399
3400 # CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR, IP_VERSION_TYPE)
3401 #
3402 # Test that basic NetFlow reports active expirations correctly.
3403 #
3404 # IP_VERSION_TYPE is used in AT_SETUP
3405 m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
3406   [AT_SETUP([ofproto-dpif - NetFlow active expiration - $2 collector])
3407
3408   OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
3409   ADD_OF_PORTS([br0], 1, 2)
3410
3411   ON_EXIT([kill `cat test-netflow.pid`])
3412   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
3413   AT_CAPTURE_FILE([netflow.log])
3414   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
3415
3416   ovs-vsctl \
3417      set Bridge br0 netflow=@nf -- \
3418      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
3419        engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
3420
3421   AT_CHECK([ovs-appctl time/stop])
3422   n=1
3423   while test $n -le 60; do
3424       n=`expr $n + 1`
3425
3426       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)'
3427       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)'
3428
3429       ovs-appctl time/warp 1000
3430   done
3431
3432   ovs-appctl time/warp 10000
3433
3434   sleep 1
3435   OVS_VSWITCHD_STOP
3436   ovs-appctl -t test-netflow exit
3437
3438   # Count the number of reported packets:
3439   # - From source to destination before MAC learning kicks in (just one).
3440   # - From source to destination after that.
3441   # - From destination to source.
3442   n_learn=0
3443   n_in=0
3444   n_out=0
3445   n_other=0
3446   n_recs=0
3447   none=0
3448   while read line; do
3449       pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
3450       case $pkts in
3451            [[0-9]]*) ;;
3452        *) continue ;;
3453       esac
3454
3455       case $line in
3456           "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3457               counter=n_learn
3458           ;;
3459       "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
3460           counter=n_in
3461           ;;
3462       "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
3463           counter=n_out
3464           ;;
3465       *)
3466           counter=n_other
3467           ;;
3468       esac
3469       eval $counter=\`expr \$$counter + \$pkts\`
3470       n_recs=`expr $n_recs + 1`
3471   done < netflow.log
3472
3473   # There should be exactly 1 MAC learning packet,
3474   # exactly 59 other packets in that direction,
3475   # and exactly 60 packets in the other direction.
3476   AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
3477 ])
3478
3479   AT_CLEANUP])
3480
3481 CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1], [IPv4])
3482 CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]], [IPv6])
3483
3484 AT_SETUP([ofproto-dpif - flow stats])
3485 OVS_VSWITCHD_START
3486 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3487 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3488
3489 ovs-appctl time/stop
3490
3491 for i in `seq 1 10`; do
3492     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)'
3493 done
3494
3495 ovs-appctl time/warp 1000
3496 sleep 1  # wait for revalidator to update stats
3497
3498 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3499 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3500  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3501  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3502 ])
3503 OVS_VSWITCHD_STOP
3504 AT_CLEANUP
3505
3506 AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
3507 OVS_VSWITCHD_START
3508 AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
3509 AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
3510
3511 ovs-appctl time/stop
3512
3513 for i in `seq 1 10`; do
3514     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)'
3515 done
3516
3517 ovs-appctl time/warp 100
3518 AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
3519 ovs-appctl time/warp 1000
3520
3521 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3522 AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
3523  cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
3524  cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
3525 ])
3526 OVS_VSWITCHD_STOP
3527 AT_CLEANUP
3528
3529 AT_SETUP([idle_age and hard_age increase over time])
3530 OVS_VSWITCHD_START
3531
3532 # get_ages DURATION HARD IDLE
3533 #
3534 # Fetch the flow duration, hard age, and idle age into the variables
3535 # whose names are given as arguments.  Rounds DURATION down to the
3536 # nearest integer.  If hard_age doesn't appear in the output, sets
3537 # HARD to "none".  If idle_age doesn't appear in the output, sets IDLE
3538 # to 0.
3539 get_ages () {
3540     AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
3541
3542     duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
3543     AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
3544     AS_VAR_COPY([$1], [duration])
3545
3546     hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
3547     if test X"$hard" = X; then
3548         hard=none
3549     else
3550         AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
3551     fi
3552     AS_VAR_COPY([$2], [hard])
3553
3554     idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
3555     if test X"$idle" = X; then
3556         idle=0
3557     else
3558         AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
3559     fi
3560     AS_VAR_COPY([$3], [idle])
3561 }
3562
3563 # Add a flow and get its initial hard and idle age.
3564 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
3565 get_ages duration1 hard1 idle1
3566
3567 ovs-appctl time/stop
3568 # Warp time forward by 10 seconds, then modify the flow's actions.
3569 ovs-appctl time/warp 10000
3570 get_ages duration2 hard2 idle2
3571 AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
3572
3573 # Warp time forward by 10 seconds.
3574 ovs-appctl time/warp 10000
3575 get_ages duration3 hard3 idle3
3576
3577 # Warp time forward 10 more seconds, then pass some packets through the flow,
3578 # then warp forward a few more times because idle times are only updated
3579 # occasionally.
3580 ovs-appctl time/warp 10000
3581 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)'
3582 ovs-appctl time/warp 1000
3583 ovs-appctl time/warp 1000
3584 ovs-appctl time/warp 1000
3585 sleep 1
3586 get_ages duration4 hard4 idle4
3587
3588 printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
3589 printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
3590 printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
3591
3592 # Duration should increase steadily over time.
3593 AT_CHECK([test $duration1 -lt $duration2])
3594 AT_CHECK([test $duration2 -lt $duration3])
3595 AT_CHECK([test $duration3 -lt $duration4])
3596
3597 # Hard age should be "none" initially because it's the same as flow_duration,
3598 # then it should increase.
3599 AT_CHECK([test $hard1 = none])
3600 AT_CHECK([test $hard2 = none])
3601 AT_CHECK([test $hard3 != none])
3602 AT_CHECK([test $hard4 != none])
3603 AT_CHECK([test $hard3 -lt $hard4])
3604
3605 # Idle age should increase from 1 to 2 to 3, then decrease.
3606 AT_CHECK([test $idle1 -lt $idle2])
3607 AT_CHECK([test $idle2 -lt $idle3])
3608 AT_CHECK([test $idle3 -gt $idle4])
3609
3610 # Check some invariant relationships.
3611 AT_CHECK([test $duration1 = $idle1])
3612 AT_CHECK([test $duration2 = $idle2])
3613 AT_CHECK([test $duration3 = $idle3])
3614 AT_CHECK([test $idle3 -gt $hard3])
3615 AT_CHECK([test $idle4 -lt $hard4])
3616 AT_CHECK([test $hard4 -lt $duration4])
3617
3618 OVS_VSWITCHD_STOP
3619 AT_CLEANUP
3620
3621 AT_SETUP([ofproto-dpif - fin_timeout])
3622 OVS_VSWITCHD_START
3623 ovs-appctl time/stop
3624 AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
3625 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3626 [NXST_FLOW reply:
3627  idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3628 ])
3629
3630 # Check that a TCP SYN packet does not change the timeout.  (Because
3631 # flow stats updates are mainly what implements the fin_timeout
3632 # feature, we warp forward a couple of times to ensure that flow stats
3633 # run before re-checking the flow table.)
3634 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
3635 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3636 warped
3637 ])
3638 sleep 1
3639 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3640 [NXST_FLOW reply:
3641  n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
3642 ])
3643 # Check that a TCP FIN packet does change the timeout.
3644 AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
3645 AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
3646 warped
3647 ])
3648 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
3649 [NXST_FLOW reply:
3650  n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
3651 ])
3652 OVS_VSWITCHD_STOP
3653 AT_CLEANUP
3654
3655 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
3656 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3657 ADD_OF_PORTS([br0], [1], [2])
3658 ADD_OF_PORTS([br1], [3])
3659
3660 AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
3661 dummy@br0
3662 dummy@br1
3663 ])
3664 OVS_VSWITCHD_STOP
3665 AT_CLEANUP
3666
3667 AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
3668 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
3669 ADD_OF_PORTS([br0], [1], [2])
3670 ADD_OF_PORTS([br1], [3])
3671
3672 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3673 dummy@ovs-dummy: hit:0 missed:0
3674         br0:
3675                 br0 65534/100: (dummy)
3676                 p1 1/1: (dummy)
3677                 p2 2/2: (dummy)
3678         br1:
3679                 br1 65534/101: (dummy)
3680                 p3 3/3: (dummy)
3681 ])
3682 OVS_VSWITCHD_STOP
3683 AT_CLEANUP
3684
3685 AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
3686 # bump max-idle to avoid the flows being reclaimed behind us
3687 OVS_VSWITCHD_START([add-br br1 -- \
3688                     set bridge br1 datapath-type=dummy fail-mode=secure -- \
3689                     set Open_vSwitch . other_config:max-idle=10000])
3690 ADD_OF_PORTS([br0], [1], [2])
3691 ADD_OF_PORTS([br1], [3])
3692
3693 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)'])
3694 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)'])
3695 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)'])
3696 sleep 1  # wait for upcall handlers
3697 AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
3698 skb_priority(0),recirc_id(0),in_port(1),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), packets:0, bytes:0, used:never, actions:drop
3699 skb_priority(0),recirc_id(0),in_port(2),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), packets:0, bytes:0, used:never, actions:drop
3700 ])
3701
3702 AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
3703 skb_priority(0),recirc_id(0),in_port(3),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), packets:0, bytes:0, used:never, actions:drop
3704 ])
3705
3706 AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0], [dnl
3707 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p1),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:never, actions:drop
3708 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p2),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:never, actions:drop
3709 ])
3710
3711 AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0], [dnl
3712 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(p3),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:never, actions:drop
3713 ])
3714
3715 OVS_VSWITCHD_STOP
3716 AT_CLEANUP
3717
3718 AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
3719 OVS_VSWITCHD_START([dnl
3720    add-port br0 p1 -- set Interface p1 type=dummy
3721 ])
3722 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3723 ON_EXIT([kill `cat ovs-ofctl.pid`])
3724
3725 AT_CAPTURE_FILE([ofctl_monitor.log])
3726 AT_DATA([flows.txt], [dnl
3727 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3728 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3729 ])
3730 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3731
3732 dnl Packet is sent to userspace because a MPLS push or pop action is applied to
3733 dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
3734 dnl
3735 dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
3736 dnl 60:66:66:66:66:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 74: MPLS (label 20, exp 0, ttl 32)
3737 dnl         (label 20, exp 0, [S], ttl 32)
3738 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3739 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3740
3741 for dl_src in 00 01; do
3742     AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007 6066666666$dl_src 8847 00014020 00014120 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"])
3743 done
3744 sleep 1  # wait for the datapath flow installed
3745 for dl_src in 00 01; do
3746     AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3747 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), actions:userspace(pid=0,slow_path(controller))
3748 ])
3749 done
3750
3751 OVS_VSWITCHD_STOP
3752 AT_CLEANUP
3753
3754
3755 AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
3756 OVS_VSWITCHD_START([dnl
3757    add-port br0 p1 -- set Interface p1 type=dummy
3758 ])
3759 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3760 ON_EXIT([kill `cat ovs-ofctl.pid`])
3761
3762 AT_CAPTURE_FILE([ofctl_monitor.log])
3763 AT_DATA([flows.txt], [dnl
3764 dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
3765 dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
3766 ])
3767 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3768
3769 dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
3770 dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
3771 dnl can't determine the resulting MPLS label after MPLS push/pop actions.
3772 dnl
3773 dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
3774 dnl 60:66:66:66:66:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 74: MPLS (label 20, exp 0, ttl 32)
3775 dnl         (label 20, exp 0, ttl 32)
3776 dnl         (label 20, exp 0, ttl 32)
3777 dnl         (label 20, exp 0, [S], ttl 32)
3778 dnl         (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
3779 dnl     192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
3780
3781 for dl_src in 00 01; do
3782     AT_CHECK([ovs-appctl netdev-dummy/receive p1 "505400000007 6066666666$dl_src 8847 00014020 00014120 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"])
3783 done
3784 sleep 1  # wait for the datapath flow installed
3785 for dl_src in 00 01; do
3786     AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep ":$dl_src/" | STRIP_USED], [0], [dnl
3787 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120), actions:userspace(pid=0,slow_path(controller))
3788 ])
3789 done
3790
3791 OVS_VSWITCHD_STOP
3792 AT_CLEANUP
3793
3794 AT_SETUP([ofproto-dpif - patch ports])
3795 OVS_VSWITCHD_START([add-br br1 \
3796 -- set bridge br1 datapath-type=dummy fail-mode=secure \
3797 -- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
3798 -- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
3799
3800 ADD_OF_PORTS([br0], [2])
3801 ADD_OF_PORTS([br1], [3])
3802
3803 AT_CHECK([ovs-appctl time/stop])
3804 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3805
3806 AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
3807 AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
3808
3809 for i in $(seq 1 10); do
3810     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)'
3811     if [[ $i -eq 1 ]]; then
3812         sleep 1
3813     fi
3814 done
3815
3816 for i in $(seq 1 5); do
3817     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)'
3818     if [[ $i -eq 1 ]]; then
3819         sleep 1
3820     fi
3821 done
3822
3823 AT_CHECK([ovs-appctl time/warp 500], [0],
3824 [warped
3825 ])
3826 sleep 1  # wait for log writer
3827
3828 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
3829 dummy@ovs-dummy: hit:13 missed:2
3830         br0:
3831                 br0 65534/100: (dummy)
3832                 p2 2/2: (dummy)
3833                 pbr0 1/none: (patch: peer=pbr1)
3834         br1:
3835                 br1 65534/101: (dummy)
3836                 p3 3/3: (dummy)
3837                 pbr1 1/none: (patch: peer=pbr0)
3838 ])
3839
3840 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
3841 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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), actions:101,3,2
3842 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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), actions:100,2,3
3843 ])
3844
3845 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | FILTER_FLOW_DUMP], [0], [dnl
3846 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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
3847 ])
3848 AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | FILTER_FLOW_DUMP], [0], [dnl
3849 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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
3850 ])
3851
3852 AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
3853 OFPST_PORT reply (xid=0x4): 1 ports
3854   port  1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
3855            tx pkts=10, bytes=600, drop=0, errs=0, coll=0
3856 ])
3857
3858 AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
3859 OFPST_PORT reply (xid=0x4): 1 ports
3860   port  1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
3861            tx pkts=5, bytes=300, drop=0, errs=0, coll=0
3862 ])
3863
3864 OVS_VSWITCHD_STOP
3865 AT_CLEANUP
3866
3867 AT_SETUP([ofproto-dpif - port duration])
3868 OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
3869 ADD_OF_PORTS([br0], 1, 2)
3870
3871 ovs-appctl time/stop
3872 ovs-appctl time/warp 10000
3873
3874 AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
3875 AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
3876 [dnl
3877            duration=?s
3878            duration=?s
3879            duration=?s
3880 ])
3881 OVS_VSWITCHD_STOP
3882 AT_CLEANUP
3883
3884 dnl ----------------------------------------------------------------------
3885 AT_BANNER([ofproto-dpif -- megaflows])
3886
3887 AT_SETUP([ofproto-dpif megaflow - port classification])
3888 OVS_VSWITCHD_START
3889 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3890 ADD_OF_PORTS([br0], [1], [2])
3891 AT_DATA([flows.txt], [dnl
3892 table=0 in_port=1 actions=output(2)
3893 ])
3894 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3895 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)'])
3896 sleep 1
3897 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)'])
3898 sleep 1
3899 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3900 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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), actions: <del>
3901 ])
3902 OVS_VSWITCHD_STOP
3903 AT_CLEANUP
3904
3905 AT_SETUP([ofproto-dpif megaflow - L2 classification])
3906 OVS_VSWITCHD_START
3907 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3908 ADD_OF_PORTS([br0], [1], [2])
3909 AT_DATA([flows.txt], [dnl
3910 table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
3911 ])
3912 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3913 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)'])
3914 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)'])
3915 sleep 1
3916 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3917 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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), actions: <del>
3918 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
3919 ])
3920 OVS_VSWITCHD_STOP
3921 AT_CLEANUP
3922
3923 AT_SETUP([ofproto-dpif megaflow - L3 classification])
3924 OVS_VSWITCHD_START
3925 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3926 ADD_OF_PORTS([br0], [1], [2])
3927 AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
3928 AT_DATA([flows.txt], [dnl
3929 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
3930 ])
3931 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3932 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)'])
3933 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)'])
3934 sleep 1
3935 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3936 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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/255.255.255.252,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), actions: <del>
3937 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
3938 ])
3939 OVS_VSWITCHD_STOP
3940 AT_CLEANUP
3941
3942 AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
3943 OVS_VSWITCHD_START
3944 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3945 ADD_OF_PORTS([br0], [1], [2])
3946 AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=ipv6_dst,ipv6_src], [0], [ignore], [])
3947 AT_DATA([flows.txt], [dnl
3948 table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
3949 ])
3950 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3951 AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:07,dst=50:54:00:00:00:05),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5,dst=fe80::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)'])
3952 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(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1,dst=2001:db8:3c4d:1:2:3:4:1,label=0,proto=99,tclass=0x70,hlimit=64,frag=no)'])
3953 sleep 1
3954 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3955 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,dst=fe80::2/::,label=0/0,proto=10/0,tclass=0x70/0,hlimit=128/0,frag=no/0xff), actions: <del>
3956 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,dst=2001:db8:3c4d:1:2:3:4:1/::,label=0/0,proto=99/0,tclass=0x70/0,hlimit=64/0,frag=no/0xff), actions: <del>
3957 ])
3958 OVS_VSWITCHD_STOP
3959 AT_CLEANUP
3960
3961 AT_SETUP([ofproto-dpif megaflow - L4 classification])
3962 OVS_VSWITCHD_START
3963 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3964 ADD_OF_PORTS([br0], [1], [2])
3965 AT_DATA([flows.txt], [dnl
3966 table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
3967 ])
3968 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3969 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)'])
3970 sleep 1
3971 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)'])
3972 sleep 1
3973 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3974 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0xff,code=0/0), actions: <del>
3975 ])
3976 OVS_VSWITCHD_STOP
3977 AT_CLEANUP
3978
3979 AT_SETUP([ofproto-dpif megaflow - normal])
3980 OVS_VSWITCHD_START
3981 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3982 ADD_OF_PORTS([br0], [1], [2])
3983 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
3984 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)'])
3985 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)'])
3986 sleep 1
3987 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
3988 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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/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), actions: <del>
3989 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
3990 ])
3991 OVS_VSWITCHD_STOP
3992 AT_CLEANUP
3993
3994 AT_SETUP([ofproto-dpif megaflow - mpls])
3995 OVS_VSWITCHD_START
3996 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
3997 ADD_OF_PORTS([br0], [1], [2])
3998 AT_DATA([flows.txt], [dnl
3999 table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
4000 table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
4001 ])
4002 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4003 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)'])
4004 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)'])
4005 sleep 1
4006 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4007 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), actions: <del>
4008 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1), actions: <del>
4009 ])
4010 OVS_VSWITCHD_STOP
4011 AT_CLEANUP
4012
4013 # CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR, IP_VERSION_TYPE)
4014 #
4015 # IP_VERSION_TYPE is used in AT_SETUP
4016 m4_define([CHECK_MEGAFLOW_NETFLOW],
4017   [AT_SETUP([ofproto-dpif megaflow - netflow - $2 collector])
4018   OVS_VSWITCHD_START
4019   AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4020   ADD_OF_PORTS([br0], [1], [2])
4021
4022   dnl NetFlow configuration disables wildcarding relevant fields
4023   ON_EXIT([kill `cat test-netflow.pid`])
4024   AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
4025   AT_CAPTURE_FILE([netflow.log])
4026   NETFLOW_PORT=`parse_listening_port < test-netflow.log`
4027   ovs-vsctl \
4028      set Bridge br0 netflow=@nf -- \
4029      --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
4030        engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
4031
4032   AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4033   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)'])
4034   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)'])
4035   sleep 1
4036   AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4037 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), actions: <del>
4038 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0), actions: <del>
4039 ])
4040   OVS_VSWITCHD_STOP
4041   AT_CLEANUP])
4042
4043 CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4044 CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4045
4046 AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
4047 OVS_VSWITCHD_START(
4048   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4049    add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
4050    set interface p2 type=dummy ofport_request=2 -- \
4051    set interface p3 type=dummy ofport_request=3])
4052 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4053 ])
4054 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4055
4056 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4057 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)'])
4058 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)'])
4059 sleep 1
4060 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4061 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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/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), actions: <del>
4062 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4063 ])
4064 OVS_VSWITCHD_STOP
4065 AT_CLEANUP
4066
4067 AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
4068 OVS_VSWITCHD_START(
4069   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
4070    add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
4071    set interface p2 type=dummy ofport_request=2 -- \
4072    set interface p3 type=dummy ofport_request=3])
4073 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4074 ])
4075 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4076
4077 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4078 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)'])
4079 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)'])
4080 sleep 1
4081 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4082 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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/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), actions: <del>
4083 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4084 ])
4085 OVS_VSWITCHD_STOP
4086 AT_CLEANUP
4087
4088 AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
4089 # Create bond0 on br0 with interfaces p0 and p1
4090 #    and bond1 on br1 with interfaces p2 and p3
4091 # with p0 patched to p2 and p1 patched to p3.
4092 OVS_VSWITCHD_START(
4093   [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
4094                             other-config:lacp-time=fast \
4095                             other-config:bond-rebalance-interval=0 -- \
4096    set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
4097    set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
4098    add-br br1 -- \
4099    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
4100    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
4101                   fail-mode=secure -- \
4102    add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
4103                             other-config:lacp-time=fast \
4104                             other-config:bond-rebalance-interval=0 -- \
4105    set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
4106    set interface p3 type=patch options:peer=p1 ofport_request=4 --])
4107
4108 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
4109 ])
4110 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4111 ADD_OF_PORTS([br0], [7])
4112 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
4113 AT_CHECK([ovs-ofctl add-flow br1 action=normal])
4114 ovs-appctl time/stop
4115 ovs-appctl time/warp 5000
4116 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)'])
4117 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)'])
4118 sleep 1
4119 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4120 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),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), actions: <del>
4121 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4122 ])
4123 OVS_VSWITCHD_STOP
4124 AT_CLEANUP
4125
4126 AT_SETUP([ofproto-dpif megaflow - resubmit port action])
4127 OVS_VSWITCHD_START
4128 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4129 ADD_OF_PORTS([br0], [1], [2])
4130 AT_DATA([flows.txt], [dnl
4131 table=0 in_port=1,ip actions=resubmit(90)
4132 table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
4133 ])
4134 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4135 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)'])
4136 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)'])
4137 sleep 1
4138 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4139 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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), actions: <del>
4140 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4141 ])
4142 OVS_VSWITCHD_STOP
4143 AT_CLEANUP
4144
4145 AT_SETUP([ofproto-dpif megaflow - resubmit table action])
4146 OVS_VSWITCHD_START
4147 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4148 ADD_OF_PORTS([br0], [1], [2])
4149 AT_DATA([flows.txt], [dnl
4150 table=0 in_port=1,ip actions=resubmit(,1)
4151 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4152 ])
4153 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4154 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)'])
4155 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=
4156 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
4157 sleep 1
4158 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4159 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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), actions: <del>
4160 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4161 ])
4162 OVS_VSWITCHD_STOP
4163 AT_CLEANUP
4164
4165 AT_SETUP([ofproto-dpif megaflow - goto_table action])
4166 OVS_VSWITCHD_START
4167 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4168 ADD_OF_PORTS([br0], [1], [2])
4169 AT_DATA([flows.txt], [dnl
4170 table=0 in_port=1,ip actions=goto_table(1)
4171 table=1 dl_src=50:54:00:00:00:09 actions=output(2)
4172 ])
4173 AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
4174 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)'])
4175 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)'])
4176 sleep 1
4177 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4178 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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), actions: <del>
4179 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4180 ])
4181 OVS_VSWITCHD_STOP
4182 AT_CLEANUP
4183
4184 AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
4185 OVS_VSWITCHD_START
4186 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4187 ADD_OF_PORTS([br0], [1], [2], [3])
4188 ovs-vsctl \
4189         set Bridge br0 mirrors=@m --\
4190         --id=@p3 get Port p3 --\
4191         --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4192
4193 AT_DATA([flows.txt], [dnl
4194 in_port=1 actions=output:2
4195 ])
4196 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4197 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)'])
4198 sleep 1
4199 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)'])
4200 sleep 1
4201 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4202 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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), actions: <del>
4203 ])
4204 OVS_VSWITCHD_STOP
4205 AT_CLEANUP
4206
4207 AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
4208 OVS_VSWITCHD_START
4209 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4210 ADD_OF_PORTS([br0], [1], [2], [3])
4211 ovs-vsctl \
4212         set Bridge br0 mirrors=@m --\
4213         --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
4214         --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
4215
4216 AT_DATA([flows.txt], [dnl
4217 in_port=1 actions=output:2
4218 ])
4219 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4220 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))'])
4221 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)'])
4222 sleep 1
4223 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4224 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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(0x8100),vlan(vid=11/0xfff,pcp=7/0x0,cfi=1/1),encap(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)), actions: <del>
4225 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4226 ])
4227 OVS_VSWITCHD_STOP
4228 AT_CLEANUP
4229
4230 AT_SETUP([ofproto-dpif megaflow - move action])
4231 OVS_VSWITCHD_START
4232 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4233 ADD_OF_PORTS([br0], [1], [2])
4234 AT_DATA([flows.txt], [dnl
4235 table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
4236 table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
4237 table=0 in_port=91 reg0=0x0a000002,actions=output(2)
4238 ])
4239 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4240 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)'])
4241 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)'])
4242 sleep 1
4243 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4244 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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/255.255.255.255,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), actions: <del>
4245 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4246 ])
4247 OVS_VSWITCHD_STOP
4248 AT_CLEANUP
4249
4250 AT_SETUP([ofproto-dpif megaflow - push action])
4251 OVS_VSWITCHD_START
4252 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4253 ADD_OF_PORTS([br0], [1], [2])
4254 AT_DATA([flows.txt], [dnl
4255 table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
4256 ])
4257 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4258 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)'])
4259 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)'])
4260 sleep 1
4261 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4262 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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/255.255.255.255,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), actions: <del>
4263 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4264 ])
4265 OVS_VSWITCHD_STOP
4266 AT_CLEANUP
4267
4268 AT_SETUP([ofproto-dpif megaflow - learning])
4269 OVS_VSWITCHD_START
4270 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4271 ADD_OF_PORTS([br0], [1], [2])
4272 AT_DATA([flows.txt], [dnl
4273 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
4274 ])
4275 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4276 ovs-appctl time/stop
4277 # We send each packet twice because the first packet in each flow causes the
4278 # flow table to change and thus revalidations, which (depending on timing)
4279 # can keep a megaflow from being installed.  The revalidations are done by
4280 # the second iteration, allowing the flows to be installed.
4281 for i in 1 2; do
4282     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)'])
4283     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)'])
4284     ovs-appctl time/warp 100
4285 done
4286 sleep 1
4287 dnl The original flow is missing due to a revalidation.
4288 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4289 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,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), actions: <del>
4290 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4291 ])
4292 OVS_VSWITCHD_STOP
4293 AT_CLEANUP
4294
4295 AT_SETUP([ofproto-dpif megaflow - tunnels])
4296 OVS_VSWITCHD_START(
4297   [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
4298 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4299 AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
4300      options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
4301 AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
4302           ofport_request=3])
4303 AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
4304      options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
4305      ofport_request=4 options:key=flow])
4306 AT_DATA([flows.txt], [dnl
4307 in_port=1,actions=output(2)
4308 in_port=3,actions=output(4)
4309 ])
4310 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4311 dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
4312 dnl will cause the packet to be dropped.
4313 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)'])
4314 sleep 1
4315 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)'])
4316 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)'])
4317 sleep 1
4318 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)'])
4319 sleep 1
4320 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4321 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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=0xfd/0x3,ttl=128/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4322 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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=0xfd/0xff,ttl=128/0xff,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4323 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(3),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0x1/0xff,ttl=64/0xff,frag=no/0xff),icmp(type=8/0,code=0/0), actions: <del>
4324 ])
4325 OVS_VSWITCHD_STOP
4326 AT_CLEANUP
4327
4328 AT_SETUP([ofproto-dpif megaflow - dec_ttl])
4329 OVS_VSWITCHD_START
4330 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4331 ADD_OF_PORTS([br0], [1], [2])
4332 AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
4333 AT_DATA([flows.txt], [dnl
4334 table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
4335 ])
4336 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4337 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)'])
4338 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)'])
4339 sleep 1
4340 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
4341 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),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/255.255.255.252,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), actions: <del>
4342 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),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/0,code=0/0), actions: <del>
4343 ])
4344 OVS_VSWITCHD_STOP
4345 AT_CLEANUP
4346
4347 AT_SETUP([ofproto-dpif megaflow - set dl_dst])
4348 OVS_VSWITCHD_START
4349 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4350 ADD_OF_PORTS([br0], [1], [2])
4351 AT_DATA([flows.txt], [dnl
4352 table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
4353 ])
4354 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4355 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)'])
4356 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)'])
4357 sleep 1
4358 dnl The megaflows do not match the same fields, since the first packet
4359 dnl is essentially a no-op.  (The new destination MAC is the same as the
4360 dnl original.) The ofproto-dpif library un-wildcards the destination MAC
4361 dnl so that a packet that doesn't need its MAC address changed doesn't
4362 dnl hide one that does.  Since the first entry doesn't need to change,
4363 dnl only the destination MAC address is matched (as decided by
4364 dnl ofproto-dpif).  The second entry actually updates the destination
4365 dnl MAC, so both the source and destination MAC addresses are
4366 dnl un-wildcarded, since the ODP commit functions update both the source
4367 dnl and destination MAC addresses.
4368 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4369 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/ff:ff:ff:ff:ff:ff),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), actions:2
4370 skb_priority(0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),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/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0), actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
4371 ])
4372 OVS_VSWITCHD_STOP
4373 AT_CLEANUP
4374
4375 AT_SETUP([ofproto-dpif megaflow - disabled])
4376 OVS_VSWITCHD_START
4377 AT_CHECK([ovs-appctl vlog/set dpif:dbg])
4378 ADD_OF_PORTS([br0], [1], [2])
4379 AT_DATA([flows.txt], [dnl
4380 table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
4381 table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
4382 ])
4383 AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
4384 ], [])
4385 AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
4386 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4387 for i in 1 2 3 4; do
4388     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)'])
4389     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)'])
4390     if [[ $i -eq 1 ]]; then
4391         sleep 1
4392     fi
4393 done
4394 sleep 1
4395 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
4396 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),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), actions:2
4397 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),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), actions:drop
4398 ])
4399 AT_CHECK([cat ovs-vswitchd.log | grep '00:09.*packets:3' | FILTER_FLOW_DUMP], [0], [dnl
4400 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),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), packets:3, bytes:180, used:0.0s, actions:2
4401 ])
4402 AT_CHECK([cat ovs-vswitchd.log | grep '00:0b.*packets:3' | FILTER_FLOW_DUMP], [0], [dnl
4403 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),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), packets:3, bytes:180, used:0.0s, actions:drop
4404 ])
4405 OVS_VSWITCHD_STOP
4406 AT_CLEANUP
4407
4408 AT_SETUP([ofproto-dpif - datapath port number change])
4409 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4410 ADD_OF_PORTS([br0], 1)
4411
4412 # Trace a flow that should output to p1.
4413 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4414   [0], [stdout])
4415 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
4416 ])
4417
4418 # Change p1's port number to 5.
4419 AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
4420
4421 # Trace a flow that should output to p1 in its new location.
4422 AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
4423   [0], [stdout])
4424 AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
4425 ])
4426 OVS_VSWITCHD_STOP
4427 AT_CLEANUP
4428
4429 # Tests the bundling with various bfd and cfm configurations.
4430 AT_SETUP([ofproto - bundle with variable bfd/cfm config])
4431 OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
4432                     add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
4433                     add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
4434                     set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
4435                     set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
4436                     set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
4437                     set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
4438                     set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
4439                     set Interface p0 cfm_mpid=1 -- \
4440                     set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
4441
4442 ovs-appctl time/stop
4443 # advance the clock to stablize everything.
4444 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4445 # cfm/show should show 'recv' fault.
4446 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4447         fault: recv
4448 ])
4449 # bfd/show should show 'up'.
4450 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4451         Local Session State: up
4452         Remote Session State: up
4453         Local Session State: up
4454         Remote Session State: up
4455 ])
4456 # bond/show should show 'may-enable: true' for all slaves.
4457 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4458         may_enable: true
4459         may_enable: true
4460         may_enable: true
4461         may_enable: true
4462 ])
4463
4464 # now disable the bfd on p1.
4465 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
4466 # advance the clock to stablize everything.
4467 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4468 # cfm/show should show 'recv' fault.
4469 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4470         fault: recv
4471 ])
4472 # bfd/show should show 'down'.
4473 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4474         Local Session State: down
4475         Remote Session State: down
4476 ])
4477 # bond/show should show 'may-enable: false' for p0.
4478 AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4479         may_enable: false
4480         may_enable: true
4481 ])
4482
4483 # now enable the bfd on p1 and disable bfd on p0.
4484 AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
4485 AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
4486 # advance the clock to stablize everything.
4487 for i in `seq 0 49`; do ovs-appctl time/warp 100; done
4488 # cfm/show should show 'recv' fault.
4489 AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
4490         fault: recv
4491 ])
4492 # bfd/show should show 'down'.
4493 AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
4494         Local Session State: down
4495         Remote Session State: down
4496 ])
4497 # bond/show should show 'may-enable: false' for p0 and p1.
4498 AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
4499         may_enable: false
4500         may_enable: true
4501         may_enable: false
4502         may_enable: true
4503 ])
4504
4505 OVS_VSWITCHD_STOP
4506 AT_CLEANUP
4507
4508 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
4509 OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
4510
4511 # enable bfd on p0.
4512 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4513 # check log.
4514 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4515 # disable bfd on p0.
4516 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4517 # check log.
4518 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4519 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4520
4521 # enable cfm on p0.
4522 AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
4523 # check log.
4524 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4525 # disable cfm on p0.
4526 AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
4527 # check log.
4528 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4529 AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
4530
4531 # enable both bfd and cfm on p0.
4532 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
4533 # check log.
4534 OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
4535 # disable bfd on p0.
4536 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
4537 # check log, there should not be the log of thread terminated.
4538 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4539 ])
4540 # reenable bfd on p0.
4541 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
4542 # check log, should still be on log of thread created.
4543 AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
4544 monitor thread created
4545 ])
4546 # disable bfd and cfm together.
4547 AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
4548 # check log.
4549 OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
4550
4551 OVS_VSWITCHD_STOP
4552 AT_CLEANUP
4553
4554 # this test helps avoid the deadlock between the main thread and monitor thread.
4555 AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
4556 OVS_VSWITCHD_START
4557
4558 for i in `seq 1 199`
4559 do
4560     AT_CHECK([ovs-vsctl add-port br0 p$i -- set interface p$i type=gre options:remote_ip=1.2.3.4 options:key=$i bfd:enable=true])
4561 done
4562
4563 OVS_VSWITCHD_STOP
4564 AT_CLEANUP
4565 \f
4566 AT_BANNER([ofproto-dpif - flow translation resource limits])
4567
4568 AT_SETUP([ofproto-dpif - infinite resubmit])
4569 OVS_VSWITCHD_START
4570 AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
4571 AT_CHECK([ovs-appctl ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
4572   [0], [stdout])
4573 AT_CHECK([tail -1 stdout], [0], [Datapath actions: drop
4574 ])
4575 AT_CHECK([grep -c 'resubmit actions recursed over 64 times' ovs-vswitchd.log],
4576   [0], [1
4577 ])
4578 OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
4579 AT_CLEANUP
4580
4581 AT_SETUP([ofproto-dpif - exponential resubmit chain])
4582 OVS_VSWITCHD_START
4583 ADD_OF_PORTS([br0], 1)
4584 (for i in `seq 1 64`; do
4585      j=`expr $i + 1`
4586      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4587  done
4588  echo "in_port=65, actions=local") > flows
4589  AT_CHECK([ovs-ofctl add-flows br0 flows])
4590 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4591 AT_CHECK([grep -c 'over 4096 resubmit actions' ovs-vswitchd.log], [0], [1
4592 ])
4593 OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
4594 AT_CLEANUP
4595
4596 AT_SETUP([ofproto-dpif - too many output actions])
4597 OVS_VSWITCHD_START
4598 ADD_OF_PORTS([br0], 1)
4599 (for i in `seq 1 12`; do
4600      j=`expr $i + 1`
4601      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4602  done
4603  echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
4604 AT_CHECK([ovs-ofctl add-flows br0 flows])
4605 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4606 AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
4607   [0], [1
4608 ])
4609 AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' ovs-vswitchd.log], [0], [1
4610 ])
4611 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
4612 AT_CLEANUP
4613
4614 AT_SETUP([ofproto-dpif - stack too deep])
4615 OVS_VSWITCHD_START
4616 ADD_OF_PORTS([br0], 1)
4617 (for i in `seq 1 12`; do
4618      j=`expr $i + 1`
4619      echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
4620  done
4621  push="push:NXM_NX_REG0[[]]"
4622  echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
4623  AT_CHECK([ovs-ofctl add-flows br0 flows])
4624 AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1'], [0], [stdout])
4625 AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' ovs-vswitchd.log], [0], [1
4626 ])
4627 OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
4628 AT_CLEANUP
4629
4630
4631 AT_SETUP([ofproto-dpif packet-out controller])
4632 OVS_VSWITCHD_START
4633 ADD_OF_PORTS([br0], 1, 2)
4634
4635 AT_CHECK([ovs-ofctl add-flow br0 'dl_dst=50:54:00:00:00:0a actions=controller'])
4636
4637 AT_CAPTURE_FILE([ofctl_monitor.log])
4638 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4639
4640 for i in 1 2 3; do
4641         AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER controller '50540000000a5054000000091234'])
4642 done
4643
4644 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4645 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4646 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
4647 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4648 dnl
4649 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
4650 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4651 dnl
4652 NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
4653 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4654 ])
4655
4656 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
4657  dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
4658 NXST_FLOW reply:
4659 ])
4660
4661 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2): 254 tables"
4662  echo "  0: active=1, lookup=0, matched=0"
4663  x=1
4664  while test $x -lt 254; do
4665    echo "  $x: active=0, lookup=0, matched=0"
4666    x=`expr $x + 1`
4667  done) > expout
4668 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
4669
4670 OVS_VSWITCHD_STOP
4671 AT_CLEANUP
4672
4673
4674 AT_SETUP([ofproto-dpif packet-out controller (patch port)])
4675 OVS_VSWITCHD_START(
4676   [-- \
4677    add-port br0 p1 -- \
4678    set interface p1 type=patch options:peer=p2 -- \
4679    add-br br1 -- \
4680    set bridge br1 datapath-type=dummy -- \
4681    set bridge br1 fail-mode=secure -- \
4682    set bridge br1 protocols='[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13]' -- \
4683    add-port br1 p2 -- \
4684    set interface p2 type=patch options:peer=p1 --])
4685
4686 AT_CAPTURE_FILE([ofctl_monitor.log])
4687 AT_CHECK([ovs-ofctl monitor br1 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4688
4689 for i in 1 2 3; do
4690         AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER output:1 '50540000000a5054000000091234'])
4691 done
4692
4693 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4694 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4695 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
4696 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4697 dnl
4698 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
4699 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4700 dnl
4701 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
4702 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4703 ])
4704
4705 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2): 254 tables"
4706  x=0
4707  while test $x -lt 254; do
4708    echo "  $x: active=0, lookup=0, matched=0"
4709    x=`expr $x + 1`
4710  done) > expout
4711 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
4712
4713 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2): 254 tables"
4714  echo "  0: active=0, lookup=3, matched=0"
4715  x=1
4716  while test $x -lt 254; do
4717    echo "  $x: active=0, lookup=0, matched=0"
4718    x=`expr $x + 1`
4719  done) > expout
4720 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br1 ], [0], [expout])
4721
4722 OVS_VSWITCHD_STOP
4723 AT_CLEANUP
4724
4725
4726 AT_SETUP([ofproto-dpif packet-out goto_table])
4727 OVS_VSWITCHD_START
4728 ADD_OF_PORTS([br0], 1, 2)
4729
4730 AT_DATA([flows.txt], [dnl
4731 table=0 dl_dst=50:54:00:00:00:0a actions=goto_table(1)
4732 table=1 dl_dst=50:54:00:00:00:0a actions=controller
4733 ])
4734 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
4735
4736 AT_CAPTURE_FILE([ofctl_monitor.log])
4737 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4738
4739 for i in 1 2 3; do
4740     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(0x1234)'
4741 done
4742
4743 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
4744 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4745 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4746 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4747 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4748 dnl
4749 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4750 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4751 dnl
4752 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4753 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4754 ])
4755
4756 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
4757
4758 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
4759  n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=goto_table:1
4760  table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
4761 OFPST_FLOW reply (OF1.3):
4762 ])
4763
4764 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2): 254 tables"
4765  echo "  0: active=1, lookup=3, matched=3"
4766  echo "  1: active=1, lookup=3, matched=3"
4767  x=2
4768  while test $x -lt 254; do
4769    echo "  $x: active=0, lookup=0, matched=0"
4770    x=`expr $x + 1`
4771  done) > expout
4772 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
4773
4774 OVS_VSWITCHD_STOP
4775 AT_CLEANUP
4776
4777
4778 AT_SETUP([ofproto-dpif packet-out table-miss (continue)])
4779 OVS_VSWITCHD_START
4780 ADD_OF_PORTS([br0], 1, 2)
4781
4782 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 'table=1 dl_dst=50:54:00:00:00:0a actions=controller'])
4783 AT_CHECK([ovs-ofctl -O OpenFlow13 mod-table br0 all continue])
4784
4785 AT_CAPTURE_FILE([ofctl_monitor.log])
4786 AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4787
4788 for i in 1 2 3; do
4789     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(0x1234)'
4790 done
4791
4792 OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
4793 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4794 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4795 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4796 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4797 dnl
4798 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4799 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4800 dnl
4801 NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
4802 metadata=0,in_port=0,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
4803 ])
4804
4805 AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
4806
4807 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
4808  table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
4809 OFPST_FLOW reply (OF1.3):
4810 ])
4811
4812 (echo "OFPST_TABLE reply (OF1.3) (xid=0x2): 254 tables"
4813  echo "  0: active=0, lookup=3, matched=0"
4814  echo "  1: active=1, lookup=3, matched=3"
4815  x=2
4816  while test $x -lt 254; do
4817    echo "  $x: active=0, lookup=0, matched=0"
4818    x=`expr $x + 1`
4819  done) > expout
4820 AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
4821
4822 OVS_VSWITCHD_STOP
4823 AT_CLEANUP
4824
4825 AT_SETUP([ofproto-dpif - ICMPv6])
4826 OVS_VSWITCHD_START
4827 ADD_OF_PORTS([br0], 1)
4828
4829 AT_CAPTURE_FILE([ofctl_monitor.log])
4830
4831 AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
4832
4833 ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
4834
4835 OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
4836
4837 AT_CHECK([cat ofctl_monitor.log], [0], [dnl
4838 NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
4839 icmp6,metadata=0,in_port=0,vlan_tci=0x0000,dl_src=00:00:86:05:80:da,dl_dst=00:60:97:07:69:ea,ipv6_src=fe80::200:86ff:fe05:80da,ipv6_dst=fe80::260:97ff:fe07:69ea,ipv6_label=0x00000,nw_tos=0,nw_ecn=0,nw_ttl=255,icmp_type=135,icmp_code=0,nd_target=fe80::260:97ff:fe07:69ea,nd_sll=00:00:86:05:80:da,nd_tll=00:00:00:00:00:00
4840 ])
4841
4842 OVS_VSWITCHD_STOP
4843 AT_CLEANUP