]> git.proxmox.com Git - ovs.git/blame - tests/ofproto-dpif.at
ovs-vsctl: Add parent process name and ID.
[ovs.git] / tests / ofproto-dpif.at
CommitLineData
29901626
BP
1AT_BANNER([ofproto-dpif])
2
27f57736
JS
3AT_SETUP([ofproto-dpif - revalidator/wait])
4OVS_VSWITCHD_START
5AT_CHECK([ovs-appctl revalidator/wait])
6OVS_VSWITCHD_STOP
7AT_CLEANUP
8
5f5ebd4c 9AT_SETUP([ofproto-dpif - active-backup bonding])
adcf00ba
AZ
10# Create br0 with interfaces p1, p2 and p7, creating bond0 with p1 and p2
11# and br1 with interfaces p3, p4 and p8.
12# toggle p1,p2 of bond0 up and down to test bonding in active-backup mode.
13OVS_VSWITCHD_START(
14 [add-bond br0 bond0 p1 p2 bond_mode=active-backup --\
15 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
16 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
17 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
18 add-br br1 -- \
19 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
20 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
21 fail-mode=secure -- \
22 add-port br1 p3 -- set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
23 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
24 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
55466d72 25WAIT_FOR_DUMMY_PORTS([p3], [p4])
623540e4 26AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
adcf00ba
AZ
27
28AT_CHECK([ovs-ofctl add-flow br0 action=normal])
29AT_CHECK([ovs-ofctl add-flow br1 action=normal])
30ovs-appctl netdev-dummy/set-admin-state up
31ovs-appctl time/warp 100
32ovs-appctl netdev-dummy/set-admin-state p2 down
33ovs-appctl time/stop
34ovs-appctl time/warp 100
35AT_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)'])
36AT_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)'])
37ovs-appctl time/warp 100
38ovs-appctl netdev-dummy/set-admin-state p2 up
39ovs-appctl netdev-dummy/set-admin-state p1 down
40ovs-appctl time/warp 100
41AT_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)'])
42AT_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)'])
bdba1947 43ovs-appctl time/warp 200 100
53555f51 44sleep 1
623540e4 45AT_CHECK([cat ovs-vswitchd.log | grep 'in_port=[[348]]' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
16194afd
DDP
46recirc_id=0,ip,in_port=3,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
47recirc_id=0,ip,in_port=3,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
48recirc_id=0,ip,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0d,nw_frag=no, actions: <del>
49recirc_id=0,ip,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0e,nw_frag=no, actions: <del>
50recirc_id=0,rarp,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=ff:ff:ff:ff:ff:ff, actions: <del>
51recirc_id=0,rarp,in_port=4,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=ff:ff:ff:ff:ff:ff, actions: <del>
adcf00ba
AZ
52])
53OVS_VSWITCHD_STOP
54AT_CLEANUP
55
5f5ebd4c 56AT_SETUP([ofproto-dpif - balance-slb bonding])
adcf00ba
AZ
57# Create br0 with interfaces bond0(p1, p2, p3) and p7,
58# and br1 with interfaces p4, p5, p6 and p8.
59# p1 <-> p4, p2 <-> p5, p3 <-> p6
60# Send some traffic, make sure the traffic are spread based on source mac.
61OVS_VSWITCHD_START(
62 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-slb --\
63 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
64 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
65 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
66 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
67 add-br br1 -- \
68 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
69 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
70 fail-mode=secure -- \
71 add-port br1 p4 -- set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
72 add-port br1 p5 -- set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
73 add-port br1 p6 -- set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
74 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
55466d72 75WAIT_FOR_DUMMY_PORTS([p4], [p5], [p6])
adcf00ba
AZ
76AT_CHECK([ovs-ofctl add-flow br0 action=normal])
77AT_CHECK([ovs-ofctl add-flow br1 action=normal])
78AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
79])
adcf00ba
AZ
80ovs-appctl time/stop
81ovs-appctl time/warp 100
82(
83for i in `seq 0 100 |xargs printf '%02x\n'`;
84 do
85 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)"
86 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
87 done
88)
89ovs-appctl time/warp 100
90AT_CHECK([ovs-appctl dpif/dump-flows br1 > br1_flows.txt])
91# Make sure there is resonable distribution to all three ports.
92# We don't want to make this check precise, in case hash function changes.
93AT_CHECK([test `egrep 'in_port\(4\)' br1_flows.txt |wc -l` -gt 3])
94AT_CHECK([test `egrep 'in_port\(5\)' br1_flows.txt |wc -l` -gt 3])
95AT_CHECK([test `egrep 'in_port\(6\)' br1_flows.txt |wc -l` -gt 3])
96OVS_VSWITCHD_STOP
97AT_CLEANUP
98
5f5ebd4c 99AT_SETUP([ofproto-dpif - balance-tcp bonding])
adcf00ba
AZ
100# Create br0 with interfaces bond0(p1, p2, p3) and p7,
101# and br1 with interfaces bond1(p4, p5, p6) and p8.
102# bond0 <-> bond1
103# Send some traffic, make sure the traffic are spread based on L4 headers.
104OVS_VSWITCHD_START(
105 [add-bond br0 bond0 p1 p2 p3 bond_mode=balance-tcp lacp=active \
106 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
107 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
108 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
109 set interface p3 type=dummy options:pstream=punix:$OVS_RUNDIR/p3.sock ofport_request=3 -- \
110 add-port br0 p7 -- set interface p7 ofport_request=7 type=dummy -- \
111 add-br br1 -- \
112 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
113 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
114 fail-mode=secure -- \
115 add-bond br1 bond1 p4 p5 p6 bond_mode=balance-tcp lacp=active \
116 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 --\
117 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=4 -- \
118 set interface p5 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=5 -- \
119 set interface p6 type=dummy options:stream=unix:$OVS_RUNDIR/p3.sock ofport_request=6 -- \
120 add-port br1 p8 -- set interface p8 ofport_request=8 type=dummy --])
121AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
122])
123AT_CHECK([ovs-ofctl add-flow br0 action=normal])
124AT_CHECK([ovs-ofctl add-flow br1 action=normal])
125AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
126], [])
48105e85 127OVS_WAIT_WHILE([ovs-appctl bond/show | grep "may_enable: false"])
adcf00ba
AZ
128ovs-appctl time/stop
129ovs-appctl time/warp 100
130ovs-appctl lacp/show > lacp.txt
131ovs-appctl bond/show > bond.txt
132(
25d6a6a8 133for i in `seq 0 255` ;
adcf00ba 134 do
ea2735d3 135 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(ack)"
adcf00ba
AZ
136 AT_CHECK([ovs-appctl netdev-dummy/receive p7 $pkt])
137 done
138)
bdba1947 139ovs-appctl time/warp 300 100
adcf00ba
AZ
140AT_CHECK([ovs-appctl dpif/dump-flows br0 |grep tcp > br0_flows.txt])
141AT_CHECK([ovs-appctl dpif/dump-flows br1 |grep tcp > br1_flows.txt])
142# Make sure there is resonable distribution to all three ports.
143# We don't want to make this check precise, in case hash function changes.
fd184489
AZ
144AT_CHECK([test `grep in_port.4 br1_flows.txt |wc -l` -gt 24])
145AT_CHECK([test `grep in_port.5 br1_flows.txt |wc -l` -gt 24])
146AT_CHECK([test `grep in_port.6 br1_flows.txt |wc -l` -gt 24])
f9038ef6
AW
147
148OVS_VSWITCHD_STOP()
149AT_CLEANUP
150
151# Makes sure recirculation does not change the way packet is handled.
5f5ebd4c 152AT_SETUP([ofproto-dpif - balance-tcp bonding, different recirc flow ])
f9038ef6
AW
153OVS_VSWITCHD_START(
154 [add-bond br0 bond0 p1 p2 bond_mode=balance-tcp lacp=active \
155 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
156 set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p1.sock ofport_request=1 -- \
157 set interface p2 type=dummy options:pstream=punix:$OVS_RUNDIR/p2.sock ofport_request=2 -- \
158 add-br br1 -- \
159 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
160 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
161 fail-mode=standalone -- \
162 add-bond br1 bond1 p3 p4 bond_mode=balance-tcp lacp=active \
163 other-config:lacp-time=fast other-config:bond-rebalance-interval=0 -- \
164 set interface p3 type=dummy options:stream=unix:$OVS_RUNDIR/p1.sock ofport_request=3 -- \
165 set interface p4 type=dummy options:stream=unix:$OVS_RUNDIR/p2.sock ofport_request=4 -- \
166 add-port br1 br1- -- set interface br1- type=patch options:peer=br1+ ofport_request=100 -- \
167 add-br br-int -- \
168 set bridge br-int other-config:hwaddr=aa:77:aa:77:00:00 -- \
169 set bridge br-int datapath-type=dummy other-config:datapath-id=1235 \
170 fail-mode=secure -- \
171 add-port br-int br1+ -- set interface br1+ type=patch options:peer=br1- ofport_request=101 -- \
172 add-port br-int p5 -- set interface p5 ofport_request=5 type=dummy
173])
174AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
175])
176
f12bfd04
AW
177# Waits for all ifaces enabled.
178OVS_WAIT_UNTIL([test `ovs-appctl bond/show | grep -- "may_enable: true" | wc -l` -ge 4])
179
f9038ef6
AW
180# The dl_vlan flow should not be ever matched,
181# since recirculation should not change the flow handling.
182AT_DATA([flows.txt], [dnl
183table=0 priority=1 in_port=5 actions=mod_vlan_vid:1,output(101)
184table=0 priority=2 in_port=5 dl_vlan=1 actions=drop
185])
186AT_CHECK([ovs-ofctl add-flows br-int flows.txt])
187
188# Sends a packet to trigger recirculation.
f9038ef6
AW
189AT_CHECK([ovs-appctl netdev-dummy/receive p5 "in_port(5),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)"])
190
191# Collects flow stats.
192AT_CHECK([ovs-appctl revalidator/purge], [0])
193
194# Checks the flow stats in br1, should only be one flow with non-zero
195# 'n_packets' from internal table.
e2167cb7
AZ
196AT_CHECK([ovs-appctl bridge/dump-flows br1 | ofctl_strip | grep -- "n_packets" | grep -- "table_id" | sed -e 's/output:[[0-9]][[0-9]]*/output/'] , [0], [dnl
197table_id=254, n_packets=1, n_bytes=64, priority=20,recirc_id=0x0,dp_hash=0x0/0xff,actions=output
f9038ef6
AW
198])
199
200# Checks the flow stats in br-int, should be only one match.
201AT_CHECK([ovs-ofctl dump-flows br-int | ofctl_strip | sort], [0], [dnl
202 n_packets=1, n_bytes=60, priority=1,in_port=5 actions=mod_vlan_vid:1,output:101
203 priority=2,in_port=5,dl_vlan=1 actions=drop
204NXST_FLOW reply:
205])
206
adcf00ba
AZ
207OVS_VSWITCHD_STOP()
208AT_CLEANUP
209
29901626 210AT_SETUP([ofproto-dpif - resubmit])
023e1e0a 211OVS_VSWITCHD_START
f7b8e494
JP
212ADD_OF_PORTS([br0], [1], [10], [11], [12], [13], [14], [15],
213 [16], [17], [18], [19], [20], [21])
29901626
BP
214AT_DATA([flows.txt], [dnl
215table=0 in_port=1 priority=1000 icmp actions=output(10),resubmit(2),output(19),resubmit(3),output(21)
216table=0 in_port=2 priority=1500 icmp actions=output(11),resubmit(,1),output(16),resubmit(2,1),output(18)
217table=0 in_port=3 priority=2000 icmp actions=output(20)
218table=1 in_port=1 priority=1000 icmp actions=output(12),resubmit(4,1),output(13),resubmit(3),output(15)
219table=1 in_port=2 priority=1500 icmp actions=output(17),resubmit(,2)
220table=1 in_port=3 priority=1500 icmp actions=output(14),resubmit(,2)
221])
222AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31a19d69 223AT_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])
29901626
BP
224AT_CHECK([tail -1 stdout], [0],
225 [Datapath actions: 10,11,12,13,14,15,16,17,18,19,20,21
226])
023e1e0a 227OVS_VSWITCHD_STOP
29901626 228AT_CLEANUP
58a89177 229
55599423
JR
230AT_SETUP([ofproto-dpif - goto table])
231OVS_VSWITCHD_START
232ADD_OF_PORTS([br0], [1], [10], [11])
233echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
4468099e
EJ
234for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
235echo "table=64 actions=output(11)" >> flows.txt
55599423
JR
236AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
237AT_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])
238AT_CHECK([tail -1 stdout], [0],
239 [Datapath actions: 10,11
240])
241OVS_VSWITCHD_STOP
242AT_CLEANUP
243
7fdb60a7
SH
244AT_SETUP([ofproto-dpif - write actions])
245OVS_VSWITCHD_START
246ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
247AT_DATA([flows.txt], [dnl
248table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
249table=1 ip actions=write_actions(output(13)),goto_table(2)
250table=2 ip actions=set_field:192.168.3.91->ip_src,output(11)
251])
252AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
253AT_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])
ce58df5b 254AT_CHECK([tail -2 stdout], [0],
16194afd 255 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
d23df9a8 256Datapath actions: 10,set(ipv4(src=192.168.3.91)),11,set(ipv4(src=192.168.3.90)),13
7fdb60a7
SH
257])
258OVS_VSWITCHD_STOP
259AT_CLEANUP
260
e60e935b
SRCSA
261AT_SETUP([ofproto-dpif - modify IPv6 Neighbor Solitication (ND)])
262OVS_VSWITCHD_START
263ADD_OF_PORTS([br0], [1], [10], [11], [12], [13])
264AT_DATA([flows.txt], [dnl
265table=0 in_port=1,icmp6,icmpv6_type=135 actions=output(10),write_actions(set_field:fe80::3->nd_target,set_field:aa:aa:aa:aa:aa:aa->nd_sll,output(12)),goto_table(1)
266table=1 icmp6 actions=write_actions(output(13)),goto_table(2)
267table=2 in_port=1,icmp6,icmpv6_type=135 actions=set_field:fe80::4->nd_target,set_field:cc:cc:cc:cc:cc:cc->nd_sll,output(11)
268])
269AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
270AT_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,icmp6,ipv6_src=fe80::1,ipv6_dst=fe80::2,nw_tos=0,nw_ttl=128,icmpv6_type=135,nd_target=fe80::2020,nd_sll=66:55:44:33:22:11'], [0], [stdout])
271AT_CHECK([tail -4 stdout], [0],
ed5648b7 272 [Megaflow: recirc_id=0,icmp6,in_port=1,nw_frag=no,icmp_type=0x87/0xff,icmp_code=0x0/0xff,nd_target=fe80::2020,nd_sll=66:55:44:33:22:11
e60e935b
SRCSA
273Datapath actions: 10,set(nd(target=fe80::4,sll=cc:cc:cc:cc:cc:cc)),11,set(nd(target=fe80::3,sll=aa:aa:aa:aa:aa:aa)),13
274This flow is handled by the userspace slow path because it:
275 - Uses action(s) not supported by datapath.
276])
277OVS_VSWITCHD_STOP
278AT_CLEANUP
279
7fdb60a7
SH
280AT_SETUP([ofproto-dpif - clear actions])
281OVS_VSWITCHD_START
282ADD_OF_PORTS([br0], [1], [10], [11], [12])
283AT_DATA([flows.txt], [dnl
284table=0 in_port=1,ip actions=output(10),write_actions(set_field:192.168.3.90->ip_src,output(12)),goto_table(1)
ce58df5b 285table=1 tcp actions=set_field:91->tp_src,output(11),clear_actions
7fdb60a7
SH
286])
287AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
ce58df5b
JR
288AT_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])
289AT_CHECK([tail -2 stdout], [0],
16194afd 290 [Megaflow: recirc_id=0,tcp,in_port=1,nw_frag=no,tp_src=8
d23df9a8 291Datapath actions: 10,set(tcp(src=91)),11
7fdb60a7
SH
292])
293OVS_VSWITCHD_STOP
294AT_CLEANUP
295
0eb48fe1 296AT_SETUP([ofproto-dpif - group chaining])
5a070238
BP
297OVS_VSWITCHD_START
298ADD_OF_PORTS([br0], [1], [10], [11])
0eb48fe1
BP
299AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=set_field:192.168.3.90->ip_src,group:123,bucket=output:11'])
300AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=123,type=all,bucket=output:10'])
301AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
302AT_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])
303AT_CHECK([tail -1 stdout], [0],
304 [Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
5a070238
BP
305])
306OVS_VSWITCHD_STOP
307AT_CLEANUP
308
f4fb341b
SH
309AT_SETUP([ofproto-dpif - all group in action list])
310OVS_VSWITCHD_START
311ADD_OF_PORTS([br0], [1], [10], [11])
312AT_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'])
313AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
314AT_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])
d23df9a8
JR
315# Must match on the source address to be able to restore it's value for
316# the second bucket
ce58df5b 317AT_CHECK([tail -2 stdout], [0],
16194afd 318 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
d23df9a8 319Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
f4fb341b
SH
320])
321OVS_VSWITCHD_STOP
322AT_CLEANUP
323
324AT_SETUP([ofproto-dpif - indirect group in action list])
325OVS_VSWITCHD_START
326ADD_OF_PORTS([br0], [1], [10])
327AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
328AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234'])
329AT_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])
330AT_CHECK([tail -1 stdout], [0],
331 [Datapath actions: 10
332])
333OVS_VSWITCHD_STOP
334AT_CLEANUP
335
5b09e569
JR
336AT_SETUP([ofproto-dpif - group actions have no effect afterwards])
337OVS_VSWITCHD_START
338ADD_OF_PORTS([br0], [1], [10])
339AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=set_field:192.168.3.90->ip_src,output:10'])
340AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=group:1234,output:10'])
341AT_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])
342AT_CHECK([tail -1 stdout], [0],
343 [Datapath actions: set(ipv4(src=192.168.3.90,dst=192.168.0.2)),10,set(ipv4(src=192.168.0.1,dst=192.168.0.2)),10
344])
345OVS_VSWITCHD_STOP
346AT_CLEANUP
347
f4fb341b
SH
348AT_SETUP([ofproto-dpif - all group in action set])
349OVS_VSWITCHD_START
350ADD_OF_PORTS([br0], [1], [10], [11])
351AT_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'])
352AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
353AT_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])
d23df9a8
JR
354# Must match on the source address to be able to restore it's value for
355# the third bucket
ce58df5b 356AT_CHECK([tail -2 stdout], [0],
16194afd 357 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
d23df9a8 358Datapath actions: set(ipv4(src=192.168.3.90)),10,set(ipv4(src=192.168.0.1)),11
f4fb341b
SH
359])
360OVS_VSWITCHD_STOP
361AT_CLEANUP
362
363AT_SETUP([ofproto-dpif - indirect group in action set])
364OVS_VSWITCHD_START
365ADD_OF_PORTS([br0], [1], [10])
366AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 group_id=1234,type=indirect,bucket=output:10])
367AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
368AT_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])
369AT_CHECK([tail -1 stdout], [0],
370 [Datapath actions: 10
371])
372OVS_VSWITCHD_STOP
373AT_CLEANUP
374
fe7e5749
SH
375AT_SETUP([ofproto-dpif - select group])
376OVS_VSWITCHD_START
377ADD_OF_PORTS([br0], [1], [10], [11])
378AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,bucket=output:11'])
379AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
7cb279c2
SH
380
381# Try a bunch of different flows and make sure that they get distributed
382# at least somewhat.
383for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
384 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])
385 tail -1 stdout >> results
386done
387sort results | uniq -c
388AT_CHECK([sort results | uniq], [0],
fe7e5749 389 [Datapath actions: 10
7cb279c2 390Datapath actions: 11
fe7e5749
SH
391])
392OVS_VSWITCHD_STOP
393AT_CLEANUP
394
395AT_SETUP([ofproto-dpif - select group with watch port])
396OVS_VSWITCHD_START
397ADD_OF_PORTS([br0], [1], [10], [11])
398AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=watch_port:10,output:10,bucket=output:11'])
399AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
400AT_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])
401AT_CHECK([tail -1 stdout], [0],
402 [Datapath actions: 11
403])
404OVS_VSWITCHD_STOP
405AT_CLEANUP
406
7cb279c2
SH
407AT_SETUP([ofproto-dpif - select group with weight])
408OVS_VSWITCHD_START
409ADD_OF_PORTS([br0], [1], [10], [11], [12])
125bf01d 410AT_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'])
7cb279c2
SH
411AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
412AT_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])
413AT_CHECK([tail -1 stdout], [0],
414 [Datapath actions: 11
415])
416OVS_VSWITCHD_STOP
417AT_CLEANUP
418
0c4b9393
SH
419AT_SETUP([ofproto-dpif - select group with hash selection method])
420OVS_VSWITCHD_START
421ADD_OF_PORTS([br0], [1], [10], [11])
422AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 'group_id=1234,type=select,selection_method=hash,fields=eth_dst,bucket=output:10,bucket=output:11'])
423AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 'ip actions=write_actions(group:1234)'])
424
425# Try a bunch of different flows and make sure that they get distributed
426# at least somewhat.
427for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
428 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])
429 tail -1 stdout >> results
430done
431sort results | uniq -c
432AT_CHECK([sort results | uniq], [0],
433 [Datapath actions: 10
434Datapath actions: 11
435])
436
437> results
438# Try a bunch of different flows and make sure that they are not distributed
439# as they only vary a field that is not hashed
440for d in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
441 AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_src=50:54:00:00:00:$d,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])
442 tail -1 stdout >> results
443done
444sort results | uniq -c
445AT_CHECK([sort results | uniq], [0],
446 [Datapath actions: 10
447])
448
449OVS_VSWITCHD_STOP
450AT_CLEANUP
451
dd8cd4b4
SH
452AT_SETUP([ofproto-dpif - fast failover group])
453OVS_VSWITCHD_START
454ADD_OF_PORTS([br0], [1], [10], [11])
455AT_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'])
456AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
457AT_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])
458AT_CHECK([tail -1 stdout], [0],
459 [Datapath actions: drop
460])
461OVS_VSWITCHD_STOP
462AT_CLEANUP
463
b2af3288
AZ
464AT_SETUP([ofproto-dpif - group stats single bucket])
465OVS_VSWITCHD_START
466ADD_OF_PORTS([br0], [1], [10], [11])
467AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=select,bucket=output:10,weight=2000,bucket=output:11,weight=0'])
468AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
469(
470for i in `seq 0 2`;
471 do
472 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)"
473 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
474 done
475)
cea4a6d7 476AT_CHECK([ovs-appctl revalidator/purge], [0])
b2af3288
AZ
477AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
478AT_CHECK([STRIP_XIDS stdout | sort], [0], [dnl
4f20179d 479 group_id=1234,ref_count=1,packet_count=3,byte_count=180,bucket0:packet_count=3,byte_count=180,bucket1:packet_count=0,byte_count=0
b2af3288
AZ
480OFPST_GROUP reply (OF1.2):
481])
482OVS_VSWITCHD_STOP
483AT_CLEANUP
484
485AT_SETUP([ofproto-dpif - group stats all buckets])
486OVS_VSWITCHD_START
487ADD_OF_PORTS([br0], [1], [10], [11])
488AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:11'])
489AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(group:1234)'])
490(
491for i in `seq 0 2`;
492 do
493 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)"
494 AT_CHECK([ovs-appctl netdev-dummy/receive p1 $pkt])
495 done
496)
cea4a6d7 497AT_CHECK([ovs-appctl revalidator/purge], [0])
b2af3288
AZ
498AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-group-stats br0], [0], [stdout])
499AT_CHECK([STRIP_XIDS stdout | sort], [0], [dnl
4f20179d 500 group_id=1234,ref_count=1,packet_count=3,byte_count=180,bucket0:packet_count=3,byte_count=180,bucket1:packet_count=3,byte_count=180
b2af3288
AZ
501OFPST_GROUP reply (OF1.2):
502])
503OVS_VSWITCHD_STOP
504AT_CLEANUP
505
58a89177 506AT_SETUP([ofproto-dpif - registers])
023e1e0a 507OVS_VSWITCHD_START
f7b8e494 508ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
58a89177
EJ
509AT_DATA([flows.txt], [dnl
510in_port=90 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:91
511in_port=91 actions=resubmit:5,resubmit:6,resubmit:7,resubmit:92
e9358af6
EJ
512in_port=92 actions=resubmit:8,resubmit:9,resubmit:10,resubmit:11,resubmit:93
513in_port=93 actions=resubmit:12,resubmit:13,resubmit:14,resubmit:15
514
58a89177
EJ
515in_port=2 actions=load:0x000db000->NXM_NX_REG0[[]]
516in_port=3 actions=load:0xdea->NXM_NX_REG0[[20..31]]
517in_port=4 actions=load:0xeef->NXM_NX_REG0[[0..11]]
518in_port=5 actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]]
519in_port=6 actions=load:0x22222222->NXM_NX_REG2[[]]
520in_port=7 actions=move:NXM_NX_REG1[[20..31]]->NXM_NX_REG2[[0..11]]
521in_port=8 actions=move:NXM_NX_REG1[[0..11]]->NXM_NX_REG2[[20..31]]
522in_port=9,reg0=0xdeadbeef actions=output:20
523in_port=10,reg1=0xdeadbeef actions=output:21
524in_port=11,reg2=0xeef22dea actions=output:22
e9358af6
EJ
525
526dnl Sanilty check all registers
527in_port=12 actions=load:0x10->NXM_NX_REG0[[]],load:0x11->NXM_NX_REG1[[]],load:0x12->NXM_NX_REG2[[]]
528in_port=13 actions=load:0x13->NXM_NX_REG3[[]],load:0x14->NXM_NX_REG4[[]],load:0x15->NXM_NX_REG5[[]]
529in_port=14 actions=load:0x16->NXM_NX_REG6[[]],load:0x17->NXM_NX_REG7[[]]
530in_port=15,reg0=0x10,reg1=0x11,reg2=0x12,reg3=0x13,reg4=0x14,reg5=0x15,reg6=0x16,reg7=0x17 actions=output:33
bd85dac1 531
58a89177
EJ
532])
533AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 534AT_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])
58a89177 535AT_CHECK([tail -1 stdout], [0],
e9358af6 536 [Datapath actions: 20,21,22,33
58a89177 537])
023e1e0a 538OVS_VSWITCHD_STOP
58a89177 539AT_CLEANUP
f694937d 540
57fa8167
BP
541dnl Tests that the standardized xregs are mapped onto the legacy OVS registers
542dnl in the manner documented in ovs-ofctl(8).
543AT_SETUP([ofproto-dpif - extended registers])
544OVS_VSWITCHD_START
545ADD_OF_PORTS([br0], [1], [2], [3])
546AT_DATA([flows.txt], [dnl
547table=0 actions=load:0xfedcba9876543210->OXM_OF_PKT_REG1[[]],resubmit(,1)
548table=1,reg2=0xfedcba98,reg3=0x76543210 actions=2
549
550# These low-priority rules shouldn't match. They're here only to make really
551# sure that the test fails if either of the above rules fails to match.
552table=0,priority=0 actions=3
553table=1,priority=0 actions=3
554])
555AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
556AT_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])
557AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
558])
559OVS_VSWITCHD_STOP
560AT_CLEANUP
561
1b0ee636
TG
562AT_SETUP([ofproto-dpif - load and move order])
563OVS_VSWITCHD_START
564ADD_OF_PORTS([br0], [1], [10], [11])
565AT_CHECK([ovs-ofctl -O OpenFlow12 add-group br0 'group_id=1234,type=all,bucket=output:10,move:NXM_NX_REG1[[]]->NXM_OF_IP_SRC[[]],bucket=output:11'])
566AT_CHECK([ovs-ofctl -O OpenFlow12 add-flow br0 'ip actions=write_actions(load:0xffffffff->NXM_NX_REG1[[]],move:NXM_NX_REG1[[]]->NXM_NX_REG2[[]],group:1234)'])
567AT_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])
568AT_CHECK([tail -2 stdout], [0],
16194afd 569 [Megaflow: recirc_id=0,ip,in_port=1,nw_src=192.168.0.1,nw_frag=no
d23df9a8 570Datapath actions: set(ipv4(src=255.255.255.255)),10,set(ipv4(src=192.168.0.1)),11
1b0ee636
TG
571])
572OVS_VSWITCHD_STOP
573AT_CLEANUP
574
eb1cbc6b
JT
575dnl Tests that 1.5 copy-field can copy into the standardized xregs.
576AT_SETUP([ofproto-dpif - copy-field into extended registers])
577OVS_VSWITCHD_START
578ADD_OF_PORTS([br0], [1], [2], [3])
579AT_DATA([flows.txt], [dnl
580table=0 actions=move:OXM_OF_ETH_SRC[[0..47]]->OXM_OF_PKT_REG0[[0..47]],goto_table(1)
581table=1,xreg0=0x0000505400000005 actions=2
582
583# These low-priority rules shouldn't match. They're here only to make really
584# sure that the test fails if either of the above rules fails to match.
585table=0,priority=0 actions=3
586table=1,priority=0 actions=3
587])
588AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
589AT_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])
590AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
591])
592OVS_VSWITCHD_STOP
593AT_CLEANUP
594
2bef8e07
JT
595dnl Tests that 1.5 set-field with mask in the metadata register.
596AT_SETUP([ofproto-dpif - masked set-field into metadata])
597OVS_VSWITCHD_START
598ADD_OF_PORTS([br0], [1], [2], [3])
599AT_DATA([flows.txt], [dnl
600table=0 actions=set_field:0xfafafafa5a5a5a5a->metadata,goto_table(1)
601table=1 actions=set_field:0x6b/0xff->metadata,goto_table(2)
602table=2,metadata=0xfafafafa5a5a5a6b actions=2
603
604# These low-priority rules shouldn't match. They're here only to make really
605# sure that the test fails if either of the above rules fails to match.
606table=0,priority=0 actions=3
607table=1,priority=0 actions=3
608table=2,priority=0 actions=3
609])
610AT_CHECK([ovs-ofctl -O OpenFlow15 add-flows br0 flows.txt])
611AT_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])
612AT_CHECK([tail -1 stdout], [0], [Datapath actions: 2
613])
614OVS_VSWITCHD_STOP
615AT_CLEANUP
616
c61f3870
BP
617
618AT_SETUP([ofproto-dpif - actset_output])
619OVS_VSWITCHD_START
620ADD_OF_PORTS(
621 [br0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13])
622AT_DATA([flows.txt], [dnl
3ca3ce0c 623table=0,actset_output=unset actions=write_actions(output(2)),goto_table(1)
c61f3870
BP
624table=1 actions=move:ONFOXM_ET_ACTSET_OUTPUT[[0..31]]->OXM_OF_PKT_REG0[[0..31]],goto_table(2)
625
626# Verify that actset_output got set.
627table=2,priority=20,actset_output=2 actions=4,goto_table(3)
628table=2,priority=10 actions=5,goto_table(3)
629
630# Verify that xreg0 got copied properly from actset_output.
631table=3,priority=20,xreg0=2 actions=6,goto_table(4)
632table=3,priority=10 actions=7,goto_table(4)
633
9055ca9a
BP
634# Verify that adding a group action unsets actset_output,
635# even if output follows group.
636table=4 actions=write_actions(group(5),output(10)),goto_table(5)
c61f3870
BP
637table=5,priority=20,actset_output=unset actions=8,goto_table(6)
638table=5,priority=10 actions=9,goto_table(6)
639
640# Verify that adding another output action doesn't change actset_output
641# (since there's still a group).
642table=6 actions=write_actions(output(3)),goto_table(7)
643table=7,priority=20,actset_output=unset actions=10,goto_table(8)
644table=7,priority=10 actions=11,goto_table(8)
645
646# Verify that clearing the action set, then writing an output action,
647# causes actset_output to be set again.
648table=8,actions=clear_actions,write_actions(output(3),output(2)),goto_table(9)
649table=9,priority=20,actset_output=2 actions=12
650table=9,priority=10 actions=13
651])
4f20179d 652AT_CHECK([ovs-ofctl -O OpenFlow13 add-group br0 'group_id=5,type=all,bucket=output:1'])
c61f3870
BP
653AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
654AT_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])
655AT_CHECK([tail -1 stdout], [0], [Datapath actions: 4,6,8,10,12,2
656])
657OVS_VSWITCHD_STOP
658AT_CLEANUP
bd85dac1
AZ
659AT_SETUP([ofproto-dpif - push-pop])
660OVS_VSWITCHD_START
661ADD_OF_PORTS([br0], [20], [21], [22], [33], [90])
662AT_DATA([flows.txt], [dnl
663in_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
664in_port=2 actions=pop:NXM_NX_REG0[[0..7]],output:NXM_NX_REG0[[]]
665in_port=3 actions=pop:NXM_NX_REG1[[0..7]],output:NXM_NX_REG1[[]]
666in_port=4 actions=pop:NXM_NX_REG2[[0..15]],output:NXM_NX_REG2[[]]
667in_port=5 actions=pop:NXM_NX_REG3[[]],output:NXM_NX_REG3[[]]
668
669])
670AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 671AT_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])
bd85dac1
AZ
672AT_CHECK([tail -1 stdout], [0],
673 [Datapath actions: 33,22,21,20
674])
675OVS_VSWITCHD_STOP
676AT_CLEANUP
677
f694937d 678AT_SETUP([ofproto-dpif - output])
023e1e0a 679OVS_VSWITCHD_START
f7b8e494 680ADD_OF_PORTS([br0], [1], [9], [10], [11], [55], [66], [77], [88])
f694937d 681AT_DATA([flows.txt], [dnl
557323cd 682in_port=1 actions=resubmit:2,resubmit:3,resubmit:4,resubmit:5,resubmit:6,resubmit:7,resubmit:8
f694937d
EJ
683in_port=2 actions=output:9
684in_port=3 actions=load:55->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]],load:66->NXM_NX_REG1[[]]
685in_port=4 actions=output:10,output:NXM_NX_REG0[[]],output:NXM_NX_REG1[[]],output:11
686in_port=5 actions=load:77->NXM_NX_REG0[[0..15]],load:88->NXM_NX_REG0[[16..31]]
687in_port=6 actions=output:NXM_NX_REG0[[0..15]],output:NXM_NX_REG0[[16..31]]
688in_port=7 actions=load:0x110000ff->NXM_NX_REG0[[]],output:NXM_NX_REG0[[]]
557323cd 689in_port=8 actions=1,9,load:9->NXM_OF_IN_PORT[[]],1,9
f694937d
EJ
690])
691AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 692AT_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])
f694937d 693AT_CHECK([tail -1 stdout], [0],
557323cd 694 [Datapath actions: 9,55,10,55,66,11,77,88,9,1
f694937d 695])
023e1e0a 696OVS_VSWITCHD_STOP
f694937d 697AT_CLEANUP
8e9ce036 698
f0fd1a17
PS
699AT_SETUP([ofproto-dpif - dec_ttl])
700OVS_VSWITCHD_START
f7b8e494 701ADD_OF_PORTS([br0], [1], [2], [3], [4])
f0fd1a17
PS
702AT_DATA([flows.txt], [dnl
703table=0 in_port=1 action=dec_ttl,output:2,resubmit(1,1),output:4
704table=1 in_port=1 action=dec_ttl,output:3
705])
706AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
8249a1fe 707AT_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])
ce58df5b 708AT_CHECK([tail -4 stdout], [0],
16194afd 709 [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=2,nw_frag=no
d23df9a8 710Datapath actions: set(ipv4(ttl=1)),2,4
6a7e895f
BP
711This flow is handled by the userspace slow path because it:
712 - Sends "packet-in" messages to the OpenFlow controller.
f0fd1a17 713])
8249a1fe 714AT_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])
ce58df5b 715AT_CHECK([tail -2 stdout], [0],
16194afd 716 [Megaflow: recirc_id=0,ip,in_port=1,nw_ttl=3,nw_frag=no
d23df9a8 717Datapath actions: set(ipv4(ttl=2)),2,set(ipv4(ttl=1)),3,4
f0fd1a17 718])
50aa28fd 719AT_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])
ce58df5b 720AT_CHECK([tail -2 stdout], [0],
16194afd 721 [Megaflow: recirc_id=0,ipv6,in_port=1,nw_ttl=128,nw_frag=no
d23df9a8 722Datapath actions: set(ipv6(hlimit=127)),2,set(ipv6(hlimit=126)),3,4
f0fd1a17
PS
723])
724
982697a4 725AT_CAPTURE_FILE([ofctl_monitor.log])
77a922c7 726AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
8249a1fe 727AT_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])
f0fd1a17
PS
728OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
729AT_CHECK([cat ofctl_monitor.log], [0], [dnl
8249a1fe 730NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=34 in_port=1 (via invalid_ttl) data_len=34 (unbuffered)
e6d9ab56 731ip,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
f0fd1a17
PS
732])
733OVS_VSWITCHD_STOP
734AT_CLEANUP
735
65bfce4a
SH
736dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
737dnl buffer to be resized just before pushing the id of the dec_ttl action.
738dnl Thus the implementation must account for this by using the
739dnl reallocated buffer rather than the original buffer.
740dnl
741dnl A number of similar rules are added to try and exercise
742dnl xrealloc sufficiently that it returns a different base pointer
743AT_SETUP([ofproto-dpif - dec_ttl without arguments at offset 32 in ofpacts])
744OVS_VSWITCHD_START
745ADD_OF_PORTS([br0], [1])
746(for i in `seq 0 255`; do
747 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl,controller\n" $i
748 done) > flows.txt
749AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
750OVS_VSWITCHD_STOP
751AT_CLEANUP
752
753dnl A dec_ttl action at offset 32 in ofpacts will cause the ofpacts
754dnl buffer to be resized just before pushing the id of the dec_ttl action.
755dnl Thus the implementation must account for this by using the
756dnl reallocated buffer rather than the original buffer.
757dnl
758dnl A number of similar rules are added to try and exercise
759dnl xrealloc sufficiently that it returns a different base pointer
760AT_SETUP([ofproto-dpif - dec_ttl with arguments at offset 32 in ofpacts])
761OVS_VSWITCHD_START
762ADD_OF_PORTS([br0], [1])
763(for i in `seq 0 255`; do
764 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,output:1,dec_ttl(1),controller\n" $i
765 done) > flows.txt
766AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
767OVS_VSWITCHD_STOP
768AT_CLEANUP
769
770dnl A note action at offset 24 in ofpacts will cause the ofpacts
771dnl buffer to be resized just before pushing the id of the dec_ttl action.
772dnl Thus the implementation must account for this by using the
773dnl reallocated buffer rather than the original buffer.
774dnl
775dnl A number of similar rules are added to try and exercise
776dnl xrealloc sufficiently that it returns a different base pointer
777AT_SETUP([ofproto-dpif - note at offset 24 in ofpacts])
778OVS_VSWITCHD_START
779ADD_OF_PORTS([br0], [1])
780(for i in `seq 0 255`; do
781 printf "dl_src=10:11:11:11:11:%02x actions=output:1,output:1,note:ff,controller\n" $i
782 done) > flows.txt
783AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
784OVS_VSWITCHD_STOP
785AT_CLEANUP
f0fd1a17 786
77750738 787AT_SETUP([ofproto-dpif - output, OFPP_NONE ingress port])
e44768b7
JP
788OVS_VSWITCHD_START
789ADD_OF_PORTS([br0], [1], [2])
77750738 790
77750738
JP
791AT_CHECK([ovs-ofctl add-flow br0 action=normal])
792
793# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 794flow="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"
77750738 795AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
72d64e33
EJ
796AT_CHECK([tail -1 stdout | sed 's/Datapath actions: //' | tr "," "\n" | sort -n], [0], [dnl
7971
7982
799100
800])
77750738
JP
801
802OVS_VSWITCHD_STOP
803AT_CLEANUP
804
8b36f51e 805AT_SETUP([ofproto-dpif - DSCP])
8b36f51e 806OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy])
72d64e33 807ADD_OF_PORTS([br0], [9])
8b36f51e 808AT_DATA([flows.txt], [dnl
bdda5aca 809actions=output:LOCAL,enqueue:1:1,enqueue:1:2,enqueue:1:2,enqueue:1:1,output:1,mod_nw_tos:0,output:1,output:LOCAL
8b36f51e
EJ
810])
811AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
812AT_CHECK([ovs-vsctl -- \
813 set Port p1 qos=@newqos --\
814 --id=@newqos create QoS type=linux-htb queues=1=@q1,2=@q2 --\
815 --id=@q1 create Queue dscp=1 --\
816 --id=@q2 create Queue dscp=2], [0], [ignore])
50aa28fd 817AT_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])
ce58df5b 818AT_CHECK([tail -2 stdout], [0],
d23df9a8 819 [Megaflow: recirc_id=0,skb_priority=0,ip,in_port=9,nw_tos=252,nw_frag=no
ce58df5b 820Datapath actions: dnl
e44768b7 821100,dnl
d23df9a8
JR
822set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl
823set(ipv4(tos=0x8/0xfc)),set(skb_priority(0x2)),1,dnl
8b36f51e 8241,dnl
d23df9a8
JR
825set(ipv4(tos=0x4/0xfc)),set(skb_priority(0x1)),1,dnl
826set(ipv4(tos=0xfc/0xfc)),set(skb_priority(0)),1,dnl
827set(ipv4(tos=0/0xfc)),1,100
8b36f51e
EJ
828])
829OVS_VSWITCHD_STOP
830AT_CLEANUP
831
fd19297b 832AT_SETUP([ofproto-dpif - output/flood flags])
f7b8e494
JP
833OVS_VSWITCHD_START
834ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [7])
fd19297b
EJ
835
836AT_DATA([flows.txt], [dnl
a0fbe94a 837in_port=local actions=local,flood
fd19297b
EJ
838in_port=1 actions=flood
839in_port=2 actions=all
bdda5aca
BP
840in_port=3 actions=output:LOCAL,output:1,output:2,output:3,output:4,output:5,output:6,output:7
841in_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
fd19297b
EJ
842])
843AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
844AT_CHECK([ovs-ofctl mod-port br0 5 noforward])
845AT_CHECK([ovs-ofctl mod-port br0 6 noflood])
846
50aa28fd 847AT_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])
a0fbe94a
AR
848AT_CHECK([tail -1 stdout \
849| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
8501
8512
8523
8534
8547
855])
856
50aa28fd 857AT_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])
fd19297b
EJ
858AT_CHECK([tail -1 stdout \
859| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
e44768b7 860100
fd19297b
EJ
8612
8623
8634
8647
865])
866
50aa28fd 867AT_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])
fd19297b
EJ
868AT_CHECK([tail -1 stdout \
869| sed -e 's/Datapath actions: //' | tr ',' '\n' | sort], [0], [dnl
fd19297b 8701
e44768b7 871100
fd19297b
EJ
8723
8734
8746
8757
876])
877
50aa28fd 878AT_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])
fd19297b 879AT_CHECK([tail -1 stdout], [0],
e44768b7 880 [Datapath actions: 100,1,2,4,6,7
fd19297b
EJ
881])
882
50aa28fd 883AT_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])
fd19297b 884AT_CHECK([tail -1 stdout], [0],
1b567fb9 885 [Datapath actions: set(skb_priority(0x1)),100,1,2,set(skb_priority(0x2)),3,set(skb_priority(0x1)),6,7
fd19297b
EJ
886])
887OVS_VSWITCHD_STOP
888AT_CLEANUP
889
6b83a3c5 890AT_SETUP([ofproto-dpif - Default Table Miss - OF1.0 (OFPTC_TABLE_MISS_CONTROLLER)])
6d328fa2
SH
891OVS_VSWITCHD_START([dnl
892 add-port br0 p1 -- set Interface p1 type=dummy
893])
53eb8cb8 894on_exit 'kill `cat ovs-ofctl.pid`'
6d328fa2
SH
895
896AT_CAPTURE_FILE([ofctl_monitor.log])
897
898AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
899
900for i in 1 2 3 ; do
ea2735d3 901 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(syn)'
6d328fa2 902done
8bd16974 903OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6d328fa2
SH
904OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
905AT_CHECK([cat ofctl_monitor.log], [0], [dnl
906NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 907tcp,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=syn tcp_csum:0
6d328fa2
SH
908dnl
909NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 910tcp,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=syn tcp_csum:0
6d328fa2
SH
911dnl
912NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 913tcp,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=syn tcp_csum:0
6d328fa2
SH
914])
915
916AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
917AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
918NXST_FLOW reply:
919])
920
921OVS_VSWITCHD_STOP
922AT_CLEANUP
923
6b83a3c5
SH
924AT_SETUP([ofproto-dpif - Default Table Miss - OF1.3 (OFPTC_TABLE_MISS_DROP)])
925OVS_VSWITCHD_START([dnl
926 add-port br0 p1 -- set Interface p1 type=dummy
927])
53eb8cb8 928on_exit 'kill `cat ovs-ofctl.pid`'
6b83a3c5
SH
929
930AT_CAPTURE_FILE([ofctl_monitor.log])
931AT_CHECK([ovs-ofctl del-flows br0])
932
933AT_CHECK([ovs-ofctl monitor -OOpenFlow13 -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
934
935dnl Test that missed packets are droped
936for i in 1 2 3 ; do
ea2735d3 937 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(ack,syn)'
6b83a3c5
SH
938done
939OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
940
941AT_CHECK([cat ofctl_monitor.log], [0], [dnl
942])
943
944AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
945AT_CHECK([ovs-ofctl -OOpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
946OFPST_FLOW reply (OF1.3):
947])
948
949OVS_VSWITCHD_STOP
950AT_CLEANUP
951
6d328fa2
SH
952AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTROLLER])
953OVS_VSWITCHD_START([dnl
954 add-port br0 p1 -- set Interface p1 type=dummy
955])
53eb8cb8 956on_exit 'kill `cat ovs-ofctl.pid`'
6d328fa2
SH
957
958AT_CAPTURE_FILE([ofctl_monitor.log])
959AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
960
961AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
962
963for i in 1 2 3 ; do
8e4c1621 964 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(urg|rst)'
6d328fa2 965done
8bd16974 966OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6d328fa2
SH
967OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
968AT_CHECK([cat ofctl_monitor.log], [0], [dnl
969OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 970tcp,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=rst|urg tcp_csum:0
6d328fa2
SH
971dnl
972OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 973tcp,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=rst|urg tcp_csum:0
6d328fa2
SH
974dnl
975OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 976tcp,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=rst|urg tcp_csum:0
6d328fa2
SH
977])
978
cea4a6d7 979AT_CHECK([ovs-appctl revalidator/purge], [0])
6d328fa2
SH
980AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
981 n_packets=3, n_bytes=180, actions=goto_table:1
982OFPST_FLOW reply (OF1.2):
983])
984
985OVS_VSWITCHD_STOP
986AT_CLEANUP
987
988AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTROLLER])
989OVS_VSWITCHD_START([dnl
990 add-port br0 p1 -- set Interface p1 type=dummy
991])
53eb8cb8 992on_exit 'kill `cat ovs-ofctl.pid`'
6d328fa2
SH
993
994AT_CAPTURE_FILE([ofctl_monitor.log])
995AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
996
997AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
998
999for i in 1 2 3 ; do
1000 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)'
1001done
1002
1003OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1004AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1005])
1006
cea4a6d7 1007AT_CHECK([ovs-appctl revalidator/purge], [0])
6d328fa2
SH
1008AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1009 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1010OFPST_FLOW reply (OF1.2):
1011])
1012
1013OVS_VSWITCHD_STOP
1014AT_CLEANUP
1015
1016AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_CONTINUE])
1017OVS_VSWITCHD_START([dnl
1018 add-port br0 p1 -- set Interface p1 type=dummy
1019])
53eb8cb8 1020on_exit 'kill `cat ovs-ofctl.pid`'
6d328fa2
SH
1021
1022AT_CAPTURE_FILE([ofctl_monitor.log])
1023AT_CHECK([ovs-ofctl add-flow br0 'table=1 dl_src=10:11:11:11:11:11 actions=controller'])
1024AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1025
1026dnl Miss table 0, Hit table 1
1027AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1028
1029for i in 1 2 3 ; do
1030 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)'
1031done
8bd16974 1032OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6d328fa2
SH
1033OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1034
1035AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1036NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1037tcp,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=ack tcp_csum:0
6d328fa2
SH
1038dnl
1039NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1040tcp,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=ack tcp_csum:0
6d328fa2
SH
1041dnl
1042NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1043tcp,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=ack tcp_csum:0
6d328fa2
SH
1044])
1045
1046dnl Hit table 0, Miss all other tables, sent to controller
1047AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1048
1049for i in 1 2 3 ; do
1050 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)'
1051done
8bd16974 1052OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6d328fa2
SH
1053OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1054
1055AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1056NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 1057tcp,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=ack tcp_csum:0
6d328fa2
SH
1058dnl
1059NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 1060tcp,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=ack tcp_csum:0
6d328fa2
SH
1061dnl
1062NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 1063tcp,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=ack tcp_csum:0
6d328fa2
SH
1064])
1065
cea4a6d7 1066AT_CHECK([ovs-appctl revalidator/purge], [0])
6d328fa2
SH
1067AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1068 table=1, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1069OFPST_FLOW reply (OF1.2):
1070])
1071
1072OVS_VSWITCHD_STOP
1073AT_CLEANUP
1074
1075AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_CONTINUE])
1076OVS_VSWITCHD_START([dnl
1077 add-port br0 p1 -- set Interface p1 type=dummy
1078])
53eb8cb8 1079on_exit 'kill `cat ovs-ofctl.pid`'
6d328fa2
SH
1080
1081AT_CAPTURE_FILE([ofctl_monitor.log])
1082AT_DATA([flows.txt], [dnl
1083table=0 actions=goto_table(1)
1084table=2 dl_src=10:11:11:11:11:11 actions=controller
1085])
1086AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
1087AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1088
1089dnl Hit table 0, Miss table 1, Hit table 2
1090AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1091
1092for i in 1 2 3 ; do
1093 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)'
1094done
8bd16974 1095OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1096OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
6d328fa2
SH
1097
1098AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1099NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1100tcp,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=ack tcp_csum:0
6d328fa2
SH
1101dnl
1102NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1103tcp,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=ack tcp_csum:0
6d328fa2
SH
1104dnl
1105NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1106tcp,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=ack tcp_csum:0
6d328fa2
SH
1107])
1108
1109dnl Hit table 1, Miss all other tables, sent to controller
1110AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1111
1112for i in 1 2 3 ; do
1113 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)'
1114done
8bd16974 1115OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6d328fa2
SH
1116OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1117
1118AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1119NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 1120tcp,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=ack tcp_csum:0
6d328fa2
SH
1121dnl
1122NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 1123tcp,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=ack tcp_csum:0
6d328fa2
SH
1124dnl
1125NXT_PACKET_IN (xid=0x0): table_id=253 cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 1126tcp,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=ack tcp_csum:0
6d328fa2
SH
1127])
1128
cea4a6d7 1129AT_CHECK([ovs-appctl revalidator/purge], [0])
6d328fa2
SH
1130AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1131 n_packets=6, n_bytes=360, actions=goto_table:1
1132 table=2, n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1133OFPST_FLOW reply (OF1.2):
1134])
1135
1136OVS_VSWITCHD_STOP
1137AT_CLEANUP
1138
1139AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_CONTINUE])
1140OVS_VSWITCHD_START([dnl
1141 add-port br0 p1 -- set Interface p1 type=dummy
1142])
53eb8cb8 1143on_exit 'kill `cat ovs-ofctl.pid`'
6d328fa2
SH
1144
1145AT_CAPTURE_FILE([ofctl_monitor.log])
1146AT_DATA([flows.txt], [dnl
1147table=0 actions=resubmit(1,1)
1148table=2 dl_src=10:11:11:11:11:11 actions=controller
1149])
1150AT_CHECK([ovs-ofctl -OOpenFlow12 add-flows br0 flows.txt])
1151AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all continue])
1152
1153dnl Hit table 0, Miss table 1, Dropped
1154AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1155
1156for i in 1 2 3 ; do
1157 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)'
1158done
0c473314 1159OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
6d328fa2
SH
1160
1161AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1162])
1163
1164dnl Hit table 1, Dropped
1165AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1166
1167for i in 1 2 3 ; do
1168 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)'
1169done
1170OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1171
1172AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1173])
1174
cea4a6d7 1175AT_CHECK([ovs-appctl revalidator/purge], [0])
6d328fa2
SH
1176AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1177 n_packets=6, n_bytes=360, actions=resubmit(1,1)
1178 table=2, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1179OFPST_FLOW reply (OF1.2):
1180])
1181
1182OVS_VSWITCHD_STOP
1183AT_CLEANUP
1184
1185AT_SETUP([ofproto-dpif - Table Miss - OFPTC_TABLE_MISS_DROP])
1186OVS_VSWITCHD_START([dnl
1187 add-port br0 p1 -- set Interface p1 type=dummy
1188])
53eb8cb8 1189on_exit 'kill `cat ovs-ofctl.pid`'
6d328fa2
SH
1190
1191AT_CAPTURE_FILE([ofctl_monitor.log])
1192AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1193
1194AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1195
1196dnl Test that missed packets are droped
1197for i in 1 2 3 ; do
1198 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)'
1199done
1200OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1201
1202AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1203])
1204
1205AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1206AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1207NXST_FLOW reply:
1208])
1209
1210OVS_VSWITCHD_STOP
1211AT_CLEANUP
1212
1213AT_SETUP([ofproto-dpif - Table Miss - goto table and OFPTC_TABLE_MISS_DROP])
1214OVS_VSWITCHD_START([dnl
1215 add-port br0 p1 -- set Interface p1 type=dummy
1216])
53eb8cb8 1217on_exit 'kill `cat ovs-ofctl.pid`'
6d328fa2
SH
1218
1219AT_CAPTURE_FILE([ofctl_monitor.log])
1220AT_CHECK([ovs-ofctl del-flows br0])
1221AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=goto_table(1)'])
1222AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1223
1224AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1225
1226dnl Test that missed packets are droped
1227for i in 1 2 3 ; do
1228 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)'
1229done
1230OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1231
1232AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1233])
1234
cea4a6d7 1235AT_CHECK([ovs-appctl revalidator/purge], [0])
6d328fa2
SH
1236AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1237 n_packets=3, n_bytes=180, actions=goto_table:1
1238OFPST_FLOW reply (OF1.2):
1239])
1240
1241OVS_VSWITCHD_STOP
1242AT_CLEANUP
1243
1244AT_SETUP([ofproto-dpif - Table Miss - resubmit and OFPTC_TABLE_MISS_DROP])
1245OVS_VSWITCHD_START([dnl
1246 add-port br0 p1 -- set Interface p1 type=dummy
1247])
53eb8cb8 1248on_exit 'kill `cat ovs-ofctl.pid`'
6d328fa2
SH
1249
1250AT_CAPTURE_FILE([ofctl_monitor.log])
1251AT_CHECK([ovs-ofctl del-flows br0])
1252AT_CHECK([ovs-ofctl -OOpenFlow12 add-flow br0 'table=0 actions=resubmit(1,1)'])
1253AT_CHECK([ovs-ofctl -OOpenFlow11 mod-table br0 all drop])
1254
1255AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1256
1257dnl Test that missed packets are droped
1258for i in 1 2 3 ; do
1259 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)'
1260done
1261OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1262
1263AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1264])
1265
cea4a6d7 1266AT_CHECK([ovs-appctl revalidator/purge], [0])
6d328fa2
SH
1267AT_CHECK([ovs-ofctl -OOpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
1268 n_packets=3, n_bytes=180, actions=resubmit(1,1)
1269OFPST_FLOW reply (OF1.2):
1270])
1271
1272OVS_VSWITCHD_STOP
1273AT_CLEANUP
1274
15056dc8
EJ
1275AT_SETUP([ofproto-dpif - controller])
1276OVS_VSWITCHD_START([dnl
1277 add-port br0 p1 -- set Interface p1 type=dummy
1278])
53eb8cb8 1279on_exit 'kill `cat ovs-ofctl.pid`'
15056dc8
EJ
1280
1281AT_CAPTURE_FILE([ofctl_monitor.log])
1282AT_DATA([flows.txt], [dnl
1283cookie=0x0 dl_src=10:11:11:11:11:11 actions=controller
54834960 1284cookie=0x1 dl_src=20:22:22:22:22:22 actions=controller,resubmit(80,1)
15056dc8
EJ
1285cookie=0x2 dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,controller
1286
54834960
EJ
1287cookie=0x3 table=1 in_port=80 actions=load:1->NXM_NX_REG0[[]],mod_vlan_vid:80,controller,resubmit(81,2)
1288cookie=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)
1289cookie=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)
1290cookie=0x6 table=4 in_port=83 actions=load:4->NXM_NX_REG3[[]],mod_nw_src:83.83.83.83,controller,resubmit(84,5)
1291cookie=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)
1292cookie=0x8 table=6 in_port=85 actions=mod_tp_src:85,controller,resubmit(86,7)
1293cookie=0x9 table=7 in_port=86 actions=mod_tp_dst:86,controller,controller
78cef7fd 1294cookie=0xa dl_src=40:44:44:44:44:41 actions=mod_vlan_vid:99,mod_vlan_pcp:1,controller
56d72f37 1295cookie=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
15056dc8
EJ
1296])
1297AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1298
1299dnl Flow miss.
77a922c7 1300AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
1301
1302for i in 1 2 3 ; do
dc235f7f 1303 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)'
15056dc8 1304done
57c94f35 1305OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1306OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
15056dc8 1307
15056dc8 1308AT_CHECK([cat ofctl_monitor.log], [0], [dnl
f0fd1a17 1309OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 1310tcp,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=ack tcp_csum:0
15056dc8 1311dnl
f0fd1a17 1312OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 1313tcp,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=ack tcp_csum:0
15056dc8 1314dnl
f0fd1a17 1315OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 1316tcp,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=ack tcp_csum:0
15056dc8
EJ
1317])
1318
1319dnl Singleton controller action.
77a922c7 1320AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
1321
1322for i in 1 2 3 ; do
dc235f7f 1323 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)'
15056dc8 1324done
57c94f35 1325OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1326OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
15056dc8 1327
15056dc8
EJ
1328AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1329OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1330tcp,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=syn tcp_csum:0
15056dc8
EJ
1331dnl
1332OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1333tcp,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=syn tcp_csum:0
15056dc8
EJ
1334dnl
1335OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1336tcp,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=syn tcp_csum:0
15056dc8
EJ
1337])
1338
1339dnl Modified controller action.
77a922c7 1340AT_CHECK([ovs-ofctl monitor -P openflow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
15056dc8
EJ
1341
1342for i in 1 2 3 ; do
dc235f7f 1343 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)'
15056dc8 1344done
57c94f35 1345OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1346OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
15056dc8 1347
15056dc8
EJ
1348AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1349OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1350tcp,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=fin tcp_csum:0
15056dc8
EJ
1351dnl
1352OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1353tcp,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=fin tcp_csum:0
15056dc8
EJ
1354dnl
1355OFPT_PACKET_IN (xid=0x0): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1356tcp,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=fin tcp_csum:0
15056dc8
EJ
1357])
1358
363dd1d9
JS
1359dnl Modified VLAN controller action.
1360AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1361
1362for i in 1 2 3; do
8249a1fe 1363 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)'
363dd1d9 1364done
57c94f35 1365OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1366OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
363dd1d9 1367
363dd1d9
JS
1368AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1369NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1370ip,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
363dd1d9
JS
1371dnl
1372NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1373ip,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
363dd1d9
JS
1374dnl
1375NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1376ip,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
363dd1d9
JS
1377])
1378
349fbdc2
SH
1379dnl Checksum TCP.
1380AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1381
1382for i in 1 ; do
1383 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)'
1384done
1385OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1386ovs-appctl -t ovs-ofctl exit
1387
1388AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1389NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1390tcp,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=fin tcp_csum:0
349fbdc2 1391dnl
50dcbd8e 1392NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 reg0=0x1,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1393tcp,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=fin tcp_csum:0
349fbdc2 1394dnl
50dcbd8e 1395NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 reg0=0x1,reg1=0x2,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1396tcp,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=fin tcp_csum:0
349fbdc2 1397dnl
50dcbd8e 1398NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1399tcp,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=fin tcp_csum:0
349fbdc2 1400dnl
50dcbd8e 1401NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1402tcp,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=fin tcp_csum:1a03
349fbdc2 1403dnl
50dcbd8e 1404NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1405tcp,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=fin tcp_csum:3205
349fbdc2 1406dnl
50dcbd8e 1407NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1408tcp,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=fin tcp_csum:31b8
349fbdc2 1409dnl
50dcbd8e 1410NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1411tcp,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=fin tcp_csum:316d
349fbdc2 1412dnl
50dcbd8e 1413NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1414tcp,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=fin tcp_csum:316d
349fbdc2
SH
1415])
1416
1417dnl Checksum UDP.
1418AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1419
1420for i in 1 ; do
1421 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'
1422done
1423OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1424ovs-appctl -t ovs-ofctl exit
1425
1426AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1427NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1428udp,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
349fbdc2 1429dnl
50dcbd8e 1430NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 reg0=0x1,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1431udp,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
349fbdc2 1432dnl
50dcbd8e 1433NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 reg0=0x1,reg1=0x2,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1434udp,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
349fbdc2 1435dnl
50dcbd8e 1436NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1437udp,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
349fbdc2 1438dnl
50dcbd8e 1439NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1440udp,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
349fbdc2 1441dnl
50dcbd8e 1442NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1443udp,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
349fbdc2 1444dnl
50dcbd8e 1445NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1446udp,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
349fbdc2 1447dnl
50dcbd8e 1448NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1449udp,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
349fbdc2 1450dnl
50dcbd8e 1451NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1452udp,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
349fbdc2
SH
1453])
1454
1455dnl Modified ARP controller action.
1456AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1457
1458for i in 1 2 3; do
1459 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)'
1460done
1461
368a198a 1462OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
349fbdc2
SH
1463OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1464AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1465NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1466arp,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
349fbdc2 1467NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1468arp,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
349fbdc2 1469NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1470arp,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
349fbdc2 1471NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1472arp,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
349fbdc2 1473NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1474arp,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
349fbdc2 1475NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1476arp,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
349fbdc2 1477NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1478arp,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
349fbdc2 1479NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1480arp,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
349fbdc2 1481NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1482arp,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
349fbdc2
SH
1483])
1484
1485AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1486
1487dnl Checksum SCTP.
1488AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
1489
1490for i in 1 ; do
1491 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'
1492done
1493
f7a22c7e 1494AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
349fbdc2
SH
1495OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 18])
1496OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
1497AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1498NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=98 in_port=1 (via action) data_len=98 (unbuffered)
e6d9ab56 1499sctp,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
349fbdc2 1500dnl
50dcbd8e 1501NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=102 reg0=0x1,in_port=1 (via action) data_len=102 (unbuffered)
e6d9ab56 1502sctp,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
349fbdc2 1503dnl
50dcbd8e 1504NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=102 reg0=0x1,reg1=0x2,in_port=1 (via action) data_len=102 (unbuffered)
e6d9ab56 1505sctp,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
349fbdc2 1506dnl
50dcbd8e 1507NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,in_port=1 (via action) data_len=102 (unbuffered)
e6d9ab56 1508sctp,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
349fbdc2 1509dnl
50dcbd8e 1510NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,in_port=1 (via action) data_len=102 (unbuffered)
e6d9ab56 1511sctp,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
349fbdc2 1512dnl
50dcbd8e 1513NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
e6d9ab56 1514sctp,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
349fbdc2 1515dnl
50dcbd8e 1516NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
e6d9ab56 1517sctp,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:dd778f5f
349fbdc2 1518dnl
50dcbd8e 1519NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
e6d9ab56 1520sctp,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:62051f56
349fbdc2 1521dnl
50dcbd8e 1522NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=102 reg0=0x1,reg1=0x2,reg2=0x3,reg3=0x4,reg4=0x5,tun_id=0x6,in_port=1 (via action) data_len=102 (unbuffered)
e6d9ab56 1523sctp,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:62051f56
349fbdc2
SH
1524])
1525
1526AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
1527 cookie=0x1, n_packets=3, n_bytes=218, dl_src=20:22:22:22:22:22 actions=CONTROLLER:65535,resubmit(80,1)
1528 cookie=0x2, n_packets=3, n_bytes=180, dl_src=30:33:33:33:33:33 actions=mod_vlan_vid:15,CONTROLLER:65535
1529 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)
1530 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)
1531 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)
1532 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)
1533 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)
1534 cookie=0x8, table=6, n_packets=3, n_bytes=218, in_port=85 actions=mod_tp_src:85,CONTROLLER:65535,resubmit(86,7)
1535 cookie=0x9, table=7, n_packets=3, n_bytes=218, in_port=86 actions=mod_tp_dst:86,CONTROLLER:65535,CONTROLLER:65535
1536 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
1537 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
1538 n_packets=3, n_bytes=180, dl_src=10:11:11:11:11:11 actions=CONTROLLER:65535
1539NXST_FLOW reply:
1540])
1541
1542OVS_VSWITCHD_STOP
1543AT_CLEANUP
1544
1545AT_SETUP([ofproto-dpif - MPLS handling])
1546OVS_VSWITCHD_START([dnl
1547 add-port br0 p1 -- set Interface p1 type=dummy
1548])
53eb8cb8 1549on_exit 'kill `cat ovs-ofctl.pid`'
349fbdc2
SH
1550
1551AT_CAPTURE_FILE([ofctl_monitor.log])
1552AT_DATA([flows.txt], [dnl
1553cookie=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
1554cookie=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
1555cookie=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
1556cookie=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
1557cookie=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
1558cookie=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
1559cookie=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
1560cookie=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
1ffd16af 1561cookie=0xa mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:10->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
349fbdc2
SH
1562cookie=0xb dl_src=50:55:55:55:55:55 dl_type=0x8847 actions=load:1000->OXM_OF_MPLS_LABEL[[]],controller
1563cookie=0xd dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,controller
1564cookie=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
1ffd16af
SH
1565
1566cookie=0xd dl_src=60:66:66:66:00:01 actions=pop_mpls:0x0800,dec_ttl,controller
1567cookie=0xd dl_src=60:66:66:66:00:02 actions=pop_mpls:0x0800,load:0xa000001->OXM_OF_IPV4_DST[[]],controller
1568cookie=0xd dl_src=60:66:66:66:00:03 actions=pop_mpls:0x0800,move:OXM_OF_IPV4_DST[[]]->OXM_OF_IPV4_SRC[[]],controller
1569cookie=0xd dl_src=60:66:66:66:00:04 actions=pop_mpls:0x0800,push:OXM_OF_IPV4_DST[[]],pop:OXM_OF_IPV4_SRC[[]],controller
1570cookie=0xd dl_src=60:66:66:66:00:05 actions=pop_mpls:0x0800,multipath(eth_src,50,modulo_n,256,0,OXM_OF_IPV4_SRC[[0..7]]),controller
1571cookie=0xd dl_src=60:66:66:66:00:06 actions=pop_mpls:0x0800,bundle_load(eth_src,50,hrw,ofport,OXM_OF_IPV4_SRC[[0..15]],slaves:1,2),controller
1572cookie=0xd dl_src=60:66:66:66:00:07 actions=pop_mpls:0x0800,learn(table=1,hard_timeout=60,eth_type=0x800,nw_proto=6,OXM_OF_IPV4_SRC[[]]=OXM_OF_IPV4_DST[[]]),controller
1573
1574cookie=0xd dl_src=60:66:66:66:00:08 actions=pop_mpls:0x0806,resubmit(1,1)
1575cookie=0xd table=1 arp actions=controller
1576
e672ff9b
JR
1577cookie=0xdeadbeef table=2 dl_src=60:66:66:66:00:09 actions=pop_mpls:0x0800,mod_nw_tos:48
1578cookie=0xd dl_src=60:66:66:66:00:09 actions=resubmit(,2),controller
1ffd16af
SH
1579cookie=0xd dl_src=60:66:66:66:00:0a actions=pop_mpls:0x0800,mod_nw_dst:10.0.0.1,controller
1580cookie=0xd dl_src=60:66:66:66:00:0b actions=pop_mpls:0x0800,mod_nw_src:10.0.0.1,controller
1581
1582cookie=0xd dl_src=60:66:66:66:01:00 actions=pop_mpls:0x8848,controller
1583cookie=0xd dl_src=60:66:66:66:01:01 actions=pop_mpls:0x8847,dec_mpls_ttl,controller
1584cookie=0xd dl_src=60:66:66:66:01:02 actions=pop_mpls:0x8848,load:3->OXM_OF_MPLS_TC[[]],controller
1585
1586cookie=0xd dl_src=60:66:66:66:02:00 actions=pop_mpls:0x8847,pop_mpls:0x0800,controller
e672ff9b
JR
1587cookie=0xe dl_src=60:66:66:66:02:01 actions=pop_mpls:0x8848,pop_mpls:0x0800,dec_ttl,controller
1588cookie=0xe dl_src=60:66:66:66:02:10 actions=pop_mpls:0x8847,dec_mpls_ttl,pop_mpls:0x0800,dec_ttl,controller
1ffd16af 1589
e672ff9b
JR
1590cookie=0xe dl_src=60:66:66:66:03:00 actions=pop_mpls:0x8848,pop_mpls:0x8848,controller
1591cookie=0xe dl_src=60:66:66:66:03:01 actions=pop_mpls:0x8847,pop_mpls:0x8847,dec_mpls_ttl,controller
1592cookie=0xe dl_src=60:66:66:66:03:10 actions=pop_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8848,dec_mpls_ttl,controller
1ffd16af 1593
e672ff9b
JR
1594cookie=0xf dl_src=60:66:66:66:04:00 actions=pop_mpls:0x0800,push_mpls:0x8847,controller
1595cookie=0xf dl_src=60:66:66:66:04:01 actions=pop_mpls:0x0800,push_mpls:0x8848,dec_mpls_ttl,controller
1596cookie=0xf dl_src=60:66:66:66:04:10 actions=pop_mpls:0x0800,dec_ttl,push_mpls:0x8848,dec_mpls_ttl,controller
1ffd16af 1597
e672ff9b
JR
1598cookie=0x5 dl_src=60:66:66:66:05:00 actions=push_mpls:0x8848,pop_mpls:0x8847,controller
1599cookie=0x5 dl_src=60:66:66:66:05:01 actions=push_mpls:0x8847,pop_mpls:0x8848,dec_mpls_ttl,controller
1600cookie=0x5 dl_src=60:66:66:66:05:10 actions=push_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8847,dec_mpls_ttl,controller
349fbdc2
SH
1601])
1602AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
1603
b02475c5
SH
1604dnl Modified MPLS controller action.
1605AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1606
1607for i in 1 2 3; do
791a09be 1608 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)'
b02475c5 1609done
57c94f35 1610OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1611OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5 1612
b02475c5
SH
1613AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1614NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1615mpls,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
b02475c5
SH
1616dnl
1617NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1618mpls,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
b02475c5
SH
1619dnl
1620NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1621mpls,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
b02475c5
SH
1622])
1623
1624dnl Modified MPLS controller action.
1625AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1626
b0a17866 1627for i in 1 2 3; do
8249a1fe 1628 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)'
b0a17866
SH
1629done
1630OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1631OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b0a17866
SH
1632
1633AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1634NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1635ip,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
b0a17866
SH
1636dnl
1637NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1638ip,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
b0a17866
SH
1639dnl
1640NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1641ip,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
b0a17866
SH
1642])
1643
1644dnl Modified MPLS controller action.
1645AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1646
b02475c5
SH
1647dnl 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)
1648
1649for i in 1 2 3; do
1650 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)'
1651done
bece9ea7 1652OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1653OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
bece9ea7 1654
b02475c5
SH
1655AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1656NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1657mpls,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
b02475c5
SH
1658dnl
1659NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1660mpls,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
b02475c5
SH
1661dnl
1662NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1663mpls,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
b02475c5
SH
1664])
1665
1666dnl Modified MPLS controller action.
1667AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1668
1669for i in 1 2 3; do
8249a1fe 1670 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))'
b02475c5 1671done
57c94f35 1672OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1673OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5 1674
b02475c5
SH
1675AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1676NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1677mpls,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
b02475c5
SH
1678dnl
1679NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1680mpls,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
b02475c5
SH
1681dnl
1682NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1683mpls,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
b02475c5
SH
1684])
1685
b676167a
SH
1686dnl Modified MPLS controller action.
1687AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1688
1689for i in 1 2 3; do
8249a1fe 1690 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)'
b676167a 1691done
57c94f35 1692OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1693OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b676167a 1694
b676167a
SH
1695AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1696NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1697mpls,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
b676167a
SH
1698dnl
1699NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1700mpls,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
b676167a
SH
1701dnl
1702NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1703mpls,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
b676167a
SH
1704])
1705
0f3f3c3d
SH
1706dnl Modified MPLS controller action.
1707AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1708
1709for i in 1 2 3; do
8249a1fe 1710 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)'
0f3f3c3d 1711done
57c94f35 1712OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1713OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
0f3f3c3d 1714
0f3f3c3d
SH
1715AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1716NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1717mpls,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
0f3f3c3d
SH
1718dnl
1719NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1720mpls,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
0f3f3c3d
SH
1721dnl
1722NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1723mpls,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
0f3f3c3d
SH
1724])
1725
1726dnl Modified MPLS controller action.
1727AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1728
1729for i in 1 2 3; do
8249a1fe 1730 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)'
0f3f3c3d 1731done
57c94f35 1732OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1733OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
0f3f3c3d 1734
0f3f3c3d
SH
1735AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1736NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1737mpls,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
0f3f3c3d
SH
1738dnl
1739NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1740mpls,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
0f3f3c3d
SH
1741dnl
1742NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1743mpls,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
0f3f3c3d
SH
1744])
1745
1ffd16af
SH
1746AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1747
1748dnl Modified MPLS controller action.
1749AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1750
1751for i in 1 2 3; do
1752 ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=40:44:44:44:44:49,dst=50:54:00:00:00:07),eth_type(0x8847),mpls(label=10,tc=3,ttl=64,bos=1)'
1753done
1754OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1755ovs-appctl -t ovs-ofctl exit
1756
1757AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1758NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1759mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:44:49,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=42816
1ffd16af
SH
1760dnl
1761NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1762mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:44:49,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=42816
1ffd16af
SH
1763dnl
1764NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1765mplsm,vlan_tci=0x0000,dl_src=40:44:44:44:44:49,dl_dst=50:54:00:00:00:07,mpls_label=10,mpls_tc=3,mpls_ttl=64,mpls_bos=0,mpls_lse1=42816
1ffd16af
SH
1766])
1767
1768AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1769
0f3f3c3d
SH
1770dnl Modified MPLS controller action.
1771AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1772
1773for i in 1 2 3; do
8249a1fe 1774 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)'
0f3f3c3d 1775done
57c94f35 1776OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1777OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
0f3f3c3d 1778
0f3f3c3d
SH
1779AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1780NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1781mpls,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
0f3f3c3d
SH
1782dnl
1783NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1784mpls,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
0f3f3c3d
SH
1785dnl
1786NXT_PACKET_IN (xid=0x0): cookie=0xa total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1787mpls,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
0f3f3c3d
SH
1788])
1789
b02475c5
SH
1790dnl Modified MPLS actions.
1791AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1792
1793for i in 1 2 3; do
02830175 1794 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)'
b02475c5 1795done
57c94f35 1796OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1797OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5 1798
b02475c5
SH
1799AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1800NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1801mpls,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
b02475c5
SH
1802dnl
1803NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1804mpls,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
b02475c5
SH
1805dnl
1806NXT_PACKET_IN (xid=0x0): cookie=0xb total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 1807mpls,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
b02475c5
SH
1808])
1809
1810dnl Modified MPLS ipv6 controller action.
1811AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1812
1813for i in 1 2 3; do
1814 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)'
1815done
57c94f35 1816OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1817OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5 1818
b02475c5
SH
1819AT_CHECK([cat ofctl_monitor.log], [0], [dnl
1820NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1821mplsm,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
b02475c5
SH
1822dnl
1823NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1824mplsm,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
b02475c5
SH
1825dnl
1826NXT_PACKET_IN (xid=0x0): cookie=0xc total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 1827mplsm,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
b02475c5
SH
1828])
1829
1830
1831dnl Modified MPLS pop action.
cff78c88
SH
1832dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
1833dnl 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)
1834dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44)
1835
b02475c5
SH
1836AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1837
1838for i in 1 2 3; do
cff78c88 1839 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'
b02475c5 1840done
cff78c88
SH
1841#for i in 2 3; do
1842# 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)'
1843#done
57c94f35 1844OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
0c473314 1845OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
b02475c5 1846
b02475c5 1847AT_CHECK([cat ofctl_monitor.log], [0], [dnl
cff78c88 1848NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1849tcp,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=0 tcp_csum:7744
b02475c5 1850dnl
cff78c88 1851NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1852tcp,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=0 tcp_csum:7744
b02475c5 1853dnl
cff78c88 1854NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1855tcp,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=0 tcp_csum:7744
b02475c5
SH
1856])
1857
5c0243a9 1858AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
0d56eaf2 1859
1ffd16af
SH
1860dnl Modified MPLS pop action.
1861dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1862dnl 60:66:66:66:00:01 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1863dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1864dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1865AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1866
1867for i in 1 2 3; do
1868 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 01 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
1869done
1870OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1871OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1872
1873AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 1874NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1875tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:01,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=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 1876dnl
e672ff9b 1877NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1878tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:01,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=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 1879dnl
e672ff9b 1880NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1881tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:01,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=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af
SH
1882])
1883
1884AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1885
1886dnl Modified MPLS pop action.
1887dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1888dnl 60:66:66:66:00:02 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1889dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1890dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1891AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1892
1893for i in 1 2 3; do
1894 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 02 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
1895done
1896OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1897OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1898
1899AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 1900NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1901tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:02,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
1ffd16af 1902dnl
e672ff9b 1903NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1904tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:02,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
1ffd16af 1905dnl
e672ff9b 1906NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1907tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:02,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
1ffd16af
SH
1908])
1909
1910AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1911
1912dnl Modified MPLS pop action.
1913dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1914dnl 60:66:66:66:00:03 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1915dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1916dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1917AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1918
1919for i in 1 2 3; do
1920 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 03 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
1921done
1922OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1923OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1924
1925AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 1926NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1927tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:03,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1ffd16af 1928dnl
e672ff9b 1929NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1930tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:03,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1ffd16af 1931dnl
e672ff9b 1932NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1933tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:03,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1ffd16af
SH
1934])
1935
1936AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1937
1938dnl Modified MPLS pop action.
1939dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1940dnl 60:66:66:66:00:04 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1941dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1942dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1943AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1944
1945for i in 1 2 3; do
1946 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 04 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
1947done
1948OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1949OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1950
1951AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 1952NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1953tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:04,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1ffd16af 1954dnl
e672ff9b 1955NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1956tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:04,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1ffd16af 1957dnl
e672ff9b 1958NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1959tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:04,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.2,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7743
1ffd16af
SH
1960])
1961
1962AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1963
1964dnl Modified MPLS pop action.
1965dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1966dnl 60:66:66:66:00:05 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1967dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1968dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1969AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1970
1971for i in 1 2 3; do
1972 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 05 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
1973done
1974OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
1975OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
1976
1977AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 1978NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1979tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.106,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:76db
1ffd16af 1980dnl
e672ff9b 1981NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1982tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.106,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:76db
1ffd16af 1983dnl
e672ff9b 1984NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 1985tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:05,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.106,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:76db
1ffd16af
SH
1986])
1987
1988AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
1989
1990dnl Modified MPLS pop action.
1991dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
1992dnl 60:66:66:66:00:06 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
1993dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
1994dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
1995AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
1996
1997for i in 1 2 3; do
1998 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 06 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
1999done
2000OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2001OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2002
2003AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2004NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2005tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:06,dl_dst=50:54:00:00:00:07,nw_src=192.168.255.255,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
1ffd16af 2006dnl
e672ff9b 2007NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2008tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:06,dl_dst=50:54:00:00:00:07,nw_src=192.168.255.255,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
1ffd16af 2009dnl
e672ff9b 2010NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2011tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:06,dl_dst=50:54:00:00:00:07,nw_src=192.168.255.255,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7745
1ffd16af
SH
2012])
2013
2014AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2015
2016dnl Modified MPLS pop action.
2017dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2018dnl 60:66:66:66:00:07 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2019dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2020dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2021AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2022
2023for i in 1 2 3; do
2024 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 07 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2025done
2026OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2027OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2028
2029AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2030NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2031tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:07,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=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2032dnl
e672ff9b 2033NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2034tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:07,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=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2035dnl
e672ff9b 2036NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2037tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:07,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=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af
SH
2038])
2039
2040AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2041
2042dnl Modified MPLS pop action.
2043dnl The input is an ARP frame with a single MPLS label stack entry which tcpdump -vve shows as:
2044dnl 60:66:66:66:00:08 > ff:ff:ff:ff:ff:ff, ethertype MPLS unicast (0x8847), length 46: MPLS (label 20, exp 0, [S], ttl 32)
2045AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2046
2047for i in 1 2 3; do
2048 ovs-appctl netdev-dummy/receive p1 'ff ff ff ff ff ff 60 66 66 66 00 08 88 47 00 01 41 20 00 01 08 00 06 04 00 02 60 66 66 66 00 08 c0 a8 00 01 ff ff ff ff ff ff ff ff ff ff'
2049done
2050OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2051OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2052
2053AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2054NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
e6d9ab56 2055arp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=255.255.255.255,arp_op=2,arp_sha=60:66:66:66:00:08,arp_tha=ff:ff:ff:ff:ff:ff
1ffd16af
SH
2056dnl
2057NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
e6d9ab56 2058arp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=255.255.255.255,arp_op=2,arp_sha=60:66:66:66:00:08,arp_tha=ff:ff:ff:ff:ff:ff
1ffd16af
SH
2059dnl
2060NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0xd total_len=56 in_port=1 (via action) data_len=56 (unbuffered)
e6d9ab56 2061arp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=192.168.0.1,arp_tpa=255.255.255.255,arp_op=2,arp_sha=60:66:66:66:00:08,arp_tha=ff:ff:ff:ff:ff:ff
1ffd16af
SH
2062])
2063
2064AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2065
2066dnl Modified MPLS pop action.
2067dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2068dnl 60:66:66:66:00:09 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2069dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2070dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2071AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2072
2073for i in 1 2 3; do
2074 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 09 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2075done
2076OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2077OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2078
2079AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2080NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2081tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:09,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=48,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2082dnl
e672ff9b 2083NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2084tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:09,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=48,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2085dnl
e672ff9b 2086NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2087tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:09,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=48,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af
SH
2088])
2089
2090AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2091
2092dnl Modified MPLS pop action.
2093dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2094dnl 60:66:66:66:00:0a > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2095dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2096dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2097AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2098
2099for i in 1 2 3; do
2100 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 0a 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2101done
2102OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2103OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2104
2105AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2106NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2107tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0a,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
1ffd16af 2108dnl
e672ff9b 2109NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2110tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0a,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
1ffd16af 2111dnl
e672ff9b 2112NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2113tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0a,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2dee
1ffd16af
SH
2114])
2115
2116AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2117
2118dnl Modified MPLS pop action.
2119dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2120dnl 60:66:66:66:00:0b > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2121dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2122dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2123AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2124
2125for i in 1 2 3; do
2126 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 00 0b 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2127done
2128OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2129OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2130
2131AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2132NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2133tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0b,dl_dst=50:54:00:00:00:07,nw_src=10.0.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2ded
1ffd16af 2134dnl
e672ff9b 2135NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2136tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0b,dl_dst=50:54:00:00:00:07,nw_src=10.0.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2ded
1ffd16af 2137dnl
e672ff9b 2138NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2139tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:0b,dl_dst=50:54:00:00:00:07,nw_src=10.0.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:2ded
1ffd16af
SH
2140])
2141
2142AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2143
2144dnl Modified MPLS pop action.
2145dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2146dnl 60:66:66:66:01:00 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2147dnl (label 20, exp 0, [S], ttl 31)
2148dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2149dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2150AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2151
2152for i in 1 2 3; do
2153 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 01 00 88 48 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2154done
2155OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2156OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2157
2158AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2159NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2160mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
1ffd16af
SH
2161dnl
2162NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2163mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
1ffd16af
SH
2164dnl
2165NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2166mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
1ffd16af
SH
2167])
2168
2169AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2170
2171dnl Modified MPLS pop action.
2172dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2173dnl 60:66:66:66:01:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2174dnl (label 20, exp 0, [S], ttl 31)
2175dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2176dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2177AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2178
2179for i in 1 2 3; do
2180 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 01 01 88 47 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2181done
2182OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2183OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2184
2185AT_CHECK([cat ofctl_monitor.log], [0], [dnl
e672ff9b 2186NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2187mpls,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
1ffd16af 2188dnl
e672ff9b 2189NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2190mpls,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
1ffd16af 2191dnl
e672ff9b 2192NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2193mpls,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
1ffd16af
SH
2194])
2195
2196AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2197
2198dnl Modified MPLS pop action.
2199dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2200dnl 60:66:66:66:01:02 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2201dnl (label 20, exp 0, [S], ttl 31)
2202dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2203dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2204AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2205
2206for i in 1 2 3; do
2207 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 01 02 88 48 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2208done
2209OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2210OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2211
2212AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2213NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2214mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:02,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=3,mpls_ttl=31,mpls_bos=1
1ffd16af
SH
2215dnl
2216NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2217mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:02,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=3,mpls_ttl=31,mpls_bos=1
1ffd16af
SH
2218dnl
2219NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2220mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:01:02,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=3,mpls_ttl=31,mpls_bos=1
1ffd16af
SH
2221])
2222
2223AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2224
2225dnl Modified MPLS pop action.
2226dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2227dnl 60:66:66:66:02:00 > 50:54:00:00:02:00, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2228dnl (label 20, exp 0, [S], ttl 31)
2229dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2230dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2231AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2232
2233for i in 1 2 3; do
2234 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 02 00 88 47 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2235done
2236OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2237OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2238
2239AT_CHECK([cat ofctl_monitor.log], [0], [dnl
e672ff9b 2240NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2241tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,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=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2242dnl
e672ff9b 2243NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2244tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,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=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2245dnl
e672ff9b 2246NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2247tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,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=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af
SH
2248])
2249
2250AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2251
2252dnl Modified MPLS pop action.
2253dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
2254dnl 60:66:66:66:02:01 > 50:54:00:00:02:01, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2255dnl (label 20, exp 0, [S], ttl 31)
2256dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2257dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2258AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2259
2260for i in 1 2 3; do
2261 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 02 01 88 48 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2262done
e672ff9b 2263
1ffd16af
SH
2264OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2265OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2266
2267AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2268NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2269tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:01,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=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2270dnl
e672ff9b 2271NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2272tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:01,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=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2273dnl
e672ff9b 2274NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2275tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:01,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=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af
SH
2276])
2277
2278AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2279
2280dnl Modified MPLS pop action.
2281dnl The input is a frame with two MPLS label stack entries which tcpdump -vve shows as:
e672ff9b 2282dnl 60:66:66:66:02:10 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
1ffd16af
SH
2283dnl (label 20, exp 0, [S], ttl 31)
2284dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2285dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2286AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2287
2288for i in 1 2 3; do
2289 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 02 10 88 47 00 01 40 20 00 01 41 1f 45 00 00 2c 00 00 00 00 ff 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'
2290done
2291OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2292OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2293
2294AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2295NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2296tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:10,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=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2297dnl
e672ff9b 2298NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2299tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:10,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=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2300dnl
e672ff9b 2301NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2302tcp,vlan_tci=0x0000,dl_src=60:66:66:66:02:10,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=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af
SH
2303])
2304
2305AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2306
2307dnl Modified MPLS pop action.
2308dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
e672ff9b 2309dnl 60:66:66:66:03:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
1ffd16af
SH
2310dnl (label 20, exp 0, ttl 31)
2311dnl (label 20, exp 0, [S], ttl 30)
2312dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2313dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2314AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2315
2316for i in 1 2 3; do
2317 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 03 00 88 47 00 01 40 20 00 01 40 1f 00 01 41 1e 45 00 00 2c 00 00 00 00 ff 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'
2318done
2319OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2320OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2321
2322AT_CHECK([cat ofctl_monitor.log], [0], [dnl
e672ff9b 2323NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2324mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
1ffd16af 2325dnl
e672ff9b 2326NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2327mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
1ffd16af 2328dnl
e672ff9b 2329NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2330mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1
1ffd16af
SH
2331])
2332
2333AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2334
2335dnl Modified MPLS pop action.
2336dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2337dnl 60:66:66:66:03:01 > 50:54:00:00:00:00, ethertype MPLS multicast (0x8848), length 66: MPLS (label 20, exp 0, ttl 32)
2338dnl (label 20, exp 0, ttl 31)
2339dnl (label 20, exp 0, [S], ttl 30)
2340dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2341dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2342AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2343
2344for i in 1 2 3; do
2345 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 03 01 88 48 00 01 40 20 00 01 40 1f 00 01 41 1e 45 00 00 2c 00 00 00 00 ff 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'
2346done
2347OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2348OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2349
2350AT_CHECK([cat ofctl_monitor.log], [0], [dnl
e672ff9b 2351NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2352mpls,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
1ffd16af 2353dnl
e672ff9b 2354NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2355mpls,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
1ffd16af 2356dnl
e672ff9b 2357NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2358mpls,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
1ffd16af
SH
2359])
2360
2361AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2362
2363dnl Modified MPLS pop action.
2364dnl The input is a frame with three MPLS label stack entries which tcpdump -vve shows as:
2365dnl 60:66:66:66:03:10 > 50:54:00:00:00:00, ethertype MPLS unicast (0x8847), length 66: MPLS (label 20, exp 0, ttl 32)
2366dnl (label 20, exp 0, ttl 31)
2367dnl (label 20, exp 0, [S], ttl 30)
2368dnl (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto TCP (6), length 44)
2369dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
2370AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2371
2372for i in 1 2 3; do
2373 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 03 10 88 47 00 01 40 20 00 01 40 1f 00 01 41 1e 45 00 00 2c 00 00 00 00 ff 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'
2374done
2375OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2376OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2377
2378AT_CHECK([cat ofctl_monitor.log], [0], [dnl
e672ff9b 2379NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2380mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
1ffd16af 2381dnl
e672ff9b 2382NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2383mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
1ffd16af 2384dnl
e672ff9b 2385NXT_PACKET_IN (xid=0x0): cookie=0xe total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2386mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1
1ffd16af
SH
2387])
2388
2389AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2390
2391dnl Modified MPLS pop action.
2392dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2393dnl 60:66:66:66:04:00 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2394dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2395dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2396AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2397
2398for i in 1 2 3; do
2399 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 04 00 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2400done
2401OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2402OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2403
2404AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2405NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2406mpls,vlan_tci=0x0000,dl_src=60:66:66:66:04:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=255,mpls_bos=1
1ffd16af 2407dnl
e672ff9b 2408NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2409mpls,vlan_tci=0x0000,dl_src=60:66:66:66:04:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=255,mpls_bos=1
1ffd16af 2410dnl
e672ff9b 2411NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2412mpls,vlan_tci=0x0000,dl_src=60:66:66:66:04:00,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=255,mpls_bos=1
1ffd16af
SH
2413])
2414
2415AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2416
2417dnl Modified MPLS pop action.
2418dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2419dnl 60:66:66:66:04:01 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2420dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2421dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2422AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2423
2424for i in 1 2 3; do
2425 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 04 01 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2426done
2427OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2428OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2429
2430AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2431NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2432mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:01,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=254,mpls_bos=1
1ffd16af 2433dnl
e672ff9b 2434NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2435mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:01,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=254,mpls_bos=1
1ffd16af 2436dnl
e672ff9b 2437NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2438mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:01,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=254,mpls_bos=1
1ffd16af
SH
2439])
2440
2441AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2442
2443dnl Modified MPLS pop action.
2444dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2445dnl 60:66:66:66:04:10 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2446dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2447dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2448AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2449
2450for i in 1 2 3; do
2451 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 04 10 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2452done
2453OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2454OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2455
2456AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2457NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2458mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:10,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=253,mpls_bos=1
1ffd16af 2459dnl
e672ff9b 2460NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2461mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:10,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=253,mpls_bos=1
1ffd16af 2462dnl
e672ff9b 2463NXT_PACKET_IN (xid=0x0): cookie=0xf total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2464mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:04:10,dl_dst=50:54:00:00:00:07,mpls_label=0,mpls_tc=0,mpls_ttl=253,mpls_bos=1
1ffd16af
SH
2465])
2466
2467AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2468
2469dnl Modified MPLS pop action.
2470dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2471dnl 60:66:66:66:05:00 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2472dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2473dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2474AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2475
2476for i in 1 2 3; do
2477 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 05 00 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2478done
e672ff9b 2479
1ffd16af
SH
2480OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2481OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2482
2483AT_CHECK([cat ofctl_monitor.log], [0], [dnl
e672ff9b 2484NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2485mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=1
1ffd16af 2486dnl
e672ff9b 2487NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2488mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=1
1ffd16af 2489dnl
e672ff9b 2490NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2491mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=1
1ffd16af
SH
2492])
2493
2494AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2495
2496dnl Modified MPLS pop action.
2497dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2498dnl 60:66:66:66:05:01 > 50:54:00:00:00:07, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2499dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2500dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2501AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2502
2503for i in 1 2 3; do
2504 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 05 01 88 48 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2505done
2506OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2507OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2508
2509AT_CHECK([cat ofctl_monitor.log], [0], [dnl
e672ff9b 2510NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2511mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
1ffd16af 2512dnl
e672ff9b 2513NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2514mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
1ffd16af 2515dnl
e672ff9b 2516NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2517mplsm,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
1ffd16af
SH
2518])
2519
2520AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2521
2522dnl Modified MPLS pop action.
2523dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2524dnl 60:66:66:66:05:10 > 50:54:00:00:00:07, ethertype MPLS unicast (0x8847), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2525dnl (tos 0x0, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2526dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2527AT_CHECK([ovs-ofctl monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2528
2529for i in 1 2 3; do
2530 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 07 60 66 66 66 05 10 88 47 00 01 41 20 45 00 00 2c 00 00 00 00 ff 06 3a 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'
2531done
e672ff9b 2532
1ffd16af
SH
2533OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2534OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2535
2536AT_CHECK([cat ofctl_monitor.log], [0], [dnl
e672ff9b 2537NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2538mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
1ffd16af 2539dnl
e672ff9b 2540NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2541mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
1ffd16af 2542dnl
e672ff9b 2543NXT_PACKET_IN (xid=0x0): cookie=0x5 total_len=62 in_port=1 (via action) data_len=62 (unbuffered)
e6d9ab56 2544mpls,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1
1ffd16af
SH
2545])
2546
cea4a6d7 2547AT_CHECK([ovs-appctl revalidator/purge], [0])
ef0ce8ae 2548AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
e672ff9b
JR
2549 cookie=0x5, n_packets=3, n_bytes=186, dl_src=60:66:66:66:05:00 actions=push_mpls:0x8848,pop_mpls:0x8847,CONTROLLER:65535
2550 cookie=0x5, n_packets=3, n_bytes=186, dl_src=60:66:66:66:05:01 actions=push_mpls:0x8847,pop_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2551 cookie=0x5, n_packets=3, n_bytes=186, dl_src=60:66:66:66:05:10 actions=push_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8847,dec_mpls_ttl,CONTROLLER:65535
b02475c5
SH
2552 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
2553 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
2554 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
b676167a 2555 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
0f3f3c3d
SH
2556 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
2557 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
2558 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
b0a17866 2559 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
1ffd16af 2560 cookie=0xa, n_packets=3, n_bytes=180, mpls,dl_src=40:44:44:44:44:49 actions=push_mpls:0x8848,load:0xa->OXM_OF_MPLS_LABEL[[]],CONTROLLER:65535
392c30ba 2561 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
b02475c5 2562 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
1ffd16af 2563 cookie=0xd, n_packets=3, n_bytes=180, dl_src=60:66:66:66:00:08 actions=pop_mpls:0x0806,resubmit(1,1)
c2d936a4 2564 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:01 actions=pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
1ffd16af
SH
2565 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:02 actions=pop_mpls:0x0800,load:0xa000001->NXM_OF_IP_DST[[]],CONTROLLER:65535
2566 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:03 actions=pop_mpls:0x0800,move:NXM_OF_IP_DST[[]]->NXM_OF_IP_SRC[[]],CONTROLLER:65535
2567 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:04 actions=pop_mpls:0x0800,push:NXM_OF_IP_DST[[]],pop:NXM_OF_IP_SRC[[]],CONTROLLER:65535
2568 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:05 actions=pop_mpls:0x0800,multipath(eth_src,50,modulo_n,256,0,NXM_OF_IP_SRC[[0..7]]),CONTROLLER:65535
2569 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:06 actions=pop_mpls:0x0800,bundle_load(eth_src,50,hrw,ofport,NXM_OF_IP_SRC[[0..15]],slaves:1,2),CONTROLLER:65535
2570 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:07 actions=pop_mpls:0x0800,learn(table=1,hard_timeout=60,eth_type=0x800,nw_proto=6,NXM_OF_IP_SRC[[]]=NXM_OF_IP_DST[[]]),CONTROLLER:65535
e672ff9b 2571 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:09 actions=resubmit(,2),CONTROLLER:65535
1ffd16af
SH
2572 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:0a actions=pop_mpls:0x0800,mod_nw_dst:10.0.0.1,CONTROLLER:65535
2573 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:0b actions=pop_mpls:0x0800,mod_nw_src:10.0.0.1,CONTROLLER:65535
cff78c88 2574 cookie=0xd, n_packets=3, n_bytes=186, dl_src=60:66:66:66:66:66 actions=pop_mpls:0x0800,CONTROLLER:65535
1ffd16af
SH
2575 cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:00 actions=pop_mpls:0x8848,CONTROLLER:65535
2576 cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:01 actions=pop_mpls:0x8847,dec_mpls_ttl,CONTROLLER:65535
2577 cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:01:02 actions=pop_mpls:0x8848,load:0x3->OXM_OF_MPLS_TC[[]],CONTROLLER:65535
2578 cookie=0xd, n_packets=3, n_bytes=198, dl_src=60:66:66:66:02:00 actions=pop_mpls:0x8847,pop_mpls:0x0800,CONTROLLER:65535
1ffd16af 2579 cookie=0xd, table=1, n_packets=3, n_bytes=168, arp actions=CONTROLLER:65535
e672ff9b
JR
2580 cookie=0xdeadbeef, table=2, n_packets=3, n_bytes=186, dl_src=60:66:66:66:00:09 actions=pop_mpls:0x0800,mod_nw_tos:48
2581 cookie=0xe, n_packets=3, n_bytes=198, dl_src=60:66:66:66:02:01 actions=pop_mpls:0x8848,pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
2582 cookie=0xe, n_packets=3, n_bytes=198, dl_src=60:66:66:66:02:10 actions=pop_mpls:0x8847,dec_mpls_ttl,pop_mpls:0x0800,dec_ttl,CONTROLLER:65535
2583 cookie=0xe, n_packets=3, n_bytes=210, dl_src=60:66:66:66:03:00 actions=pop_mpls:0x8848,pop_mpls:0x8848,CONTROLLER:65535
2584 cookie=0xe, n_packets=3, n_bytes=210, dl_src=60:66:66:66:03:01 actions=pop_mpls:0x8847,pop_mpls:0x8847,dec_mpls_ttl,CONTROLLER:65535
2585 cookie=0xe, n_packets=3, n_bytes=210, dl_src=60:66:66:66:03:10 actions=pop_mpls:0x8848,dec_mpls_ttl,pop_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2586 cookie=0xf, n_packets=3, n_bytes=186, dl_src=60:66:66:66:04:00 actions=pop_mpls:0x0800,push_mpls:0x8847,CONTROLLER:65535
2587 cookie=0xf, n_packets=3, n_bytes=186, dl_src=60:66:66:66:04:01 actions=pop_mpls:0x0800,push_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
2588 cookie=0xf, n_packets=3, n_bytes=186, dl_src=60:66:66:66:04:10 actions=pop_mpls:0x0800,dec_ttl,push_mpls:0x8848,dec_mpls_ttl,CONTROLLER:65535
ef0ce8ae 2589NXST_FLOW reply:
15056dc8
EJ
2590])
2591
2592OVS_VSWITCHD_STOP
8e9ce036 2593AT_CLEANUP
04c956fc 2594
1ffd16af
SH
2595AT_SETUP([ofproto-dpif - MPLS handling with goto_table])
2596OVS_VSWITCHD_START([dnl
2597 add-port br0 p1 -- set Interface p1 type=dummy
2598])
53eb8cb8 2599on_exit 'kill `cat ovs-ofctl.pid`'
1ffd16af
SH
2600
2601AT_CAPTURE_FILE([ofctl_monitor.log])
2602AT_DATA([flows.txt], [dnl
2603table=0 mplsm actions=pop_mpls:0x800,goto_table(1)
2604table=1 ip,ip_dscp=8 actions=controller
2605])
2606AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2607
2608
2609dnl Modified MPLS pop action.
2610dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2611dnl 60:66:66:66:00:08 > 50:54:00:00:00:01, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2612dnl (tos 0x20, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2613dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2614AT_CHECK([ovs-ofctl -O OpenFlow12 monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2615
2616for i in 1 2 3; do
2617 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 01 60 66 66 66 00 08 88 48 00 01 41 20 45 20 00 2c 00 00 00 00 ff 06 3a 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'
2618done
2619OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2620OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2621
2622AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
2623OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2624tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af
SH
2625dnl
2626OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2627tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af
SH
2628dnl
2629OFPT_PACKET_IN (OF1.2) (xid=0x0): table_id=1 total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2630tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af
SH
2631])
2632
cea4a6d7 2633AT_CHECK([ovs-appctl revalidator/purge], [0])
1ffd16af
SH
2634AT_CHECK([ovs-ofctl -O OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2635 n_packets=3, n_bytes=186, mplsm actions=pop_mpls:0x0800,goto_table:1
2636 table=1, n_packets=3, n_bytes=174, ip,nw_tos=32 actions=CONTROLLER:65535
2637OFPST_FLOW reply (OF1.2):
2638])
2639
2640OVS_VSWITCHD_STOP
2641AT_CLEANUP
2642
2643AT_SETUP([ofproto-dpif - MPLS handling with write_actions])
2644OVS_VSWITCHD_START([dnl
2645 add-port br0 p1 -- set Interface p1 type=dummy
2646])
53eb8cb8 2647on_exit 'kill `cat ovs-ofctl.pid`'
1ffd16af
SH
2648
2649dnl N.B: The first (and only) action that accesses L3 data after the
2650dnl pop_mpls action is present in write_actions. This exercises recirculation
2651dnl triggered in write_actions due to a previous action not in write actions.
2652AT_CAPTURE_FILE([ofctl_monitor.log])
2653AT_DATA([flows.txt], [dnl
2654mplsm actions=pop_mpls:0x800,write_actions(dec_ttl,controller)
2655])
2656AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
2657
2658dnl Modified MPLS pop action.
2659dnl The input is a frame with a single MPLS label stack entry which tcpdump -vve shows as:
2660dnl 60:66:66:66:00:08 > 50:54:00:00:00:01, ethertype MPLS multicast (0x8848), length 62: MPLS (label 20, exp 0, [S], ttl 32)
2661dnl (tos 0x20, ttl 255, id 0, offset 0, flags [none], proto TCP (6), length 44)
2662dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x77ec (correct), seq 42:46, win 10000, length 4
2663AT_CHECK([ovs-ofctl -O OpenFlow12 monitor br0 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
2664
2665for i in 1 2 3; do
2666 ovs-appctl netdev-dummy/receive p1 '50 54 00 00 00 01 60 66 66 66 00 08 88 48 00 01 41 20 45 20 00 2c 00 00 00 00 ff 06 3a 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'
2667done
2668OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2669OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
2670
2671AT_CHECK([STRIP_METADATA ofctl_monitor.log], [0], [dnl
e672ff9b 2672OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2673tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2674dnl
e672ff9b 2675OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2676tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af 2677dnl
e672ff9b 2678OFPT_PACKET_IN (OF1.2) (xid=0x0): total_len=58 in_port=1 (via action) data_len=58 (unbuffered)
e6d9ab56 2679tcp,vlan_tci=0x0000,dl_src=60:66:66:66:00:08,dl_dst=50:54:00:00:00:01,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=32,nw_ecn=0,nw_ttl=254,tp_src=80,tp_dst=0,tcp_flags=0 tcp_csum:7744
1ffd16af
SH
2680])
2681
cea4a6d7 2682AT_CHECK([ovs-appctl revalidator/purge], [0])
1ffd16af
SH
2683AT_CHECK([ovs-ofctl -O OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2684 n_packets=3, n_bytes=186, mplsm actions=pop_mpls:0x0800,write_actions(dec_ttl,CONTROLLER:65535)
2685OFPST_FLOW reply (OF1.2):
2686])
2687
2688OVS_VSWITCHD_STOP
2689AT_CLEANUP
527ae97e
SH
2690
2691AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.0)])
2692OVS_VSWITCHD_START([dnl
2693 add-port br0 p1 -- set Interface p1 type=dummy
2694])
53eb8cb8 2695on_exit 'kill `cat ovs-ofctl.pid`'
527ae97e
SH
2696
2697AT_CAPTURE_FILE([ofctl_monitor.log])
2698# A table-miss flow has priority 0 and no match
2699AT_CHECK([ovs-ofctl --protocols=OpenFlow10 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2700
2701dnl Singleton controller action.
2702AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow10 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2703
2704for i in 1 2 3 ; do
2705 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)'
2706done
2707OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2708ovs-appctl -t ovs-ofctl exit
2709
2710AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2711OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2712tcp,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=syn tcp_csum:0
527ae97e
SH
2713dnl
2714OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2715tcp,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=syn tcp_csum:0
527ae97e
SH
2716dnl
2717OFPT_PACKET_IN (xid=0x0): total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2718tcp,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=syn tcp_csum:0
527ae97e
SH
2719])
2720
cea4a6d7 2721AT_CHECK([ovs-appctl revalidator/purge], [0])
527ae97e
SH
2722AT_CHECK([ovs-ofctl --protocols=OpenFlow10 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2723 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2724NXST_FLOW reply:
2725])
2726
2727OVS_VSWITCHD_STOP
2728AT_CLEANUP
2729
2730
2731AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.3)])
2732OVS_VSWITCHD_START([dnl
2733 add-port br0 p1 -- set Interface p1 type=dummy
2734])
53eb8cb8 2735on_exit 'kill `cat ovs-ofctl.pid`'
527ae97e
SH
2736
2737AT_CAPTURE_FILE([ofctl_monitor.log])
2738# A table-miss flow has priority 0 and no match
2739AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2740
2741dnl Singleton controller action.
2742AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2743
2744for i in 1 2 3 ; do
2745 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)'
2746done
2747OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2748ovs-appctl -t ovs-ofctl exit
2749
2750AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2751
2752AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2753OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 2754tcp,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=syn tcp_csum:0
527ae97e
SH
2755dnl
2756OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 2757tcp,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=syn tcp_csum:0
527ae97e
SH
2758dnl
2759OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 2760tcp,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=syn tcp_csum:0
ba96552a
SS
2761])
2762
cea4a6d7 2763AT_CHECK([ovs-appctl revalidator/purge], [0])
ba96552a
SS
2764AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2765 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2766OFPST_FLOW reply (OF1.3):
2767])
2768
2769OVS_VSWITCHD_STOP
2770AT_CLEANUP
2771
2772AT_SETUP([ofproto-dpif - table-miss flow with async config (OpenFlow 1.3)])
2773OVS_VSWITCHD_START([dnl
2774 add-port br0 p1 -- set Interface p1 type=dummy
2775])
53eb8cb8 2776on_exit 'kill `cat ovs-ofctl.pid`'
ba96552a 2777
5b7278a1
JS
2778ovs-appctl time/stop
2779
ba96552a
SS
2780AT_CAPTURE_FILE([ofctl_monitor.log])
2781# A table-miss flow has priority 0 and no match
2782AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2783
2784dnl Singleton controller action.
2785AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2786
2787# Become slave (OF 1.3), which should disable everything except port status.
2788ovs-appctl -t ovs-ofctl ofctl/send 041800180000000200000003000000000000000000000001
2789
5b7278a1
JS
2790# Ensure that ovs-vswitchd gets a chance to reply before sending another command.
2791ovs-appctl time/warp 500 100
2792
ba96552a
SS
2793# Use OF 1.3 OFPT_SET_ASYNC to enable OFPR_NO_MATCH for slave only.
2794ovs-appctl -t ovs-ofctl ofctl/send 041c002000000002000000000000000100000000000000000000000000000000
2795
5b7278a1 2796ovs-appctl time/warp 500 100
ba96552a
SS
2797for i in 1 2 3 ; do
2798 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)'
2799done
2800OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2801ovs-appctl -t ovs-ofctl exit
2802
cea4a6d7 2803AT_CHECK([ovs-appctl revalidator/purge], [0])
ba96552a
SS
2804AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2805send: OFPT_ROLE_REQUEST (OF1.3) (xid=0x2): role=slave generation_id=1
2806OFPT_ROLE_REPLY (OF1.3) (xid=0x2): role=slave generation_id=1
2807dnl
2808send: OFPT_SET_ASYNC (OF1.3) (xid=0x2):
2809 master:
2810 PACKET_IN: (off)
2811 PORT_STATUS: (off)
2812 FLOW_REMOVED: (off)
904e5202
BP
2813 ROLE_STATUS: (off)
2814 TABLE_STATUS: (off)
2815 REQUESTFORWARD: (off)
ba96552a
SS
2816
2817 slave:
2818 PACKET_IN: no_match
2819 PORT_STATUS: (off)
2820 FLOW_REMOVED: (off)
904e5202
BP
2821 ROLE_STATUS: (off)
2822 TABLE_STATUS: (off)
2823 REQUESTFORWARD: (off)
ba96552a
SS
2824dnl
2825OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 2826tcp,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=syn tcp_csum:0
ba96552a
SS
2827dnl
2828OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 2829tcp,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=syn tcp_csum:0
ba96552a
SS
2830dnl
2831OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 2832tcp,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=syn tcp_csum:0
527ae97e
SH
2833])
2834
2835AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2836
2837AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2838 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2839OFPST_FLOW reply (OF1.3):
2840])
2841
2842OVS_VSWITCHD_STOP
2843AT_CLEANUP
2844
807c7989
SS
2845
2846AT_SETUP([ofproto-dpif - table-miss flow (OpenFlow 1.4)])
2847OVS_VSWITCHD_START([dnl
2848 add-port br0 p1 -- set Interface p1 type=dummy
2849])
53eb8cb8 2850on_exit 'kill `cat ovs-ofctl.pid`'
807c7989
SS
2851
2852AT_CAPTURE_FILE([ofctl_monitor.log])
2853# A table-miss flow has priority 0 and no match
2854AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flow br0 'priority=0 actions=output:CONTROLLER'])
2855
2856dnl Singleton controller action.
2857AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2858
2859for i in 1 2 3 ; do
2860 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)'
2861done
2862OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2863ovs-appctl -t ovs-ofctl exit
2864
cea4a6d7 2865AT_CHECK([ovs-appctl revalidator/purge], [0])
807c7989
SS
2866AT_CHECK([cat ofctl_monitor.log], [0], [dnl
2867OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 2868tcp,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=syn tcp_csum:0
807c7989
SS
2869dnl
2870OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 2871tcp,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=syn tcp_csum:0
807c7989
SS
2872dnl
2873OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via no_match) data_len=60 (unbuffered)
e6d9ab56 2874tcp,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=syn tcp_csum:0
807c7989
SS
2875])
2876
2877AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2878
2879AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
2880 n_packets=3, n_bytes=180, priority=0 actions=CONTROLLER:65535
2881OFPST_FLOW reply (OF1.4):
2882])
2883
2884OVS_VSWITCHD_STOP
2885AT_CLEANUP
2886
2887
029ca940 2888AT_SETUP([ofproto-dpif - packet-in reasons (Openflow 1.3)])
3a11fd5b
SS
2889OVS_VSWITCHD_START([dnl
2890 add-port br0 p1 -- set Interface p1 type=dummy
2891])
53eb8cb8 2892on_exit 'kill `cat ovs-ofctl.pid`'
3a11fd5b
SS
2893
2894AT_CAPTURE_FILE([ofctl_monitor.log])
029ca940
SS
2895AT_DATA([flows.txt], [dnl
2896table=0 in_port=1 actions=write_actions(output(CONTROLLER)),goto_table(1)
2897table=1 actions=output(CONTROLLER),goto_table(2)
2898table=2 actions=group:1234
2899])
3a11fd5b 2900AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:CONTROLLER'])
029ca940 2901AT_CHECK([ovs-ofctl --protocols=OpenFlow13 add-flows br0 flows.txt])
3a11fd5b
SS
2902
2903dnl Singleton controller action.
2904AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow13 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2905
2906for i in 1 2 3 ; do
2907 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)'
2908done
2909OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2910ovs-appctl -t ovs-ofctl exit
2911
2912AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2913
2914AT_CHECK([cat ofctl_monitor.log], [0], [dnl
029ca940 2915OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2916tcp,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=syn tcp_csum:0
029ca940
SS
2917dnl
2918OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2919tcp,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=syn tcp_csum:0
029ca940 2920dnl
3a11fd5b 2921OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2922tcp,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=syn tcp_csum:0
3a11fd5b 2923dnl
029ca940 2924OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2925tcp,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=syn tcp_csum:0
029ca940
SS
2926dnl
2927OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2928tcp,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=syn tcp_csum:0
029ca940 2929dnl
3a11fd5b 2930OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2931tcp,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=syn tcp_csum:0
3a11fd5b 2932dnl
029ca940 2933OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2934tcp,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=syn tcp_csum:0
029ca940
SS
2935dnl
2936OFPT_PACKET_IN (OF1.3) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2937tcp,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=syn tcp_csum:0
029ca940 2938dnl
3a11fd5b 2939OFPT_PACKET_IN (OF1.3) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2940tcp,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=syn tcp_csum:0
3a11fd5b
SS
2941])
2942
2943AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2944
2945AT_CHECK([ovs-ofctl --protocols=OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
029ca940
SS
2946 n_packets=3, n_bytes=180, in_port=1 actions=write_actions(CONTROLLER:65535),goto_table:1
2947 table=1, n_packets=3, n_bytes=180, actions=CONTROLLER:65535,goto_table:2
2948 table=2, n_packets=3, n_bytes=180, actions=group:1234
3a11fd5b
SS
2949OFPST_FLOW reply (OF1.3):
2950])
2951
2952OVS_VSWITCHD_STOP
2953AT_CLEANUP
2954
2955
029ca940 2956AT_SETUP([ofproto-dpif - packet-in reasons (Openflow 1.4)])
3a11fd5b
SS
2957OVS_VSWITCHD_START([dnl
2958 add-port br0 p1 -- set Interface p1 type=dummy
2959])
53eb8cb8 2960on_exit 'kill `cat ovs-ofctl.pid`'
3a11fd5b
SS
2961
2962AT_CAPTURE_FILE([ofctl_monitor.log])
029ca940
SS
2963AT_DATA([flows.txt], [dnl
2964table=0 in_port=1 actions=write_actions(output(CONTROLLER)),goto_table(1)
2965table=1 actions=output(CONTROLLER),goto_table(2)
2966table=2 actions=group:1234
2967])
3a11fd5b 2968AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-group br0 'group_id=1234,type=all,bucket=output:10,bucket=output:CONTROLLER'])
029ca940 2969AT_CHECK([ovs-ofctl --protocols=OpenFlow14 add-flows br0 flows.txt])
3a11fd5b
SS
2970
2971dnl Singleton controller action.
2972AT_CHECK([ovs-ofctl monitor -P openflow10 --protocols=OpenFlow14 br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
2973
2974for i in 1 2 3 ; do
2975 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)'
2976done
2977OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
2978ovs-appctl -t ovs-ofctl exit
2979
2980AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
2981
2982AT_CHECK([cat ofctl_monitor.log], [0], [dnl
029ca940 2983OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2984tcp,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=syn tcp_csum:0
029ca940
SS
2985dnl
2986OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via group) data_len=60 (unbuffered)
e6d9ab56 2987tcp,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=syn tcp_csum:0
029ca940
SS
2988dnl
2989OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action_set) data_len=60 (unbuffered)
e6d9ab56 2990tcp,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=syn tcp_csum:0
029ca940
SS
2991dnl
2992OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 2993tcp,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=syn tcp_csum:0
029ca940
SS
2994dnl
2995OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via group) data_len=60 (unbuffered)
e6d9ab56 2996tcp,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=syn tcp_csum:0
029ca940
SS
2997dnl
2998OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action_set) data_len=60 (unbuffered)
e6d9ab56 2999tcp,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=syn tcp_csum:0
029ca940
SS
3000dnl
3001OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 3002tcp,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=syn tcp_csum:0
3a11fd5b 3003dnl
029ca940 3004OFPT_PACKET_IN (OF1.4) (xid=0x0): table_id=2 cookie=0x0 total_len=60 in_port=1 (via group) data_len=60 (unbuffered)
e6d9ab56 3005tcp,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=syn tcp_csum:0
3a11fd5b 3006dnl
029ca940 3007OFPT_PACKET_IN (OF1.4) (xid=0x0): cookie=0x0 total_len=60 in_port=1 (via action_set) data_len=60 (unbuffered)
e6d9ab56 3008tcp,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=syn tcp_csum:0
3a11fd5b
SS
3009])
3010
3011AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3012
3013AT_CHECK([ovs-ofctl --protocols=OpenFlow14 dump-flows br0 | ofctl_strip | sort], [0], [dnl
029ca940
SS
3014 n_packets=3, n_bytes=180, in_port=1 actions=write_actions(CONTROLLER:65535),goto_table:1
3015 table=1, n_packets=3, n_bytes=180, actions=CONTROLLER:65535,goto_table:2
3016 table=2, n_packets=3, n_bytes=180, actions=group:1234
3a11fd5b
SS
3017OFPST_FLOW reply (OF1.4):
3018])
3019
3020OVS_VSWITCHD_STOP
3021AT_CLEANUP
3022
029ca940 3023
f6c8a6b1
BP
3024AT_SETUP([ofproto-dpif - ARP modification slow-path])
3025OVS_VSWITCHD_START
3026ADD_OF_PORTS([br0], [1], [2])
3027
3028ovs-vsctl -- set Interface p2 type=dummy options:pcap=p2.pcap
3029ovs-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'
3030
3031# Input some packets that should follow the arp modification slow-path.
3032for i in 1 2 3; do
3033 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)'
3034done
3035AT_CHECK([ovs-appctl time/warp 5000], [0], [ignore])
3036
3037# Check the packets that were output.
3038AT_CHECK([ovs-ofctl parse-pcap p2.pcap], [0], [dnl
78c9486d
JR
3039arp,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
3040arp,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
3041arp,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
3042arp,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
3043arp,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
3044arp,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
3045arp,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
3046arp,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
3047arp,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
f6c8a6b1
BP
3048])
3049
f6c8a6b1
BP
3050OVS_VSWITCHD_STOP
3051AT_CLEANUP
3052
ecac4ebf 3053AT_SETUP([ofproto-dpif - VLAN handling])
04c956fc 3054OVS_VSWITCHD_START(
023e1e0a
BP
3055 [set Bridge br0 fail-mode=standalone -- \
3056 add-port br0 p1 trunks=10,12 -- \
ecac4ebf 3057 add-port br0 p2 tag=10 -- \
5e9ceccd
BP
3058 add-port br0 p3 tag=12 \
3059 other-config:priority-tags=true -- \
ecac4ebf
BP
3060 add-port br0 p4 tag=12 -- \
3061 add-port br0 p5 vlan_mode=native-tagged tag=10 -- \
3062 add-port br0 p6 vlan_mode=native-tagged tag=10 trunks=10,12 -- \
3063 add-port br0 p7 vlan_mode=native-untagged tag=12 -- \
5e9ceccd
BP
3064 add-port br0 p8 vlan_mode=native-untagged tag=12 trunks=10,12 \
3065 other-config:priority-tags=true -- \
ecac4ebf
BP
3066 set Interface p1 type=dummy -- \
3067 set Interface p2 type=dummy -- \
3068 set Interface p3 type=dummy -- \
3069 set Interface p4 type=dummy -- \
3070 set Interface p5 type=dummy -- \
3071 set Interface p6 type=dummy -- \
3072 set Interface p7 type=dummy -- \
3073 set Interface p8 type=dummy --])
04c956fc 3074
247527db
BP
3075dnl Each of these specifies an in_port by number, a VLAN VID (or "none"),
3076dnl a VLAN PCP (used if the VID isn't "none") and the expected set of datapath
ecac4ebf 3077dnl actions.
04c956fc 3078for tuple in \
e44768b7
JP
3079 "100 none 0 drop" \
3080 "100 0 0 drop" \
3081 "100 0 1 drop" \
3082 "100 10 0 1,5,6,7,8,pop_vlan,2" \
3083 "100 10 1 1,5,6,7,8,pop_vlan,2" \
3084 "100 11 0 5,7" \
3085 "100 11 1 5,7" \
3086 "100 12 0 1,5,6,pop_vlan,3,4,7,8" \
3087 "100 12 1 1,5,6,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
247527db
BP
3088 "1 none 0 drop" \
3089 "1 0 0 drop" \
3090 "1 0 1 drop" \
e44768b7
JP
3091 "1 10 0 5,6,7,8,100,pop_vlan,2" \
3092 "1 10 1 5,6,7,8,100,pop_vlan,2" \
247527db
BP
3093 "1 11 0 drop" \
3094 "1 11 1 drop" \
e44768b7
JP
3095 "1 12 0 5,6,100,pop_vlan,3,4,7,8" \
3096 "1 12 1 5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3097 "2 none 0 push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3098 "2 0 0 pop_vlan,push_vlan(vid=10,pcp=0),1,5,6,7,8,100" \
3099 "2 0 1 pop_vlan,push_vlan(vid=10,pcp=1),1,5,6,7,8,100" \
247527db
BP
3100 "2 10 0 drop" \
3101 "2 10 1 drop" \
3102 "2 11 0 drop" \
3103 "2 11 1 drop" \
3104 "2 12 0 drop" \
3105 "2 12 1 drop" \
e44768b7
JP
3106 "3 none 0 4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3107 "3 0 0 pop_vlan,4,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3108 "3 0 1 8,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
3109 "3 10 0 drop" \
3110 "3 10 1 drop" \
3111 "3 11 0 drop" \
3112 "3 11 1 drop" \
3113 "3 12 0 drop" \
3114 "3 12 1 drop" \
e44768b7
JP
3115 "4 none 0 3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3116 "4 0 0 pop_vlan,3,7,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3117 "4 0 1 3,8,pop_vlan,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
247527db
BP
3118 "4 10 0 drop" \
3119 "4 10 1 drop" \
3120 "4 11 0 drop" \
3121 "4 11 1 drop" \
3122 "4 12 0 drop" \
3123 "4 12 1 drop" \
e44768b7
JP
3124 "5 none 0 2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
3125 "5 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,6,7,8,100" \
3126 "5 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,6,7,8,100" \
3127 "5 10 0 1,6,7,8,100,pop_vlan,2" \
3128 "5 10 1 1,6,7,8,100,pop_vlan,2" \
3129 "5 11 0 7,100" \
3130 "5 11 1 7,100" \
3131 "5 12 0 1,6,100,pop_vlan,3,4,7,8" \
3132 "5 12 1 1,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3133 "6 none 0 2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
3134 "6 0 0 pop_vlan,2,push_vlan(vid=10,pcp=0),1,5,7,8,100" \
3135 "6 0 1 pop_vlan,2,push_vlan(vid=10,pcp=1),1,5,7,8,100" \
3136 "6 10 0 1,5,7,8,100,pop_vlan,2" \
3137 "6 10 1 1,5,7,8,100,pop_vlan,2" \
247527db
BP
3138 "6 11 0 drop" \
3139 "6 11 1 drop" \
e44768b7
JP
3140 "6 12 0 1,5,100,pop_vlan,3,4,7,8" \
3141 "6 12 1 1,5,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3,8" \
3142 "7 none 0 3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3143 "7 0 0 pop_vlan,3,4,8,push_vlan(vid=12,pcp=0),1,5,6,100" \
3144 "7 0 1 3,8,pop_vlan,4,push_vlan(vid=12,pcp=1),1,5,6,100" \
3145 "7 10 0 1,5,6,8,100,pop_vlan,2" \
3146 "7 10 1 1,5,6,8,100,pop_vlan,2" \
3147 "7 11 0 5,100" \
3148 "7 11 1 5,100" \
3149 "7 12 0 1,5,6,100,pop_vlan,3,4,8" \
3150 "7 12 1 1,5,6,100,pop_vlan,4,push_vlan(vid=0,pcp=1),3,8" \
3151 "8 none 0 3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
3152 "8 0 0 pop_vlan,3,4,7,push_vlan(vid=12,pcp=0),1,5,6,100" \
3153 "8 0 1 3,pop_vlan,4,7,push_vlan(vid=12,pcp=1),1,5,6,100" \
3154 "8 10 0 1,5,6,7,100,pop_vlan,2" \
3155 "8 10 1 1,5,6,7,100,pop_vlan,2" \
247527db
BP
3156 "8 11 0 drop" \
3157 "8 11 1 drop" \
e44768b7
JP
3158 "8 12 0 1,5,6,100,pop_vlan,3,4,7" \
3159 "8 12 1 1,5,6,100,pop_vlan,4,7,push_vlan(vid=0,pcp=1),3"
04c956fc
BP
3160do
3161 set $tuple
3162 in_port=$1
3163 vlan=$2
ecac4ebf
BP
3164 pcp=$3
3165 expected=$4
04c956fc
BP
3166
3167 if test $vlan = none; then
247527db 3168 flow="in_port($in_port),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff),eth_type(0xabcd)"
04c956fc 3169 else
247527db 3170 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))"
04c956fc
BP
3171 fi
3172
395e68ce
BP
3173 echo "----------------------------------------------------------------------"
3174 echo "in_port=$in_port vlan=$vlan pcp=$pcp"
3175
50aa28fd 3176 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
ecac4ebf 3177 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
04c956fc 3178
247527db 3179 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
becffb86 3180 mv stdout expout
247527db 3181 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
04c956fc
BP
3182done
3183
3184OVS_VSWITCHD_STOP
3185AT_CLEANUP
7257b535 3186
56879058
JS
3187AT_SETUP([ofproto-dpif - MPLS handling])
3188OVS_VSWITCHD_START([dnl
3189 add-port br0 p1 -- set Interface p1 type=dummy
3190])
53eb8cb8 3191on_exit 'kill `cat ovs-ofctl.pid`'
56879058
JS
3192
3193AT_CAPTURE_FILE([ofctl_monitor.log])
3194AT_DATA([flows.txt], [dnl
3195dl_src=40:44:44:44:00:00 actions=push_mpls:0x8847,controller
63636ee8 3196dl_src=40:44:44:44:00:01,mpls actions=push_mpls:0x8847,controller
0c1625e8 3197dl_src=40:44:44:44:00:02,mpls actions=push_mpls:0x8848,controller
56879058
JS
3198])
3199AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3200
3201dnl In this test, we push an MPLS tag to an ethernet packet.
3202AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3203
3204for i in 1 2 3; do
3205 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)'
3206done
62022172 3207OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 3208OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
56879058
JS
3209
3210AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3211OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3212mpls,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
56879058
JS
321300000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
321400000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
321500000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
321600000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
3217dnl
3218OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3219mpls,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
56879058
JS
322000000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
322100000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
322200000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
322300000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
3224dnl
3225OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3226mpls,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
56879058
JS
322700000000 50 54 00 00 00 07 40 44-44 44 00 00 88 47 00 00
322800000010 01 40 45 00 00 28 00 00-00 00 40 06 f9 7c c0 a8
322900000020 00 01 c0 a8 00 02 00 00-00 00 00 00 00 00 00 00
323000000030 00 00 50 00 00 00 00 00-00 00 00 00 00 00 00 00
3231])
3232
63636ee8
JS
3233dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3234dnl copied exactly, except for the BOS bit.
3235AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3236
3237for i in 1 2 3; do
3238 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)'
3239done
62022172 3240OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 3241OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
63636ee8
JS
3242
3243AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3244OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3245mpls,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
63636ee8
JS
324600000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
324700000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
324800000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
324900000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3250dnl
3251OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3252mpls,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
63636ee8
JS
325300000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
325400000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
325500000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
325600000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3257dnl
3258OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3259mpls,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
63636ee8
JS
326000000000 50 54 00 00 00 07 40 44-44 44 00 01 88 47 00 00
326100000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
326200000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0c1625e8
SH
326300000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3264])
3265
3266dnl In this test, we push an MPLS tag to an MPLS packet. The LSE should be
3267dnl copied exactly, except for the BOS bit. The ethertype should be updated
3268dnl to the MPLS ethertype of the MPLS push action which differs to that
3269dnl of the input packet.
3270AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3271
3272for i in 1 2 3; do
3273 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)'
3274done
62022172 3275OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c1625e8
SH
3276OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
3277
3278AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3279OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3280mplsm,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
0c1625e8
SH
328100000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
328200000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
328300000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
328400000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3285dnl
3286OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3287mplsm,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
0c1625e8
SH
328800000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
328900000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
329000000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
329100000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3292dnl
3293OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3294mplsm,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
0c1625e8
SH
329500000000 50 54 00 00 00 07 40 44-44 44 00 02 88 48 00 00
329600000010 a0 40 00 00 a1 40 00 00-00 00 00 00 00 00 00 00
329700000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
63636ee8
JS
329800000030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3299])
3300
56879058
JS
3301OVS_VSWITCHD_STOP
3302AT_CLEANUP
3303
846e159a
SH
3304AT_SETUP([ofproto-dpif - VLAN+MPLS handling])
3305OVS_VSWITCHD_START([dnl
3306 add-port br0 p1 -- set Interface p1 type=dummy
3307])
53eb8cb8 3308on_exit 'kill `cat ovs-ofctl.pid`'
846e159a
SH
3309
3310AT_CAPTURE_FILE([ofctl_monitor.log])
3311AT_DATA([flows.txt], [dnl
3312cookie=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
3313cookie=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
3314cookie=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
3315cookie=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
3316cookie=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
3317cookie=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
3318cookie=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
3319cookie=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
3320cookie=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
3321cookie=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
3322])
3323AT_CHECK([ovs-ofctl --protocols=OpenFlow12 add-flows br0 flows.txt])
3324
3325dnl Modified MPLS controller action.
3326dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3327dnl both of these in the final flow
3328AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3329
3330for i in 1 2 3; do
3331 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)'
3332done
62022172 3333OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 3334OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
3335
3336AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3337OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3338mpls,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
846e159a
SH
333900000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
334000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
334100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
334200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
334300000040 00 00 00 00
3344dnl
3345OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3346mpls,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
846e159a
SH
334700000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
334800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
334900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
335000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
335100000040 00 00 00 00
3352dnl
3353OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3354mpls,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
846e159a
SH
335500000000 50 54 00 00 00 07 40 44-44 44 54 50 81 00 20 63
335600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
335700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
335800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
335900000040 00 00 00 00
3360])
3361
3362dnl Modified MPLS controller action.
4dc94d7e 3363dnl In this test, the input packet is vlan-tagged, which should be stripped
846e159a
SH
3364dnl before we push the MPLS and VLAN tags.
3365AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3366
3367for i in 1 2 3; do
3368 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))'
3369done
62022172 3370OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 3371OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
3372
3373AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3374OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3375mpls,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
846e159a
SH
337600000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
337700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
337800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
337900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3380dnl
3381OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3382mpls,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
846e159a
SH
338300000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
338400000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
338500000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
338600000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3387dnl
3388OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3389mpls,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
846e159a
SH
339000000000 50 54 00 00 00 07 40 44-44 44 54 51 81 00 20 63
339100000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
339200000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
339300000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3394])
3395
3396dnl Modified MPLS controller action.
3397dnl In this test, we push the MPLS tag before pushing a VLAN tag, so we see
3398dnl both of these in the final flow
3399AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3400
3401for i in 1 2 3; do
3402 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)'
3403done
62022172 3404OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 3405OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
3406
3407AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3408OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3409mpls,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
846e159a
SH
341000000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
341100000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
341200000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
341300000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
341400000040 00 00 00 00
3415dnl
3416OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3417mpls,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
846e159a
SH
341800000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
341900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
342000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
342100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
342200000040 00 00 00 00
3423dnl
3424OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3425mpls,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
846e159a
SH
342600000000 52 54 00 00 00 07 40 44-44 44 54 52 81 00 20 63
342700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
342800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
342900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
343000000040 00 00 00 00
3431])
3432
3433dnl Modified MPLS controller action.
4dc94d7e 3434dnl In this test, the input packet is vlan-tagged, which should be stripped
846e159a
SH
3435dnl before we push the MPLS and VLAN tags.
3436AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3437
3438for i in 1 2 3; do
3439 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))'
3440done
62022172 3441OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 3442OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
3443
3444AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3445OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3446mpls,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
846e159a
SH
344700000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
344800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
344900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
345000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3451dnl
3452OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3453mpls,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
846e159a
SH
345400000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
345500000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
345600000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
345700000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3458dnl
3459OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3460mpls,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
846e159a
SH
346100000000 50 54 00 00 00 07 40 44-44 44 54 53 81 00 20 63
346200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
346300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
346400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3465])
3466
3467dnl Modified MPLS controller action.
3468dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3469dnl actions are reordered, so we see both of these in the final flow.
3470AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3471
3472for i in 1 2 3; do
3473 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)'
3474done
62022172 3475OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 3476OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
3477
3478AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3479OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3480mpls,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
846e159a
SH
348100000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
348200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
348300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
348400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
348500000040 00 00 00 00
3486dnl
3487OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3488mpls,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
846e159a
SH
348900000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
349000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
349100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
349200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
349300000040 00 00 00 00
3494dnl
3495OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3496mpls,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
846e159a
SH
349700000000 50 54 00 00 00 07 40 44-44 44 54 54 81 00 20 63
349800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
349900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
350000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
350100000040 00 00 00 00
3502])
3503
3504dnl Modified MPLS controller action.
4dc94d7e 3505dnl In this test, the input packet is vlan-tagged, which should be stripped
846e159a
SH
3506dnl before we push the MPLS and VLAN tags.
3507AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3508
3509for i in 1 2 3; do
3510 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))'
3511done
62022172 3512OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
28ae2f37 3513OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
846e159a
SH
3514
3515AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3516OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3517mpls,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
846e159a
SH
351800000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
351900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
352000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
352100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3522dnl
3523OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3524mpls,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
846e159a
SH
352500000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
352600000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
352700000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
352800000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3529dnl
3530OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3531mpls,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
846e159a
SH
353200000000 50 54 00 00 00 07 40 44-44 44 54 55 81 00 20 63
353300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
353400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
353500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3536])
3537
3538dnl Modified MPLS controller action.
3539dnl In this test, we push the VLAN tag before pushing a MPLS tag, but these
3540dnl actions are reordered, so we see both of these in the final flow.
3541AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3542
3543for i in 1 2 3; do
3544 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)'
3545done
62022172 3546OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 3547OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
3548
3549AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3550OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3551mpls,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
846e159a
SH
355200000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
355300000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
355400000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
355500000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
355600000040 00 00 00 00
3557dnl
3558OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3559mpls,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
846e159a
SH
356000000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
356100000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
356200000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
356300000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
356400000040 00 00 00 00
3565dnl
3566OFPT_PACKET_IN (OF1.2): total_len=68 in_port=1 (via action) data_len=68 (unbuffered)
e6d9ab56 3567mpls,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
846e159a
SH
356800000000 50 54 00 00 00 07 40 44-44 44 54 56 81 00 20 63
356900000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
357000000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
357100000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
357200000040 00 00 00 00
3573])
3574
3575dnl Modified MPLS controller action.
4dc94d7e 3576dnl In this test, the input packet is vlan-tagged, which should be stripped
846e159a
SH
3577dnl before we push the MPLS and VLAN tags.
3578AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 -m 65534 -P nxm --detach --pidfile 2> ofctl_monitor.log])
3579
3580for i in 1 2 3; do
3581 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))'
3582done
62022172 3583OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 3584OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
3585
3586AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3587OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3588mpls,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
846e159a
SH
358900000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
359000000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
359100000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
359200000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3593dnl
3594OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3595mpls,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
846e159a
SH
359600000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
359700000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
359800000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
359900000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3600dnl
3601OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3602mpls,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
846e159a
SH
360300000000 50 54 00 00 00 07 40 44-44 44 54 57 81 00 20 63
360400000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
360500000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
360600000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3607])
3608
3609dnl Modified MPLS controller action.
4dc94d7e 3610dnl In this test, the input packet is vlan-tagged, which should be stripped
846e159a
SH
3611dnl before we push the MPLS and VLAN tags.
3612AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3613
3614for i in 1 2 3; do
3615 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))'
3616done
62022172 3617OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
0c473314 3618OVS_APP_EXIT_AND_WAIT(ovs-ofctl)
846e159a
SH
3619
3620AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3621OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3622mpls,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
846e159a
SH
362300000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
362400000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
362500000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
362600000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3627dnl
3628OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3629mpls,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
846e159a
SH
363000000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
363100000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
363200000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
363300000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3634dnl
3635OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3636mpls,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
846e159a
SH
363700000000 50 54 00 00 00 07 40 44-44 44 54 58 81 00 20 63
363800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
363900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
364000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3641])
3642
3643dnl Modified MPLS controller action.
4dc94d7e 3644dnl In this test, the input packet is vlan-tagged, which should be modified
846e159a
SH
3645dnl before we push MPLS and VLAN tags.
3646AT_CHECK([ovs-ofctl --protocols=OpenFlow12 monitor br0 65534 -m -P nxm --detach --pidfile 2> ofctl_monitor.log])
3647
3648for i in 1 2 3; do
3649 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))'
3650done
62022172 3651OVS_WAIT_UNTIL([test `grep OFPT_PACKET_IN ofctl_monitor.log | wc -l` -ge 3])
846e159a
SH
3652ovs-appctl -t ovs-ofctl exit
3653
3654AT_CHECK([cat ofctl_monitor.log | ofctl_strip], [0], [dnl
3655OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3656mpls,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
846e159a
SH
365700000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
365800000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
365900000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
366000000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3661dnl
3662OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3663mpls,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
846e159a
SH
366400000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
366500000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
366600000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
366700000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3668dnl
3669OFPT_PACKET_IN (OF1.2): total_len=64 in_port=1 (via action) data_len=64 (unbuffered)
e6d9ab56 3670mpls,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
846e159a
SH
367100000000 50 54 00 00 00 07 40 44-44 44 54 59 81 00 20 63
367200000010 88 47 00 00 a1 40 45 00-00 28 00 00 00 00 40 06
367300000020 f9 7c c0 a8 00 01 c0 a8-00 02 00 00 00 00 00 00
367400000030 00 00 00 00 00 00 50 00-00 00 00 00 00 00 00 00
3675])
3676
cea4a6d7 3677AT_CHECK([ovs-appctl revalidator/purge], [0])
846e159a
SH
3678AT_CHECK([ovs-ofctl --protocols=OpenFlow12 dump-flows br0 | ofctl_strip | sort], [0], [dnl
3679 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
3680 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
3681 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
3682 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
3683 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
3684 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
3685 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
3686 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
3687 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
3688 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
3689OFPST_FLOW reply (OF1.2):
3690])
3691
3692OVS_VSWITCHD_STOP
3693AT_CLEANUP
3694
b8778a0d 3695AT_SETUP([ofproto-dpif - fragment handling - trace])
023e1e0a 3696OVS_VSWITCHD_START
72d64e33 3697ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
7257b535 3698AT_DATA([flows.txt], [dnl
12e4681c
JR
3699priority=75 tcp ip_frag=no tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:1
3700priority=75 tcp ip_frag=first tp_dst=80 actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:2
12e4681c
JR
3701priority=50 tcp ip_frag=no actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:4
3702priority=50 tcp ip_frag=first actions=move:OXM_OF_TCP_DST[[]]->OXM_OF_TCP_SRC[[]],output:5
b8778a0d 3703priority=50 tcp ip_frag=later actions=output:6
7257b535
BP
3704])
3705AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
3706
a61680c6 3707base_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"
7257b535
BP
3708no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
3709first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
3710later_flow="$base_flow,frag=later)"
3711
3712 # mode no first later
3713for tuple in \
3714 'normal 1 5 6' \
3715 'drop 1 drop drop' \
3716 'nx-match 1 2 6'
3717do
3718 set $tuple
3719 mode=$1
3720 no=$2
3721 first=$3
3722 later=$4
3723
3724 AT_CHECK([ovs-ofctl set-frags br0 $mode])
3725 for type in no first later; do
3726 eval flow=\$${type}_flow exp_output=\$$type
7fd51d39 3727 printf "\n%s\n" "----$mode $type-----"
50aa28fd 3728 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
7fd51d39
BP
3729 : > expout
3730 if test $mode = drop && test $type != no; then
3731 echo 'Packets dropped because they are IP fragments and the fragment handling mode is "drop".' >> expout
12e4681c 3732 echo "Datapath actions: $exp_output" >> expout
b8778a0d 3733 elif test $type = later; then
12e4681c
JR
3734 echo "Datapath actions: $exp_output" >> expout
3735 else
3736 echo "Datapath actions: set(tcp(src=80,dst=80)),$exp_output" >> expout
7fd51d39 3737 fi
7fd51d39 3738 AT_CHECK([grep 'IP fragments' stdout; tail -1 stdout], [0], [expout])
7257b535
BP
3739 done
3740done
023e1e0a 3741OVS_VSWITCHD_STOP
7257b535 3742AT_CLEANUP
848e8809 3743
b8778a0d
JR
3744AT_SETUP([ofproto-dpif - fragment handling - upcall])
3745OVS_VSWITCHD_START
3746ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3747AT_DATA([flows.txt], [dnl
3748priority=75 tcp ip_frag=no tp_dst=80 actions=set_field:81->tcp_dst,output:1
3749priority=75 tcp ip_frag=first tp_dst=80 actions=set_field:81->tcp_dst,output:2
3750priority=50 tcp ip_frag=no actions=set_field:81->tcp_dst,output:4
3751priority=50 tcp ip_frag=first actions=set_field:81->tcp_dst,output:5
3752priority=50 tcp ip_frag=later actions=output:6
3753])
3754AT_CHECK([ovs-ofctl replace-flows br0 flows.txt])
3755
3756base_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"
3757no_flow="$base_flow,frag=no),tcp(src=12345,dst=80)"
3758first_flow="$base_flow,frag=first),tcp(src=12345,dst=80)"
3759later_flow="$base_flow,frag=later)"
3760
3761AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
3762
3763mode=normal
3764
3765AT_CHECK([ovs-ofctl set-frags br0 $mode])
3766for type in no first later; do
3767 eval flow=\$${type}_flow
3768 printf "\n%s\n" "----$mode $type-----"
3769
3770 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3771done
3772
3773AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
1c1e46ed 3774flow-dump from non-dpdk interfaces:
b8778a0d
JR
3775recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
3776recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),5
3777recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
3778])
3779
3780mode=drop
3781
98bb4286 3782AT_CHECK([ovs-appctl revalidator/purge], [0])
b8778a0d
JR
3783AT_CHECK([ovs-ofctl set-frags br0 $mode])
3784for type in no first later; do
3785 eval flow=\$${type}_flow
3786 printf "\n%s\n" "----$mode $type-----"
3787
3788 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3789done
3790
3791AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
1c1e46ed 3792flow-dump from non-dpdk interfaces:
b8778a0d
JR
3793recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
3794recirc_id(0),in_port(90),eth_type(0x0800),ipv4(frag=first), packets:0, bytes:0, used:never, actions:drop
3795recirc_id(0),in_port(90),eth_type(0x0800),ipv4(frag=later), packets:0, bytes:0, used:never, actions:drop
3796])
3797
3798mode=nx-match
3799
98bb4286 3800AT_CHECK([ovs-appctl revalidator/purge], [0])
b8778a0d
JR
3801AT_CHECK([ovs-ofctl set-frags br0 $mode])
3802for type in no first later; do
3803 eval flow=\$${type}_flow
3804 printf "\n%s\n" "----$mode $type-----"
3805
3806 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "$flow"], [0], [stdout])
3807done
3808
3809AT_CHECK([ovs-appctl dpctl/dump-flows], [0], [dnl
1c1e46ed 3810flow-dump from non-dpdk interfaces:
b8778a0d
JR
3811recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),1
3812recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(dst=80), packets:0, bytes:0, used:never, actions:set(tcp(dst=81)),2
3813recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:0, bytes:0, used:never, actions:6
3814])
3815
3816OVS_VSWITCHD_STOP
3817AT_CLEANUP
3818
3819AT_SETUP([ofproto-dpif - fragment handling - actions])
3820OVS_VSWITCHD_START
3821ADD_OF_PORTS([br0], [1], [2], [3], [4], [5], [6], [90])
3822
3823AT_CHECK([ovs-ofctl add-flow br0 "tcp,ip_frag=later actions=move:OXM_OF_TCP_DST[[0..7]]->OXM_OF_TCP_SRC[[0..7]],output:1"], [1], [], [stderr])
3824AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3825source field tcp_dst lacks correct prerequisites
3826ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3827])
3828
3829AT_CHECK([ovs-ofctl -O OpenFlow15 add-flow br0 "tcp,ip_frag=later actions=move:OXM_OF_PKT_REG0[[0..7]]->OXM_OF_TCP_SRC[[0..7]],output:1"], [1], [], [stderr])
3830AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3831destination field tcp_src lacks correct prerequisites
3832ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3833])
3834
3835AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=set_field:8888->udp_src,output:1"], [1], [], [stderr])
3836AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3837set_field udp_src lacks correct prerequisities
3838ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3839])
3840
3841AT_CHECK([ovs-ofctl add-flow br0 "udp,ip_frag=later actions=load:8888->NXM_OF_UDP_DST[[]],output:1"], [1], [], [stderr])
3842AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3843set_field udp_dst lacks correct prerequisities
3844ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3845])
3846
3847AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_src,output:1"], [1], [], [stderr])
3848AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3849set_field sctp_src lacks correct prerequisities
3850ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3851])
3852
3853AT_CHECK([ovs-ofctl add-flow br0 "sctp,ip_frag=later actions=set_field:8888->sctp_dst,output:1"], [1], [], [stderr])
3854AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3855set_field sctp_dst lacks correct prerequisities
3856ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3857])
3858
3859AT_CHECK([ovs-ofctl add-flow br0 "tcp,ip_frag=later actions=learn(table=1,hard_timeout=60,eth_type=0x800,nw_proto=6,NXM_OF_IP_SRC[[]]=NXM_OF_IP_DST[[]],NXM_OF_TCP_SRC[[]]=NXM_OF_TCP_DST[[]],output:NXM_NX_REG0[[0..15]]),output:1"], [1], [], [stderr])
3860AT_CHECK([tail -2 stderr | sed 's/^.*|WARN|//'], [0], [dnl
3861source field tcp_dst lacks correct prerequisites
3862ovs-ofctl: actions are invalid with specified match (OFPBAC_MATCH_INCONSISTENT)
3863])
3864
3865AT_DATA([flows.txt], [dnl
3866priority=75 tcp actions=load:42->OXM_OF_TCP_SRC[[0..7]],output:1
3867])
3868AT_CHECK([ovs-ofctl -O OpenFlow12 replace-flows br0 flows.txt])
3869
3870AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
3871
3872mode=normal
3873
3874AT_CHECK([ovs-ofctl set-frags br0 $mode])
3875for frag in 4000 6000 6008 4010; do
3876 printf "\n%s\n" "----$mode $frag-----"
3877
3878 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 003c 2e24 $frag 40 06 465d ac11370d ac11370b 828b 0016 751e267b 00000000 a002 16d0 1736 0000 02 04 05 b4 04 02 08 0a 2d 25 08 5f 00 00 00 00 01 03 03 07"])
3879done
3880
3881AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
1c1e46ed 3882flow-dump from non-dpdk interfaces:
b8778a0d
JR
3883recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=33419), packets:0, bytes:0, used:never, actions:set(tcp(src=33322)),1
3884recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=33419), packets:0, bytes:0, used:never, actions:set(tcp(src=33322)),1
3885recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:74, used:0.001s, actions:1
3886])
3887
98bb4286 3888AT_CHECK([ovs-appctl revalidator/purge], [0])
b8778a0d
JR
3889AT_CHECK([ovs-ofctl set-frags br0 $mode])
3890for frag in 4000 6000 6008 4010; do
3891 printf "\n%s\n" "----$mode $frag truncated transport header -----"
3892
3893 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0018 2e24 $frag 40 06 465d ac11370d ac11370b 828b 0016"])
3894done
3895
3896AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
1c1e46ed 3897flow-dump from non-dpdk interfaces:
b8778a0d
JR
3898recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=0), packets:0, bytes:0, used:never, actions:set(tcp(src=42)),1
3899recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=0), packets:0, bytes:0, used:never, actions:set(tcp(src=42)),1
3900recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:60, used:0.001s, actions:1
3901])
3902
98bb4286 3903AT_CHECK([ovs-appctl revalidator/purge], [0])
b8778a0d
JR
3904AT_CHECK([ovs-ofctl set-frags br0 $mode])
3905for frag in 4000 6000 6001 4002; do
3906 printf "\n%s\n" "----$mode $frag missing transport header-----"
3907
3908 AT_CHECK([ovs-appctl netdev-dummy/receive p90 "0021853763af 0026b98cb0f9 0800 4500 0014 2e24 $frag 40 06 465d ac11370d ac11370b"])
3909done
3910
3911AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
1c1e46ed 3912flow-dump from non-dpdk interfaces:
b8778a0d
JR
3913recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=no),tcp(src=0), packets:0, bytes:0, used:never, actions:set(tcp(src=42)),1
3914recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=0), packets:0, bytes:0, used:never, actions:set(tcp(src=42)),1
3915recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), packets:1, bytes:60, used:0.001s, actions:1
3916])
3917
3918OVS_VSWITCHD_STOP
3919AT_CLEANUP
3920
848e8809
EJ
3921AT_SETUP([ofproto-dpif - exit])
3922OVS_VSWITCHD_START
f7b8e494 3923ADD_OF_PORTS([br0], [1], [2], [3], [10], [11], [12], [13], [14])
848e8809
EJ
3924AT_DATA([flows.txt], [dnl
3925in_port=1 actions=output:10,exit,output:11
3926in_port=2 actions=output:12,resubmit:1,output:12
3927in_port=3 actions=output:13,resubmit:2,output:14
3928])
3929AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
50aa28fd 3930AT_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])
848e8809
EJ
3931AT_CHECK([tail -1 stdout], [0],
3932 [Datapath actions: 10
3933])
50aa28fd 3934AT_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])
848e8809
EJ
3935AT_CHECK([tail -1 stdout], [0],
3936 [Datapath actions: 12,10
3937])
50aa28fd 3938AT_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])
848e8809
EJ
3939AT_CHECK([tail -1 stdout], [0],
3940 [Datapath actions: 13,12,10
3941])
3942OVS_VSWITCHD_STOP
3943AT_CLEANUP
c06bba01
JP
3944
3945
3946AT_SETUP([ofproto-dpif - mirroring, select_all])
432fca23
BP
3947OVS_VSWITCHD_START
3948ADD_OF_PORTS([br0], 1, 2, 3)
3949ovs-vsctl \
c06bba01
JP
3950 set Bridge br0 mirrors=@m --\
3951 --id=@p3 get Port p3 --\
432fca23 3952 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 3953
c06bba01
JP
3954AT_DATA([flows.txt], [dnl
3955in_port=1 actions=output:2
3956in_port=2 actions=output:1
3957])
3958AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3959
247527db 3960flow="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)"
50aa28fd 3961AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 3962AT_CHECK_UNQUOTED([tail -1 stdout], [0],
7efbc3b7 3963 [Datapath actions: 3,2
c06bba01
JP
3964])
3965
247527db 3966flow="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)"
50aa28fd 3967AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 3968AT_CHECK_UNQUOTED([tail -1 stdout], [0],
7efbc3b7 3969 [Datapath actions: 3,1
c06bba01
JP
3970])
3971
3972OVS_VSWITCHD_STOP
3973AT_CLEANUP
3974
3975
3976AT_SETUP([ofproto-dpif - mirroring, select_src])
432fca23
BP
3977OVS_VSWITCHD_START
3978ADD_OF_PORTS([br0], 1, 2, 3)
3979ovs-vsctl \
c06bba01
JP
3980 set Bridge br0 mirrors=@m --\
3981 --id=@p1 get Port p1 -- --id=@p3 get Port p3 --\
432fca23 3982 --id=@m create Mirror name=mymirror select_src_port=@p1 output_port=@p3
c06bba01 3983
c06bba01
JP
3984AT_DATA([flows.txt], [dnl
3985in_port=1 actions=output:2
3986in_port=2 actions=output:1
3987])
3988AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
3989
247527db 3990flow="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)"
50aa28fd 3991AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 3992AT_CHECK_UNQUOTED([tail -1 stdout], [0],
7efbc3b7 3993 [Datapath actions: 3,2
c06bba01
JP
3994])
3995
247527db 3996flow="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)"
50aa28fd 3997AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 3998AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 3999 [Datapath actions: 1
c06bba01
JP
4000])
4001OVS_VSWITCHD_STOP
4002AT_CLEANUP
4003
33158a18 4004AT_SETUP([ofproto-dpif - mirroring, OFPP_NONE ingress port])
432fca23
BP
4005OVS_VSWITCHD_START
4006ADD_OF_PORTS([br0], 1, 2)
4007ovs-vsctl \
33158a18
JP
4008 set Bridge br0 mirrors=@m --\
4009 --id=@p2 get Port p2 --\
432fca23 4010 --id=@m create Mirror name=mymirror select_all=true output_port=@p2
33158a18 4011
33158a18
JP
4012AT_CHECK([ovs-ofctl add-flow br0 action=output:1])
4013
4014# "in_port" defaults to OFPP_NONE if it's not specified.
72d64e33 4015flow="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"
33158a18
JP
4016AT_CHECK([ovs-appctl ofproto/trace br0 "$flow"], [0], [stdout])
4017AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 4018 [Datapath actions: 1,2
33158a18
JP
4019])
4020
4021OVS_VSWITCHD_STOP
4022AT_CLEANUP
4023
c06bba01
JP
4024
4025AT_SETUP([ofproto-dpif - mirroring, select_dst])
432fca23
BP
4026OVS_VSWITCHD_START
4027ADD_OF_PORTS([br0], 1, 2, 3)
4028ovs-vsctl \
c06bba01
JP
4029 set Bridge br0 mirrors=@m --\
4030 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 4031 --id=@m create Mirror name=mymirror select_dst_port=@p2 output_port=@p3
c06bba01 4032
c06bba01
JP
4033AT_DATA([flows.txt], [dnl
4034in_port=1 actions=output:2
4035in_port=2 actions=output:1
4036])
4037AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4038
247527db 4039flow="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)"
50aa28fd 4040AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 4041AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 4042 [Datapath actions: 2,3
c06bba01
JP
4043])
4044
247527db 4045flow="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)"
50aa28fd 4046AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 4047AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 4048 [Datapath actions: 1
c06bba01
JP
4049])
4050
4051OVS_VSWITCHD_STOP
4052AT_CLEANUP
4053
4054
4055AT_SETUP([ofproto-dpif - mirroring, select_vlan])
432fca23
BP
4056OVS_VSWITCHD_START
4057ADD_OF_PORTS([br0], 1, 2, 3)
4058ovs-vsctl \
c06bba01
JP
4059 set Bridge br0 mirrors=@m --\
4060 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
432fca23 4061 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
c06bba01 4062
c06bba01
JP
4063AT_DATA([flows.txt], [dnl
4064in_port=1, actions=output:2
4065])
4066AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4067
247527db 4068flow="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)"
50aa28fd 4069AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 4070AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 4071 [Datapath actions: 2
c06bba01
JP
4072])
4073
247527db 4074flow="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))"
50aa28fd 4075AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 4076AT_CHECK_UNQUOTED([tail -1 stdout], [0],
247527db 4077 [Datapath actions: 2
c06bba01
JP
4078])
4079
247527db 4080flow="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))"
50aa28fd 4081AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 4082AT_CHECK_UNQUOTED([tail -1 stdout], [0],
7efbc3b7 4083 [Datapath actions: 3,2
c06bba01
JP
4084])
4085
4086OVS_VSWITCHD_STOP
4087AT_CLEANUP
4088
4089
4090AT_SETUP([ofproto-dpif - mirroring, output_port])
432fca23
BP
4091OVS_VSWITCHD_START
4092ADD_OF_PORTS([br0], 1, 2, 3)
4093ovs-vsctl \
c06bba01
JP
4094 set Bridge br0 mirrors=@m --\
4095 --id=@p3 get Port p3 --\
432fca23 4096 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
c06bba01 4097
c06bba01
JP
4098AT_DATA([flows.txt], [dnl
4099in_port=1 actions=mod_vlan_vid:17,output:2
4100in_port=2 actions=output:1
4101])
4102AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4103
247527db 4104flow="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)"
50aa28fd 4105AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 4106AT_CHECK_UNQUOTED([tail -1 stdout], [0],
7efbc3b7 4107 [Datapath actions: 3,push_vlan(vid=17,pcp=0),2
c06bba01
JP
4108])
4109
247527db 4110flow="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)"
50aa28fd 4111AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01 4112AT_CHECK_UNQUOTED([tail -1 stdout], [0],
7efbc3b7 4113 [Datapath actions: 3,1
c06bba01
JP
4114])
4115
4116OVS_VSWITCHD_STOP
4117AT_CLEANUP
4118
c06bba01 4119AT_SETUP([ofproto-dpif - mirroring, output_vlan])
432fca23
BP
4120OVS_VSWITCHD_START
4121ADD_OF_PORTS([br0], 1, 2)
4122ovs-vsctl \
c06bba01 4123 set Bridge br0 mirrors=@m --\
432fca23 4124 --id=@m create Mirror name=mymirror select_all=true output_vlan=12
c06bba01 4125
c06bba01
JP
4126AT_DATA([flows.txt], [dnl
4127in_port=1 actions=output:2
4128in_port=2 actions=mod_vlan_vid:17,output:1
4129])
4130AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4131
247527db 4132flow="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)"
50aa28fd 4133AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
4134actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4135
e44768b7 4136expected="2,push_vlan(vid=12,pcp=0),1,2,100"
247527db 4137AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 4138mv stdout expout
247527db 4139AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01 4140
247527db 4141flow="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)"
50aa28fd 4142AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow"], [0], [stdout])
c06bba01
JP
4143actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4144
e44768b7 4145expected="push_vlan(vid=17,pcp=0),1,pop_vlan,push_vlan(vid=12,pcp=0),1,2,100"
247527db 4146AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected"], [0], [stdout])
c06bba01 4147mv stdout expout
247527db 4148AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual"], [0], [expout])
c06bba01
JP
4149
4150OVS_VSWITCHD_STOP
4151AT_CLEANUP
b44a10b7 4152
29bae541
BP
4153# This test verifies that mirror state is preserved across recirculation.
4154#
4155# Otherwise, post-recirculation the ingress and the output to port 4
4156# would cause the packet to be mirrored to port 3 a second time.
4157AT_SETUP([ofproto-dpif - mirroring with recirculation])
4158OVS_VSWITCHD_START
4159ADD_OF_PORTS([br0], 1, 2, 3, 4)
4160ovs-vsctl \
4161 set Bridge br0 mirrors=@m --\
4162 --id=@p3 get Port p3 --\
4163 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
4164
4165AT_DATA([flows.txt], [dnl
4166in_port=1 actions=2,debug_recirc,4
4167])
4168AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4169
4170flow="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)"
4171AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow" -generate], [0], [stdout])
4172AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 3,2,recirc(0x1)
4173])
4174AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$flow,recirc_id(1)" -generate], [0], [stdout])
4175AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 4
4176])
4177
4178OVS_VSWITCHD_STOP
4179AT_CLEANUP
4180
22bb3cbc
AW
4181# Two testcases below are for the ofproto/trace command
4182# The first one tests all correct syntax:
4183# ofproto/trace [dp_name] odp_flow [-generate|packet]
4184# ofproto/trace br_name br_flow [-generate|packet]
4185AT_SETUP([ofproto-dpif - ofproto/trace command 1])
4186OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
4187ADD_OF_PORTS([br0], 1, 2, 3)
4188
4189AT_DATA([flows.txt], [dnl
4190in_port=1 actions=output:2
4191in_port=2 actions=output:1
4192])
4193AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4194
e063a73a 4195odp_flow="in_port(p1)"
22bb3cbc 4196br_flow="in_port=1"
0a37839c
GS
4197# Test command: ofproto/trace odp_flow with in_port as a name.
4198AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4199AT_CHECK([tail -1 stdout], [0], [dnl
4200Datapath actions: 2
4201])
4202
4203odp_flow="in_port(1)"
22bb3cbc
AW
4204# Test command: ofproto/trace odp_flow
4205AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4206AT_CHECK([tail -1 stdout], [0], [dnl
4207Datapath actions: 2
4208])
4209
4210# Test command: ofproto/trace dp_name odp_flow
4211AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$odp_flow"], [0], [stdout])
4212AT_CHECK([tail -1 stdout], [0], [dnl
4213Datapath actions: 2
4214])
4215# Test commmand: ofproto/trace br_name br_flow
4216AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
4217AT_CHECK([tail -1 stdout], [0], [dnl
4218Datapath actions: 2
4219])
4220
4221# Delete the inserted flows
4222AT_CHECK([ovs-ofctl del-flows br0 "in_port=1"], [0], [stdout])
4223AT_CHECK([ovs-ofctl del-flows br0 "in_port=2"], [0], [stdout])
4224
78c9486d 4225# This section below tests the [-generate] option
22bb3cbc 4226odp_flow="in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff)"
78c9486d 4227br_flow="arp,in_port=3,vlan_tci=0x0000,dl_src=50:54:00:00:00:05,dl_dst=ff:ff:ff:ff:ff:ff"
22bb3cbc
AW
4228
4229# Test command: ofproto/trace odp_flow
4230AT_CHECK([ovs-appctl ofproto/trace "$odp_flow"], [0], [stdout])
4231# Check for no MAC learning entry
4232AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4233 port VLAN MAC Age
4234])
4235
4236# Test command: ofproto/trace br_name br_flow
4237AT_CHECK([ovs-appctl ofproto/trace br0 "$br_flow"], [0], [stdout])
4238# Check for no MAC learning entry
4239AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4240 port VLAN MAC Age
4241])
4242
4243# Test command: ofproto/trace odp_flow -generate
4244AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" -generate], [0], [stdout])
4245# Check for the MAC learning entry
4246AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4247 port VLAN MAC Age
4248 3 0 50:54:00:00:00:05 ?
4249])
4250
4251# Test command: ofproto/trace dp_name odp_flow -generate
4252AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4253 "in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05)" \
4254 -generate], [0], [stdout])
4255# Check for both MAC learning entries
4256AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4257 port VLAN MAC Age
4258 3 0 50:54:00:00:00:05 ?
4259 1 0 50:54:00:00:00:06 ?
4260])
4261
4262# Test command: ofproto/trace br_name br_flow -generate
4263AT_CHECK([ovs-appctl ofproto/trace br0 \
4264 "in_port=2,dl_src=50:54:00:00:00:07,dl_dst=50:54:00:00:00:06" \
4265 -generate], [0], [stdout])
4266# Check for both MAC learning entries.
4267AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
4268 port VLAN MAC Age
4269 3 0 50:54:00:00:00:05 ?
4270 1 0 50:54:00:00:00:06 ?
4271 2 0 50:54:00:00:00:07 ?
4272])
4273
4274# This section beflow tests the [packet] option
4275# The ovs-tcpundump of packets between port1 and port2
4276pkt1to2="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
4277pkt2to1="50540000000150540000000208064500001C000100004001F98CC0A80002C0A800010800F7FF00000000"
4278
4279# Construct the MAC learning table
4280AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4281 "in_port(1),eth(src=50:54:00:00:00:01,dst=ff:ff:ff:ff:ff:ff)" \
4282 -generate], [0], [stdout])
4283
4284# Construct the MAC learning table
4285AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4286 "in_port(2),eth(src=50:54:00:00:00:02,dst=ff:ff:ff:ff:ff:ff)" \
4287 -generate], [0], [stdout])
4288
4289# Test command: ofproto/trace odp_flow packet
4290AT_CHECK([ovs-appctl ofproto/trace \
4291 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
4292AT_CHECK([tail -1 stdout], [0], [dnl
4293Datapath actions: 2
4294])
b6f00895 4295AT_CHECK([head -n 2 stdout], [0], [dnl
22bb3cbc 4296Bridge: br0
78c9486d 4297Flow: pkt_mark=0x2,skb_priority=0x1,arp,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_op=0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
22bb3cbc
AW
4298])
4299
4300# Test command: ofproto/trace dp_name odp_flow packet
4301AT_CHECK([ovs-appctl ofproto/trace ovs-dummy \
4302 "in_port(1),skb_priority(1),skb_mark(2)" "$pkt1to2"], [0], [stdout])
4303AT_CHECK([tail -1 stdout], [0], [dnl
4304Datapath actions: 2
4305])
b6f00895 4306AT_CHECK([head -n 2 stdout], [0], [dnl
22bb3cbc 4307Bridge: br0
78c9486d 4308Flow: pkt_mark=0x2,skb_priority=0x1,arp,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_op=0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
22bb3cbc
AW
4309])
4310
4311# Test command: ofproto/trace br_name br_flow packet
4312AT_CHECK([ovs-appctl ofproto/trace br0 \
1362e248 4313 "in_port=2,skb_priority=2,pkt_mark=1" "$pkt2to1"], [0], [stdout],[stderr])
22bb3cbc 4314AT_CHECK([tail -1 stdout], [0], [dnl
ed2e7245 4315Datapath actions: 1
22bb3cbc
AW
4316])
4317AT_CHECK([head -n 2 stdout], [0], [dnl
b6f00895 4318Bridge: br0
78c9486d 4319Flow: pkt_mark=0x1,skb_priority=0x2,arp,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_op=0,arp_sha=00:00:00:00:00:00,arp_tha=00:00:00:00:00:00
22bb3cbc
AW
4320])
4321
4322OVS_VSWITCHD_STOP
4323AT_CLEANUP
4324
4325# The second test tests the corner cases
4326AT_SETUP([ofproto-dpif - ofproto/trace command 2])
4327OVS_VSWITCHD_START
4328ADD_OF_PORTS([br0], 1, 2)
4329
4330# Define flows
4331odp_flow="in_port(1),eth(src=50:54:00:00:00:01,dst=50:54:00:00:00:02)"
4332br_flow="in_port=1,dl_src=50:54:00:00:00:01,dl_dst=50:54:00:00:00:02"
4333# Define options
4334generate="-generate"
4335pkt="50540000000250540000000108064500001C000100004001F98CC0A80001C0A800020800F7FF00000000"
4336
4337# Test incorrect command: ofproto/trace wrong_name odp_flow [-generate|packet]
4338m4_foreach(
4339[option],
4340[[],
4341["$generate"],
4342["$pkt"]],
4343[AT_CHECK([ovs-appctl ofproto/trace wrong_name "$odp_flow" option],
4344 [2], [], [stderr])
4345AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 4346Cannot find the datapath
22bb3cbc
AW
4347ovs-appctl: ovs-vswitchd: server returned an error
4348])])
4349
4350# Test incorrect command: ofproto/trace empty_string odp_flow [-generate|packet]
4351m4_foreach(
4352[option],
4353[[],
4354["$generate"],
4355["$pkt"]],
4356[AT_CHECK([ovs-appctl ofproto/trace "" "$odp_flow" option],
4357 [2], [], [stderr])
4358AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 4359Cannot find the datapath
22bb3cbc
AW
4360ovs-appctl: ovs-vswitchd: server returned an error
4361])])
4362
4363# Test incorrect command: ofproto/trace nonexist_dp_name odp_flow [-generate|packet]
4364m4_foreach(
4365[option],
4366[[],
4367["$generate"],
4368["$pkt"]],
4369[AT_CHECK([ovs-appctl ofproto/trace ovs-system "$odp_flow" option],
4370 [2], [], [stderr])
4371AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 4372Cannot find the datapath
22bb3cbc
AW
4373ovs-appctl: ovs-vswitchd: server returned an error
4374])])
4375
4376# Test incorrect command: ofproto/trace br_name odp_flow [-generate|packet]
4377m4_foreach(
4378[option],
4379[[],
4380["$generate"],
4381["$pkt"]],
4382[AT_CHECK([ovs-appctl ofproto/trace br0 "$odp_flow" option],
4383 [2], [], [stderr])
4384AT_CHECK([tail -2 stderr], [0], [dnl
0a37839c 4385Cannot find the datapath
22bb3cbc
AW
4386ovs-appctl: ovs-vswitchd: server returned an error
4387])])
4388
4389# Test incorrect command: ofproto/trace dp_name br_flow [-generate|packet]
4390m4_foreach(
4391[option],
4392[[],
4393["$generate"],
4394["$pkt"]],
4395[AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "$br_flow" option],
4396 [2], [], [stderr])
4397AT_CHECK([tail -2 stderr], [0], [dnl
4398Unknown bridge name
4399ovs-appctl: ovs-vswitchd: server returned an error
4400])])
4401
4402# Test incorrect command: ofproto/trace br_flow [-generate|packet]
4403m4_foreach(
4404[option],
4405[[],
4406["$generate"],
4407["$pkt"]],
4408[AT_CHECK([ovs-appctl ofproto/trace "$br_flow" option],
4409 [2], [], [stderr])
4410AT_CHECK([tail -2 stderr], [0], [dnl
4411Must specify bridge name
4412ovs-appctl: ovs-vswitchd: server returned an error
4413])])
4414
4415# Test incorrect command: ofproto/trace dp_name odp_flow garbage_option
4416AT_CHECK([ovs-appctl ofproto/trace \
4417 ovs-dummy "$odp_flow" garbage_option],
4418 [2], [stdout],[stderr])
4419AT_CHECK([tail -2 stderr], [0], [dnl
4420Trailing garbage in packet data
4421ovs-appctl: ovs-vswitchd: server returned an error
4422])
4423
4424# Test incorrect command: ofproto/trace with 4 arguments
4425AT_CHECK([ovs-appctl ofproto/trace \
4426 arg1, arg2, arg3, arg4], [2], [stdout],[stderr])
4427AT_CHECK([tail -2 stderr], [0], [dnl
4428"ofproto/trace" command takes at most 3 arguments
4429ovs-appctl: ovs-vswitchd: server returned an error
4430])
4431
4432# Test incorrect command: ofproto/trace with 0 argument
4433AT_CHECK([ovs-appctl ofproto/trace ], [2], [stdout],[stderr])
4434AT_CHECK([tail -2 stderr], [0], [dnl
4435"ofproto/trace" command requires at least 1 arguments
4436ovs-appctl: ovs-vswitchd: server returned an error
4437])
4438
4439OVS_VSWITCHD_STOP
4440AT_CLEANUP
4441
b6ec827f
JS
4442# The third test checks that the output of "ovs-dpctl -m" is valid to trace.
4443AT_SETUP([ofproto-dpif - ofproto/trace from dpctl output])
4444OVS_VSWITCHD_START([dnl
4445 set Open_vSwitch . other_config:max-idle=10000 \
4446 -- add-port br0 p1 -- set Interface p1 type=dummy])
4447
4448AT_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)'])
4449ovs-appctl revalidator/wait
4450AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows1.txt])
4451
4452odp_flow=`cat dp_flows1.txt`
4453AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
4454Bridge: br0
4455Flow: <cleared>
4456No match, packets dropped because OFPPC_NO_PACKET_IN is set on in_port.
4457
4458Rule: table=254 cookie=0 priority=0,reg0=0x2
4459OpenFlow actions=drop
4460
4461Final flow: <cleared>
4462Megaflow: <cleared>
4463Datapath actions: drop
4464])
4465
4466dnl Now, try again without megaflows:
4467ovs-appctl upcall/disable-megaflows
4468
4469AT_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)'])
4470ovs-appctl revalidator/wait
4471AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sed 's/, packets.*$//' > dp_flows2.txt])
4472
4473odp_flow=`cat dp_flows2.txt`
4474AT_CHECK([ovs-appctl ofproto/trace "$odp_flow" | sed 's/\([[Ff]]low:\).*/\1 <cleared>/'], [0], [dnl
4475Bridge: br0
4476Flow: <cleared>
4477No match, packets dropped because OFPPC_NO_PACKET_IN is set on in_port.
4478
4479Rule: table=254 cookie=0 priority=0,reg0=0x2
4480OpenFlow actions=drop
4481
4482Final flow: <cleared>
4483Megaflow: <cleared>
4484Datapath actions: drop
4485])
4486
4487OVS_VSWITCHD_STOP
4488AT_CLEANUP
4489
aee0979b
BP
4490AT_SETUP([ofproto-dpif - ofproto/trace-packet-out])
4491OVS_VSWITCHD_START
4492ADD_OF_PORTS([br0], 1, 2, 3)
4493
4494AT_DATA([flows.txt], [dnl
4495in_port=1 actions=output:2
4496in_port=2 actions=output:1
4497])
4498AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
4499
4500AT_CHECK([ovs-appctl ofproto/trace-packet-out br0 in_port=1 'mod_vlan_vid:123,resubmit(,0)'], [0], [stdout])
4501AT_CHECK([tail -1 stdout], [0], [dnl
4502Datapath actions: push_vlan(vid=123,pcp=0),2
4503])
4504
4505OVS_VSWITCHD_STOP
4506AT_CLEANUP
4507
4508
b44a10b7
BP
4509m4_define([OFPROTO_TRACE],
4510 [flow="$2"
4511 AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
4512 actual=`tail -1 stdout | sed 's/Datapath actions: //'`
4513 expected="$4"
4514 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$expected" $5],
4515 [0], [stdout])
4516 mv stdout expout
4517 AT_CHECK([ovs-dpctl normalize-actions "$flow" "$actual" $5],
4518 [0], [expout])])
4519
4520AT_SETUP([ofproto-dpif - MAC learning])
432fca23
BP
4521OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone])
4522ADD_OF_PORTS([br0], 1, 2, 3)
b44a10b7 4523
b44a10b7
BP
4524arp='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)'
4525
4526# Trace an ARP packet arriving on p3, to create a MAC learning entry.
4527OFPROTO_TRACE(
50aa28fd 4528 [ovs-dummy],
247527db 4529 [in_port(3),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 4530 [-generate],
e44768b7 4531 [1,2,100])
b44a10b7
BP
4532
4533# Check for the MAC learning entry.
83664f72 4534AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 4535 port VLAN MAC Age
247527db 4536 3 0 50:54:00:00:00:05 ?
b44a10b7
BP
4537])
4538
4539# Trace a packet arrival destined for the learned MAC.
4540# (This will also learn a MAC.)
4541OFPROTO_TRACE(
50aa28fd 4542 [ovs-dummy],
247527db 4543 [in_port(1),eth(src=50:54:00:00:00:06,dst=50:54:00:00:00:05),$arp],
b44a10b7 4544 [-generate],
247527db 4545 [3])
b44a10b7
BP
4546
4547# Check for both MAC learning entries.
83664f72 4548AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 4549 port VLAN MAC Age
247527db
BP
4550 3 0 50:54:00:00:00:05 ?
4551 1 0 50:54:00:00:00:06 ?
b44a10b7
BP
4552])
4553
4554# Trace a packet arrival that updates the first learned MAC entry.
4555OFPROTO_TRACE(
50aa28fd 4556 [ovs-dummy],
247527db 4557 [in_port(2),eth(src=50:54:00:00:00:05,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 4558 [-generate],
e44768b7 4559 [1,3,100])
b44a10b7
BP
4560
4561# Check that the MAC learning entry was updated.
83664f72 4562AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 4563 port VLAN MAC Age
247527db
BP
4564 1 0 50:54:00:00:00:06 ?
4565 2 0 50:54:00:00:00:05 ?
b44a10b7
BP
4566])
4567
4568# Add another bridge.
4569AT_CHECK(
4570 [ovs-vsctl \
4571 -- add-br br1 \
ad28062f
BP
4572 -- set bridge br1 datapath-type=dummy])
4573ADD_OF_PORTS([br1], 4, 5)
b44a10b7
BP
4574
4575# Trace some packet arrivals in br1 to create MAC learning entries there too.
4576OFPROTO_TRACE(
50aa28fd 4577 [ovs-dummy],
247527db 4578 [in_port(4),eth(src=50:54:00:00:00:06,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 4579 [-generate],
e44768b7 4580 [5,101])
b44a10b7 4581OFPROTO_TRACE(
50aa28fd 4582 [ovs-dummy],
247527db 4583 [in_port(5),eth(src=50:54:00:00:00:07,dst=ff:ff:ff:ff:ff:ff),$arp],
b44a10b7 4584 [-generate],
e44768b7 4585 [4,101])
b44a10b7
BP
4586
4587# Check that the MAC learning entries were added.
83664f72 4588AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 4589 port VLAN MAC Age
247527db
BP
4590 4 0 50:54:00:00:00:06 ?
4591 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
4592])
4593
4594# Delete port p1 and see that its MAC learning entry disappeared, and
4595# that the MAC learning entry for the same MAC was also deleted from br1.
4596AT_CHECK([ovs-vsctl del-port p1])
83664f72 4597AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 4598 port VLAN MAC Age
247527db 4599 2 0 50:54:00:00:00:05 ?
b44a10b7 4600])
83664f72 4601AT_CHECK_UNQUOTED([ovs-appctl fdb/show br1 | sed 's/[[0-9]]\{1,\}$/?/'], [0], [dnl
b44a10b7 4602 port VLAN MAC Age
247527db 4603 5 0 50:54:00:00:00:07 ?
b44a10b7
BP
4604])
4605
4606OVS_VSWITCHD_STOP
4607AT_CLEANUP
17f7f7e0 4608
c4069512
BP
4609AT_SETUP([ofproto-dpif - MAC table overflow])
4610OVS_VSWITCHD_START(
ad28062f
BP
4611 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
4612ADD_OF_PORTS([br0], 1, 2, 3)
c4069512
BP
4613
4614arp='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)'
4615
4616AT_CHECK([ovs-appctl time/stop])
4617
4618# Trace 10 ARP packets arriving on p3, to create MAC learning entries.
4619for i in 0 1 2 3 4 5 6 7 8 9; do
4620 OFPROTO_TRACE(
50aa28fd 4621 [ovs-dummy],
c4069512
BP
4622 [in_port(3),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp],
4623 [-generate],
4624 [1,2,100])
4625 ovs-appctl time/warp 1000
4626done
4627
4628# Check for the MAC learning entries.
4629AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4630 [0], [dnl
4631 3 0 50:54:00:00:00:00
4632 3 0 50:54:00:00:00:01
4633 3 0 50:54:00:00:00:02
4634 3 0 50:54:00:00:00:03
4635 3 0 50:54:00:00:00:04
4636 3 0 50:54:00:00:00:05
4637 3 0 50:54:00:00:00:06
4638 3 0 50:54:00:00:00:07
4639 3 0 50:54:00:00:00:08
4640 3 0 50:54:00:00:00:09
4641 port VLAN MAC Age
4642])
4643
4644# Trace another ARP packet on another MAC.
4645OFPROTO_TRACE(
50aa28fd 4646 [ovs-dummy],
c4069512
BP
4647 [in_port(3),eth(src=50:54:00:00:00:10,dst=ff:ff:ff:ff:ff:ff),$arp],
4648 [-generate],
4649 [1,2,100])
4650
4651# Check that the new one chased the oldest one out of the table.
4652AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/[[0-9]]\{1,\}$/?/' | sort],
4653 [0], [dnl
4654 3 0 50:54:00:00:00:01 ?
4655 3 0 50:54:00:00:00:02 ?
4656 3 0 50:54:00:00:00:03 ?
4657 3 0 50:54:00:00:00:04 ?
4658 3 0 50:54:00:00:00:05 ?
4659 3 0 50:54:00:00:00:06 ?
4660 3 0 50:54:00:00:00:07 ?
4661 3 0 50:54:00:00:00:08 ?
4662 3 0 50:54:00:00:00:09 ?
4663 3 0 50:54:00:00:00:10 ?
4664 port VLAN MAC Age
4665])
4666OVS_VSWITCHD_STOP
4667AT_CLEANUP
4668
9d078ec2
BP
4669AT_SETUP([ofproto-dpif - MAC table overflow fairness])
4670OVS_VSWITCHD_START(
4671 [set bridge br0 fail-mode=standalone other-config:mac-table-size=10])
4672ADD_OF_PORTS([br0], 1, 2, 3, 4, 5, 6)
4673
4674arp='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)'
4675
4676AT_CHECK([ovs-appctl time/stop])
4677
4678# Trace packets with 2 different source MACs arriving on each of the 5
4679# ports, filling up the 10-entry learning table.
4680for i in 0 1 2 3 4 5 6 7 8 9; do
4681 p=`expr $i / 2 + 1`
4682 ovs-appctl ofproto/trace ovs-dummy "in_port($p),eth(src=50:54:00:00:00:0$i,dst=ff:ff:ff:ff:ff:ff),$arp" -generate
4683 ovs-appctl time/warp 1000
4684done
4685
4686# Check for the MAC learning entries.
4687AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4688 [0], [dnl
4689 1 0 50:54:00:00:00:00
4690 1 0 50:54:00:00:00:01
4691 2 0 50:54:00:00:00:02
4692 2 0 50:54:00:00:00:03
4693 3 0 50:54:00:00:00:04
4694 3 0 50:54:00:00:00:05
4695 4 0 50:54:00:00:00:06
4696 4 0 50:54:00:00:00:07
4697 5 0 50:54:00:00:00:08
4698 5 0 50:54:00:00:00:09
4699 port VLAN MAC Age
4700])
4701
4702# Now trace 16 new MACs on another port.
4703for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do
4704 ovs-appctl ofproto/trace ovs-dummy "in_port(6),eth(src=50:54:00:00:0$i:ff,dst=ff:ff:ff:ff:ff:ff),$arp" -generate
4705 ovs-appctl time/warp 1000
4706done
4707
4708# Check the results.
4709#
4710# Our eviction algorithm on overflow is that an arbitrary (but deterministic)
4711# one of the ports with the most learned MACs loses the least recently used
4712# one. Thus, the new port will end up with 3 MACs, 3 of the old ports with 1
4713# MAC each, and the other 2 of the old ports with 2 MACs each.
4714#
4715# (If someone changes lib/heap.c to do something different with equal-priority
4716# nodes, then the output below could change, but it would still follow the
4717# rules explained above.)
4718AT_CHECK_UNQUOTED([ovs-appctl fdb/show br0 | sed 's/ *[[0-9]]\{1,\}$//' | sort],
4719 [0], [dnl
4720 1 0 50:54:00:00:00:01
4721 2 0 50:54:00:00:00:03
4722 3 0 50:54:00:00:00:04
4723 3 0 50:54:00:00:00:05
4724 4 0 50:54:00:00:00:07
4725 5 0 50:54:00:00:00:08
4726 5 0 50:54:00:00:00:09
4727 6 0 50:54:00:00:0d:ff
4728 6 0 50:54:00:00:0e:ff
4729 6 0 50:54:00:00:0f:ff
4730 port VLAN MAC Age
4731])
4732OVS_VSWITCHD_STOP
4733AT_CLEANUP
4734
4819b3a5 4735# CHECK_SFLOW_SAMPLING_PACKET(LOOPBACK_ADDR)
e731d71b
AS
4736#
4737# Test that sFlow samples packets correctly using IPv4/IPv6 sFlow collector
e731d71b 4738m4_define([CHECK_SFLOW_SAMPLING_PACKET],
4819b3a5 4739 [AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
e731d71b
AS
4740 OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
4741
53eb8cb8 4742 on_exit 'kill `cat test-sflow.pid`'
eadd1644 4743 AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:$1 > sflow.log], [0], [], [ignore])
e731d71b 4744 AT_CAPTURE_FILE([sflow.log])
fb28ef2d 4745 PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
e731d71b
AS
4746 ovs-appctl time/stop
4747
4748 ADD_OF_PORTS([br0], 1, 2)
4749 ovs-vsctl \
4750 set Interface br0 options:ifindex=1002 -- \
4751 set Interface p1 options:ifindex=1004 -- \
4752 set Interface p2 options:ifindex=1003 -- \
4753 set Bridge br0 sflow=@sf -- \
4754 --id=@sf create sflow targets=\"$1:$SFLOW_PORT\" \
9a9808d7 4755 header=128 sampling=1 polling=1 agent=$LOOPBACK_INTERFACE
e731d71b
AS
4756
4757 dnl open with ARP packets to seed the bridge-learning. The output
4758 dnl ifIndex numbers should be reported predictably after that.
4759 dnl Since we set sampling=1 we should see all of these packets
4760 dnl reported. Sorting the output by data-source and seqNo makes
4761 dnl it deterministic. Ensuring that we send at least two packets
4762 dnl into each port means we get to check the seq nos are
4763 dnl incrementing correctly.
4764 dnl because packets from different ports can be handled by separate
4765 dnl threads, put some sleeps
4766
4767 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)'
4768 sleep 1
4769 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)'
4770 sleep 1
4771 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)'
4772 sleep 1
4773 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)'
4774 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)'
4775
4776 dnl sleep long enough to get more than one counter sample
4777 dnl from each datasource so we can check sequence numbers
bdba1947 4778 ovs-appctl time/warp 3000 100
e731d71b
AS
4779 OVS_VSWITCHD_STOP
4780 ovs-appctl -t test-sflow exit
8073dd31 4781
e731d71b 4782 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
8073dd31
NM
4783 /g']], [0], [dnl
4784HEADER
4785 dgramSeqNo=1
743cea45 4786 ds=127.0.0.1>2:1000
8073dd31
NM
4787 fsSeqNo=1
4788 in_vlan=0
4789 in_priority=0
4790 out_vlan=0
4791 out_priority=0
4792 meanSkip=1
4793 samplePool=1
4794 dropEvents=0
743cea45 4795 in_ifindex=1004
8073dd31
NM
4796 in_format=0
4797 out_ifindex=2
4798 out_format=2
4799 hdr_prot=1
4800 pkt_len=64
4801 stripped=4
4802 hdr_len=60
743cea45 4803 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
8073dd31
NM
4804HEADER
4805 dgramSeqNo=1
743cea45 4806 ds=127.0.0.1>2:1000
8073dd31
NM
4807 fsSeqNo=2
4808 in_vlan=0
4809 in_priority=0
4810 out_vlan=0
4811 out_priority=0
4812 meanSkip=1
4813 samplePool=2
4814 dropEvents=0
4815 in_ifindex=1003
4816 in_format=0
743cea45
NM
4817 out_ifindex=2
4818 out_format=2
8073dd31
NM
4819 hdr_prot=1
4820 pkt_len=64
4821 stripped=4
4822 hdr_len=60
743cea45 4823 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
8073dd31
NM
4824HEADER
4825 dgramSeqNo=1
743cea45 4826 ds=127.0.0.1>2:1000
8073dd31
NM
4827 fsSeqNo=3
4828 in_vlan=0
4829 in_priority=0
4830 out_vlan=0
4831 out_priority=0
4832 meanSkip=1
4833 samplePool=3
4834 dropEvents=0
743cea45 4835 in_ifindex=1004
8073dd31 4836 in_format=0
743cea45 4837 out_ifindex=1003
8073dd31
NM
4838 out_format=0
4839 hdr_prot=1
4840 pkt_len=64
4841 stripped=4
4842 hdr_len=60
743cea45 4843 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
8073dd31
NM
4844HEADER
4845 dgramSeqNo=1
743cea45
NM
4846 ds=127.0.0.1>2:1000
4847 fsSeqNo=4
8073dd31
NM
4848 in_vlan=0
4849 in_priority=0
4850 out_vlan=0
4851 out_priority=0
4852 meanSkip=1
743cea45 4853 samplePool=4
8073dd31 4854 dropEvents=0
743cea45 4855 in_ifindex=1003
8073dd31 4856 in_format=0
743cea45
NM
4857 out_ifindex=1004
4858 out_format=0
8073dd31
NM
4859 hdr_prot=1
4860 pkt_len=64
4861 stripped=4
4862 hdr_len=60
743cea45 4863 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
8073dd31
NM
4864HEADER
4865 dgramSeqNo=1
743cea45
NM
4866 ds=127.0.0.1>2:1000
4867 fsSeqNo=5
8073dd31
NM
4868 in_vlan=0
4869 in_priority=0
4870 out_vlan=0
4871 out_priority=0
4872 meanSkip=1
743cea45 4873 samplePool=5
8073dd31 4874 dropEvents=0
743cea45 4875 in_ifindex=1003
8073dd31 4876 in_format=0
743cea45 4877 out_ifindex=1004
8073dd31
NM
4878 out_format=0
4879 hdr_prot=1
4880 pkt_len=64
4881 stripped=4
4882 hdr_len=60
52105b67 4883 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
8073dd31
NM
4884])
4885
50b9699f 4886 AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'IFCOUNTERS|ERROR|PORTNAME|OPENFLOWPORT' | head -18 | sed 's/ /\
8073dd31
NM
4887 /g']], [0], [dnl
4888IFCOUNTERS
4889 dgramSeqNo=2
4890 ds=127.0.0.1>0:1002
4891 csSeqNo=1
4892 ifindex=1002
4893 type=6
4894 ifspeed=100000000
4895 direction=0
1839c356 4896 status=0
8073dd31
NM
4897 in_octets=0
4898 in_unicasts=0
4899 in_multicasts=0
4900 in_broadcasts=4294967295
4901 in_discards=0
4902 in_errors=0
4903 in_unknownprotos=4294967295
4904 out_octets=120
4905 out_unicasts=2
4906 out_multicasts=4294967295
4907 out_broadcasts=4294967295
4908 out_discards=0
4909 out_errors=0
4910 promiscuous=0
4911IFCOUNTERS
4912 dgramSeqNo=2
4913 ds=127.0.0.1>0:1003
4914 csSeqNo=1
4915 ifindex=1003
4916 type=6
4917 ifspeed=100000000
4918 direction=0
4919 status=0
52105b67 4920 in_octets=138
8073dd31
NM
4921 in_unicasts=3
4922 in_multicasts=0
4923 in_broadcasts=4294967295
4924 in_discards=0
4925 in_errors=0
4926 in_unknownprotos=4294967295
4927 out_octets=120
4928 out_unicasts=2
4929 out_multicasts=4294967295
4930 out_broadcasts=4294967295
4931 out_discards=0
4932 out_errors=0
4933 promiscuous=0
4934IFCOUNTERS
4935 dgramSeqNo=2
4936 ds=127.0.0.1>0:1004
4937 csSeqNo=1
4938 ifindex=1004
4939 type=6
4940 ifspeed=100000000
4941 direction=0
4942 status=0
4943 in_octets=84
4944 in_unicasts=2
4945 in_multicasts=0
4946 in_broadcasts=4294967295
4947 in_discards=0
4948 in_errors=0
4949 in_unknownprotos=4294967295
4950 out_octets=180
4951 out_unicasts=3
4952 out_multicasts=4294967295
4953 out_broadcasts=4294967295
4954 out_discards=0
4955 out_errors=0
4956 promiscuous=0
4957IFCOUNTERS
4958 dgramSeqNo=3
4959 ds=127.0.0.1>0:1002
4960 csSeqNo=2
4961 ifindex=1002
4962 type=6
4963 ifspeed=100000000
4964 direction=0
1839c356 4965 status=0
8073dd31
NM
4966 in_octets=0
4967 in_unicasts=0
4968 in_multicasts=0
4969 in_broadcasts=4294967295
4970 in_discards=0
4971 in_errors=0
4972 in_unknownprotos=4294967295
4973 out_octets=120
4974 out_unicasts=2
4975 out_multicasts=4294967295
4976 out_broadcasts=4294967295
4977 out_discards=0
4978 out_errors=0
4979 promiscuous=0
4980IFCOUNTERS
4981 dgramSeqNo=3
4982 ds=127.0.0.1>0:1003
4983 csSeqNo=2
4984 ifindex=1003
4985 type=6
4986 ifspeed=100000000
4987 direction=0
4988 status=0
52105b67 4989 in_octets=138
8073dd31
NM
4990 in_unicasts=3
4991 in_multicasts=0
4992 in_broadcasts=4294967295
4993 in_discards=0
4994 in_errors=0
4995 in_unknownprotos=4294967295
4996 out_octets=120
4997 out_unicasts=2
4998 out_multicasts=4294967295
4999 out_broadcasts=4294967295
5000 out_discards=0
5001 out_errors=0
5002 promiscuous=0
5003IFCOUNTERS
5004 dgramSeqNo=3
5005 ds=127.0.0.1>0:1004
5006 csSeqNo=2
5007 ifindex=1004
5008 type=6
5009 ifspeed=100000000
5010 direction=0
5011 status=0
5012 in_octets=84
5013 in_unicasts=2
5014 in_multicasts=0
5015 in_broadcasts=4294967295
5016 in_discards=0
5017 in_errors=0
5018 in_unknownprotos=4294967295
5019 out_octets=180
5020 out_unicasts=3
5021 out_multicasts=4294967295
5022 out_broadcasts=4294967295
5023 out_discards=0
5024 out_errors=0
5025 promiscuous=0
50b9699f
NM
5026OPENFLOWPORT
5027 datapath_id=18364758544493064720
5028 port_no=1
5029OPENFLOWPORT
5030 datapath_id=18364758544493064720
5031 port_no=1
5032OPENFLOWPORT
5033 datapath_id=18364758544493064720
5034 port_no=2
5035OPENFLOWPORT
5036 datapath_id=18364758544493064720
5037 port_no=2
5038OPENFLOWPORT
5039 datapath_id=18364758544493064720
5040 port_no=65534
5041OPENFLOWPORT
5042 datapath_id=18364758544493064720
5043 port_no=65534
5044PORTNAME
5045 portName=br0
5046PORTNAME
5047 portName=br0
5048PORTNAME
5049 portName=p1
5050PORTNAME
5051 portName=p1
5052PORTNAME
5053 portName=p2
5054PORTNAME
5055 portName=p2
4819b3a5 5056])])
17f7f7e0 5057
4819b3a5
BP
5058AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv4 collector])
5059CHECK_SFLOW_SAMPLING_PACKET([127.0.0.1])
5060AT_CLEANUP
5061
5062AT_SETUP([ofproto-dpif - sFlow packet sampling - IPv6 collector])
5063AT_SKIP_IF([test $HAVE_IPV6 = no])
5064CHECK_SFLOW_SAMPLING_PACKET([[[::1]]])
5065AT_CLEANUP
1e04fcc8 5066
50b9699f 5067dnl Test sFlow LAG structures
7321bda3 5068AT_SETUP([ofproto-dpif - sFlow packet sampling - LACP structures])
80ee73d3 5069AT_SKIP_IF([test "$IS_WIN32" = "yes"])
50b9699f
NM
5070OVS_VSWITCHD_START([dnl
5071 add-bond br0 bond p1 p2 -- \
5072 set Port bond lacp=active bond-mode=active-backup \
5073 other_config:lacp-time="fast" \
5074 other_config:lacp-system-id=11:22:33:44:55:66 \
5075 other_config:lacp-system-priority=54321 -- \
5076 set Interface p1 type=dummy \
5077 other_config:lacp-port-id=11 \
5078 other_config:lacp-port-priority=111 \
5079 other_config:lacp-aggregation-key=3333 -- \
5080 set Interface p2 type=dummy \
5081 other_config:lacp-port-id=22 \
5082 other_config:lacp-port-priority=222 \
5083 other_config:lacp-aggregation-key=3333 ])
5084
53eb8cb8 5085on_exit 'kill `cat test-sflow.pid`'
50b9699f
NM
5086AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5087AT_CAPTURE_FILE([sflow.log])
fb28ef2d 5088PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
50b9699f
NM
5089
5090ovs-appctl time/stop
5091
5092ovs-vsctl \
5093 set Interface p1 options:ifindex=1003 -- \
5094 set Bridge br0 sflow=@sf -- \
5095 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5096 header=128 sampling=1 polling=1
5097
5098dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
cea4a6d7
JS
5099AT_CHECK([ovs-appctl time/warp 2000 100], [0], [ignore])
5100AT_CHECK([ovs-appctl revalidator/purge], [0])
50b9699f
NM
5101OVS_VSWITCHD_STOP
5102ovs-appctl -t test-sflow exit
5103AT_CHECK([[sort sflow.log | $EGREP 'LACPCOUNTERS|ERROR' | head -n 1 | sed 's/ /\
5104 /g']], [0], [dnl
5105LACPCOUNTERS
5106 sysID=11:22:33:44:55:66
5107 partnerID=00:00:00:00:00:00
5108 aggID=3333
5109 actorAdmin=0x7
5110 actorOper=0xbf
5111 partnerAdmin=0x0
5112 partnerOper=0x2
5113 LACPUDsRx=0
5114 markerPDUsRx=4294967295
5115 markerRespPDUsRx=4294967295
5116 unknownRx=4294967295
5117 illegalRx=0
5118 LACPUDsTx=1
5119 markerPDUsTx=4294967295
5120 markerRespPDUsTx=4294967295
5121])
5122
5123AT_CLEANUP
5124
7321bda3
NM
5125AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel set])
5126AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5127OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
5128
5129dnl set up sFlow logging
7321bda3
NM
5130AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5131AT_CAPTURE_FILE([sflow.log])
fb28ef2d 5132PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
7321bda3
NM
5133ovs-appctl time/stop
5134
5135OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
5136AT_CHECK([ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre \
5137 options:remote_ip=1.1.1.1 options:key=456 ofport_request=3])
5138AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy ofport_request=4])
5139
5140AT_CHECK([ovs-ofctl add-flow br0 action=3])
5141
5142dnl enable sflow
5143ovs-vsctl \
5144 set Bridge br0 sflow=@sf -- \
5145 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5146 header=128 sampling=1 polling=0
5147
5148dnl introduce a packet that will be flooded to the tunnel
5149AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.10.10.2,dst=10.10.10.1,proto=1,tos=1,ttl=128,frag=no),icmp(type=8,code=0)'])
5150
5151dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5152for i in `seq 1 30`; do
5153 ovs-appctl time/warp 100
5154done
5155
5156ovs-appctl -t test-sflow exit
5157
5158AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5159 /g']], [0], [dnl
5160HEADER
5161 dgramSeqNo=1
5162 ds=127.0.0.1>2:1000
5163 fsSeqNo=1
5164 tunnel4_out_length=0
5165 tunnel4_out_protocol=47
5166 tunnel4_out_src=0.0.0.0
5167 tunnel4_out_dst=1.1.1.1
5168 tunnel4_out_src_port=0
5169 tunnel4_out_dst_port=0
5170 tunnel4_out_tcp_flags=0
5171 tunnel4_out_tos=1
5172 tunnel_out_vni=456
5173 in_vlan=0
5174 in_priority=0
5175 out_vlan=0
5176 out_priority=0
5177 meanSkip=1
5178 samplePool=1
5179 dropEvents=0
5180 in_ifindex=0
5181 in_format=0
5182 out_ifindex=1
5183 out_format=2
5184 hdr_prot=1
5185 pkt_len=64
5186 stripped=4
5187 hdr_len=60
5188 hdr=50-54-00-00-00-0A-50-54-00-00-00-09-08-00-45-01-00-1C-00-00-00-00-80-01-12-CA-0A-0A-0A-02-0A-0A-0A-01-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
5189])
5190
5191OVS_VSWITCHD_STOP
5192AT_CLEANUP
5193
5194AT_SETUP([ofproto-dpif - sFlow packet sampling - tunnel push])
5195AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
5196
5197OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 options:ifindex=1010])
5198
5199dnl set up sFlow logging
7321bda3
NM
5200AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5201AT_CAPTURE_FILE([sflow.log])
fb28ef2d 5202PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
7321bda3
NM
5203ovs-appctl time/stop
5204
5205AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5206AT_CHECK([ovs-vsctl add-br int-br -- set bridge int-br datapath_type=dummy], [0])
5207AT_CHECK([ovs-vsctl -- add-port int-br t1 -- set Interface t1 type=gre \
5208 options:remote_ip=1.1.2.92 options:key=456 ofport_request=4\
5209 -- add-port int-br vm1 -- set Interface vm1 type=dummy \
5210 options:ifindex=2011 ofport_request=5
5211 ], [0])
5212
5213AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5214dummy@ovs-dummy: hit:0 missed:0
5215 br0:
5216 br0 65534/100: (dummy)
5217 p0 1/1: (dummy: ifindex=1010)
5218 int-br:
5219 int-br 65534/2: (dummy)
5220 t1 4/4: (gre: key=456, remote_ip=1.1.2.92)
5221 vm1 5/3: (dummy: ifindex=2011)
5222])
5223
5224dnl set up route to 1.1.2.92 via br0 and action=normal
5225AT_CHECK([ovs-appctl ovs/route/add 1.1.2.92/24 br0], [0], [OK
5226])
5227AT_CHECK([ovs-appctl ovs/route/add 192.168.0.0/16 br0], [0], [OK
5228])
5229AT_CHECK([ovs-appctl netdev-dummy/ip4addr br0 1.1.2.88/24], [0], [OK
5230])
5231AT_CHECK([ovs-ofctl add-flow br0 action=normal])
5232
5233dnl Prime ARP Cache for 1.1.2.92
5234AT_CHECK([ovs-appctl netdev-dummy/receive br0 'recirc_id(0),in_port(100),eth(src=f8:bc:12:44:34:b6,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=1,sha=f8:bc:12:44:34:b6,tha=00:00:00:00:00:00)'])
5235
5236dnl configure sflow on int-br only
5237ovs-vsctl \
5238 set Bridge int-br sflow=@sf -- \
5239 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5240 header=128 sampling=1 polling=0
5241
5242dnl add rule for int-br to force packet onto tunnel. There is no ifindex
5243dnl for this port so the sFlow output will just report that it went to
5244dnl 1 output (out_format=2, out_ifindex=1)
5245AT_CHECK([ovs-ofctl add-flow int-br "actions=4"])
5246
5247AT_CHECK([ovs-appctl netdev-dummy/receive vm1 'in_port(3),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=192.168.1.1,dst=192.168.2.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'])
5248
5249dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5250for i in `seq 1 30`; do
5251 ovs-appctl time/warp 100
5252done
5253
5254ovs-appctl -t test-sflow exit
5255
5256AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5257 /g']], [0], [dnl
5258HEADER
5259 dgramSeqNo=1
5260 ds=127.0.0.1>2:1000
5261 fsSeqNo=1
5262 tunnel4_out_length=0
5263 tunnel4_out_protocol=47
5264 tunnel4_out_src=1.1.2.88
5265 tunnel4_out_dst=1.1.2.92
5266 tunnel4_out_src_port=0
5267 tunnel4_out_dst_port=0
5268 tunnel4_out_tcp_flags=0
5269 tunnel4_out_tos=0
5270 tunnel_out_vni=456
5271 in_vlan=0
5272 in_priority=0
5273 out_vlan=0
5274 out_priority=0
5275 meanSkip=1
5276 samplePool=1
5277 dropEvents=0
5278 in_ifindex=2011
5279 in_format=0
5280 out_ifindex=1
5281 out_format=2
5282 hdr_prot=1
5283 pkt_len=64
5284 stripped=4
5285 hdr_len=60
5286 hdr=50-54-00-00-00-0A-50-54-00-00-00-05-08-00-45-00-00-1C-00-00-00-00-80-01-B6-8D-C0-A8-01-01-C0-A8-02-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
5287])
5288
5289OVS_VSWITCHD_STOP
5290AT_CLEANUP
5291
5292AT_SETUP([ofproto-dpif - sFlow packet sampling - MPLS])
7ad705c6 5293AT_XFAIL_IF([test "$IS_WIN32" = "yes"])
7321bda3
NM
5294OVS_VSWITCHD_START
5295AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5296ADD_OF_PORTS([br0], [1], [2])
5297AT_DATA([flows.txt], [dnl
5298table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,set_mpls_label:789,set_mpls_tc:4,set_mpls_ttl:32,2
5299table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
5300])
5301AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5302
5303dnl set up sFlow logging
7321bda3
NM
5304AT_CHECK([ovstest test-sflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > sflow.log], [0], [], [ignore])
5305AT_CAPTURE_FILE([sflow.log])
fb28ef2d 5306PARSE_LISTENING_PORT([test-sflow.log], [SFLOW_PORT])
7321bda3
NM
5307ovs-appctl time/stop
5308
5309dnl configure sflow
5310ovs-vsctl \
5311 set Bridge br0 sflow=@sf -- \
5312 --id=@sf create sflow targets=\"127.0.0.1:$SFLOW_PORT\" \
5313 header=128 sampling=1 polling=0
5314
5315AT_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)'])
5316AT_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)'])
5317
5318dnl sleep long enough to get the sFlow datagram flushed out (may be delayed for up to 1 second)
5319for i in `seq 1 30`; do
5320 ovs-appctl time/warp 100
5321done
5322
5323ovs-appctl -t test-sflow exit
5324
5325AT_CHECK_UNQUOTED([[sort sflow.log | $EGREP 'HEADER|ERROR' | sed 's/ /\
5326 /g']], [0], [dnl
5327HEADER
5328 dgramSeqNo=1
5329 ds=127.0.0.1>2:1000
5330 fsSeqNo=1
5331 mpls_label_0=789
5332 mpls_tc_0=4
5333 mpls_ttl_0=32
5334 mpls_bos_0=0
5335 mpls_label_1=11
5336 mpls_tc_1=3
5337 mpls_ttl_1=64
5338 mpls_bos_1=1
5339 in_vlan=0
5340 in_priority=0
5341 out_vlan=0
5342 out_priority=0
5343 meanSkip=1
5344 samplePool=1
5345 dropEvents=0
5346 in_ifindex=0
5347 in_format=0
5348 out_ifindex=1
5349 out_format=2
5350 hdr_prot=1
5351 pkt_len=64
5352 stripped=4
5353 hdr_len=60
5354 hdr=50-54-00-00-00-0A-50-54-00-00-00-09-88-47-00-00-B7-40-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
5355HEADER
5356 dgramSeqNo=1
5357 ds=127.0.0.1>2:1000
5358 fsSeqNo=2
5359 mpls_label_0=789
5360 mpls_tc_0=4
5361 mpls_ttl_0=32
5362 mpls_bos_0=1
5363 in_vlan=0
5364 in_priority=0
5365 out_vlan=0
5366 out_priority=0
5367 meanSkip=1
5368 samplePool=2
5369 dropEvents=0
5370 in_ifindex=0
5371 in_format=0
5372 out_ifindex=1
5373 out_format=2
5374 hdr_prot=1
5375 pkt_len=64
5376 stripped=4
5377 hdr_len=60
5378 hdr=50-54-00-00-00-0A-50-54-00-00-00-09-08-00-45-00-00-14-00-00-00-00-00-00-BA-EB-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
5379])
5380
5381OVS_VSWITCHD_STOP
5382AT_CLEANUP
5383
5384
4819b3a5 5385# CHECK_NETFLOW_EXPIRATION(LOOPBACK_ADDR)
e731d71b
AS
5386#
5387# Test that basic NetFlow reports flow statistics correctly:
5388# The initial packet of a flow are correctly accounted.
5389# Later packets within a flow are correctly accounted.
5390# Flow actions changing (in this case, due to MAC learning)
5391# cause a record to be sent.
e731d71b 5392m4_define([CHECK_NETFLOW_EXPIRATION],
4819b3a5 5393 [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
e731d71b
AS
5394 ADD_OF_PORTS([br0], 1, 2)
5395
5396 ovs-appctl time/stop
53eb8cb8 5397 on_exit 'kill `cat test-netflow.pid`'
eadd1644 5398 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
e731d71b 5399 AT_CAPTURE_FILE([netflow.log])
fb28ef2d 5400 PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
e731d71b
AS
5401
5402 ovs-vsctl \
5403 set Bridge br0 netflow=@nf -- \
5404 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
5405 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
5406
5407 for delay in 1000 30000; do
5408 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)'
5788e39f 5409 sleep 1 # ensure the order in which these two packets are processed
e731d71b
AS
5410 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)'
5411
5412 ovs-appctl time/warp $delay
5413 done
17f7f7e0 5414
e731d71b 5415 ovs-appctl time/warp 6000
27f57736 5416 ovs-appctl revalidator/wait
e731d71b
AS
5417 OVS_VSWITCHD_STOP
5418 ovs-appctl -t test-netflow exit
e79a6c83 5419
e731d71b 5420 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])
e79a6c83 5421
e731d71b 5422 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])
e79a6c83 5423
e731d71b
AS
5424 combined=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 2 pkts, 120 bytes, ICMP 0:0" netflow.log | wc -l`
5425 separate=`grep "192.168.0.2 > 192.168.0.1, if 2 > 1, 1 pkts, 60 bytes, ICMP 0:0" netflow.log | wc -l`
4819b3a5 5426 AT_CHECK([test $separate = 2 || test $combined = 1], [0])])
17f7f7e0 5427
4819b3a5
BP
5428AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv4 collector])
5429CHECK_NETFLOW_EXPIRATION([127.0.0.1])
5430AT_CLEANUP
17f7f7e0 5431
4819b3a5
BP
5432AT_SETUP([ofproto-dpif - NetFlow flow expiration - IPv6 collector])
5433AT_SKIP_IF([test $HAVE_IPV6 = no])
5434CHECK_NETFLOW_EXPIRATION([[[::1]]])
5435AT_CLEANUP
1e04fcc8 5436
4819b3a5 5437# CHECK_NETFLOW_ACTIVE_EXPIRATION(LOOPBACK_ADDR)
e731d71b
AS
5438#
5439# Test that basic NetFlow reports active expirations correctly.
e731d71b 5440m4_define([CHECK_NETFLOW_ACTIVE_EXPIRATION],
4819b3a5 5441 [OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
e731d71b 5442 ADD_OF_PORTS([br0], 1, 2)
17f7f7e0 5443
53eb8cb8 5444 on_exit 'kill `cat test-netflow.pid`'
eadd1644 5445 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
e731d71b 5446 AT_CAPTURE_FILE([netflow.log])
fb28ef2d 5447 PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
17f7f7e0 5448
e731d71b
AS
5449 ovs-vsctl \
5450 set Bridge br0 netflow=@nf -- \
5451 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
5452 engine_id=1 engine_type=2 active_timeout=10 add-id-to-interface=false
17f7f7e0 5453
e731d71b
AS
5454 AT_CHECK([ovs-appctl time/stop])
5455 n=1
5456 while test $n -le 60; do
5457 n=`expr $n + 1`
17f7f7e0 5458
e731d71b
AS
5459 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)'
5460 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)'
17f7f7e0 5461
e731d71b
AS
5462 ovs-appctl time/warp 1000
5463 done
17f7f7e0 5464
e731d71b
AS
5465 ovs-appctl time/warp 10000
5466
27f57736 5467 ovs-appctl revalidator/wait
e731d71b
AS
5468 OVS_VSWITCHD_STOP
5469 ovs-appctl -t test-netflow exit
5470
5471 # Count the number of reported packets:
5472 # - From source to destination before MAC learning kicks in (just one).
5473 # - From source to destination after that.
5474 # - From destination to source.
5475 n_learn=0
5476 n_in=0
5477 n_out=0
5478 n_other=0
5479 n_recs=0
5480 none=0
5481 while read line; do
5482 pkts=`echo "$line" | sed 's/.*, \([[0-9]]*\) pkts,.*/\1/'`
5483 case $pkts in
5484 [[0-9]]*) ;;
5485 *) continue ;;
5486 esac
5487
5488 case $line in
5489 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 65535, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
5490 counter=n_learn
5491 ;;
5492 "seq "*": 192.168.0.1 > 192.168.0.2, if 1 > 2, "*" pkts, "*" bytes, TCP 1234 > 80, time "*)
5493 counter=n_in
5494 ;;
5495 "seq "*": 192.168.0.2 > 192.168.0.1, if 2 > 1, "*" pkts, "*" bytes, TCP 80 > 1234, time "*)
5496 counter=n_out
5497 ;;
5498 *)
5499 counter=n_other
5500 ;;
5501 esac
5502 eval $counter=\`expr \$$counter + \$pkts\`
5503 n_recs=`expr $n_recs + 1`
5504 done < netflow.log
5505
5506 # There should be exactly 1 MAC learning packet,
5507 # exactly 59 other packets in that direction,
5508 # and exactly 60 packets in the other direction.
5509 AT_CHECK([echo $n_learn $n_in $n_out $n_other], [0], [1 59 60 0
4819b3a5 5510])])
e731d71b 5511
4819b3a5
BP
5512AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv4 collector])
5513CHECK_NETFLOW_ACTIVE_EXPIRATION([127.0.0.1])
5514AT_CLEANUP
e731d71b 5515
4819b3a5
BP
5516AT_SETUP([ofproto-dpif - NetFlow active expiration - IPv6 collector])
5517AT_SKIP_IF([test $HAVE_IPV6 = no])
5518CHECK_NETFLOW_ACTIVE_EXPIRATION([[[::1]]])
5519AT_CLEANUP
f27f2134 5520
3d198ea5
JS
5521dnl In the absence of an IPFIX collector to verify protocol correctness, simply
5522dnl configure IPFIX and ensure that sample action generation works at the
5523dnl datapath level.
5524AT_SETUP([ofproto-dpif - Basic IPFIX sanity check])
5525OVS_VSWITCHD_START
5526ADD_OF_PORTS([br0], 1, 2)
5527
5528dnl Sample every packet using bridge-based sampling
5529AT_CHECK([ovs-vsctl -- set bridge br0 ipfix=@fix -- \
5530 --id=@fix create ipfix targets=\"127.0.0.1:4739\" \
5531 sampling=1], [0], [ignore])
5532
5533dnl Send some packets that should be sampled
5534for i in `seq 1 3`; do
5535 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)'])
5536done
5537AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
5538flow-dump from non-dpdk interfaces:
5539packets:2, bytes:120, used:0.001s, actions:sample(sample=100.0%,actions(userspace(pid=0,ipfix(output_port=4294967295))))
5540])
5541
5542dnl Remove the IPFIX configuration
5543AT_CHECK([ovs-vsctl clear bridge br0 ipfix])
5544AT_CHECK([ovs-appctl revalidator/purge])
5545
5546dnl Send some more packets, to ensure that these are not sampled.
5547for i in `seq 1 3`; do
5548 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)'])
5549done
5550AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/.*\(packets:\)/\1/' | sed 's/used:[[0-9]].[[0-9]]*s/used:0.001s/'], [0], [dnl
5551flow-dump from non-dpdk interfaces:
5552packets:2, bytes:120, used:0.001s, actions:drop
5553])
5554
5555OVS_VSWITCHD_STOP(["/sending to collector failed/d"])
5556AT_CLEANUP
5557
23a7d252
JS
5558AT_SETUP([ofproto-dpif - flow stats])
5559OVS_VSWITCHD_START
5560AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
5561AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
5562
5563ovs-appctl time/stop
5564
5565for i in `seq 1 10`; do
5566 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)'
5567done
5568
cea4a6d7
JS
5569AT_CHECK([ovs-appctl time/warp 1000], [0], [ignore])
5570AT_CHECK([ovs-appctl revalidator/purge], [0])
e96a5c24 5571AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
11f9de00 5572AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
e96a5c24 5573 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
11f9de00 5574 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
e96a5c24
JS
5575])
5576OVS_VSWITCHD_STOP
5577AT_CLEANUP
5578
5579AT_SETUP([ofproto-dpif - flow stats, set-n-threads])
5580OVS_VSWITCHD_START
5581AT_CHECK([ovs-ofctl add-flow br0 "ip,actions=NORMAL"])
5582AT_CHECK([ovs-ofctl add-flow br0 "icmp,actions=NORMAL"])
5583
5584ovs-appctl time/stop
5585
5586for i in `seq 1 10`; do
5587 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)'
5588done
5589
5590ovs-appctl time/warp 100
5591AT_CHECK([ovs-vsctl set Open_vSwitch . other-config:n-revalidator-threads=2])
5592ovs-appctl time/warp 1000
5593
23a7d252 5594AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
11f9de00 5595AT_CHECK([STRIP_XIDS stdout | sed -n 's/duration=[[0-9]]*\.[[0-9]]*s/duration=0.0s/p' | sort], [0], [dnl
23a7d252 5596 cookie=0x0, duration=0.0s, table=0, n_packets=0, n_bytes=0, idle_age=1, icmp actions=NORMAL
11f9de00 5597 cookie=0x0, duration=0.0s, table=0, n_packets=10, n_bytes=600, idle_age=1, ip actions=NORMAL
23a7d252
JS
5598])
5599OVS_VSWITCHD_STOP
5600AT_CLEANUP
5601
5f5ebd4c 5602AT_SETUP([ofproto-dpif - idle_age and hard_age increase over time])
f27f2134
BP
5603OVS_VSWITCHD_START
5604
5605# get_ages DURATION HARD IDLE
5606#
5607# Fetch the flow duration, hard age, and idle age into the variables
5608# whose names are given as arguments. Rounds DURATION down to the
5609# nearest integer. If hard_age doesn't appear in the output, sets
5610# HARD to "none". If idle_age doesn't appear in the output, sets IDLE
5611# to 0.
5612get_ages () {
5613 AT_CHECK([ovs-ofctl dump-flows br0], [0], [stdout])
5614
5615 duration=`sed -n 's/.*duration=\([[0-9]]*\)\(\.[[0-9]]*\)\{0,1\}s.*/\1/p' stdout`
5616 AT_CHECK([[expr X"$duration" : 'X[0-9][0-9]*$']], [0], [ignore])
5617 AS_VAR_COPY([$1], [duration])
5618
5619 hard=`sed -n 's/.*hard_age=\([[0-9]]*\),.*/\1/p' stdout`
5620 if test X"$hard" = X; then
5621 hard=none
5622 else
5623 AT_CHECK([[expr X"$hard" : 'X[0-9][0-9]*$']], [0], [ignore])
5624 fi
5625 AS_VAR_COPY([$2], [hard])
5626
5627 idle=`sed -n 's/.*idle_age=\([[0-9]]*\),.*/\1/p' stdout`
5628 if test X"$idle" = X; then
5629 idle=0
5630 else
5631 AT_CHECK([[expr X"$idle" : 'X[0-9][0-9]*$']], [0], [ignore])
5632 fi
5633 AS_VAR_COPY([$3], [idle])
5634}
5635
5636# Add a flow and get its initial hard and idle age.
5637AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=199,idle_timeout=188,actions=drop])
5638get_ages duration1 hard1 idle1
5639
31ef9f51 5640ovs-appctl time/stop
f27f2134
BP
5641# Warp time forward by 10 seconds, then modify the flow's actions.
5642ovs-appctl time/warp 10000
5643get_ages duration2 hard2 idle2
5644AT_CHECK([ovs-ofctl mod-flows br0 actions=flood])
5645
5646# Warp time forward by 10 seconds.
5647ovs-appctl time/warp 10000
5648get_ages duration3 hard3 idle3
5649
5650# Warp time forward 10 more seconds, then pass some packets through the flow,
5651# then warp forward a few more times because idle times are only updated
5652# occasionally.
5653ovs-appctl time/warp 10000
5654ovs-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)'
bdba1947 5655ovs-appctl time/warp 3000 1000
c0526804 5656sleep 1
f27f2134
BP
5657get_ages duration4 hard4 idle4
5658
5659printf "duration: %4s => %4s => %4s => %4s\n" $duration1 $duration2 $duration3 $duration4
5660printf "hard_age: %4s => %4s => %4s => %4s\n" $hard1 $hard2 $hard3 $hard4
5661printf "idle_age: %4s => %4s => %4s => %4s\n" $idle1 $idle2 $idle3 $idle4
5662
5663# Duration should increase steadily over time.
5664AT_CHECK([test $duration1 -lt $duration2])
5665AT_CHECK([test $duration2 -lt $duration3])
5666AT_CHECK([test $duration3 -lt $duration4])
5667
5668# Hard age should be "none" initially because it's the same as flow_duration,
5669# then it should increase.
5670AT_CHECK([test $hard1 = none])
5671AT_CHECK([test $hard2 = none])
5672AT_CHECK([test $hard3 != none])
5673AT_CHECK([test $hard4 != none])
5674AT_CHECK([test $hard3 -lt $hard4])
5675
5676# Idle age should increase from 1 to 2 to 3, then decrease.
5677AT_CHECK([test $idle1 -lt $idle2])
5678AT_CHECK([test $idle2 -lt $idle3])
5679AT_CHECK([test $idle3 -gt $idle4])
5680
5681# Check some invariant relationships.
5682AT_CHECK([test $duration1 = $idle1])
5683AT_CHECK([test $duration2 = $idle2])
5684AT_CHECK([test $duration3 = $idle3])
5685AT_CHECK([test $idle3 -gt $hard3])
5686AT_CHECK([test $idle4 -lt $hard4])
5687AT_CHECK([test $hard4 -lt $duration4])
5688
5689OVS_VSWITCHD_STOP
5690AT_CLEANUP
0e553d9c
BP
5691
5692AT_SETUP([ofproto-dpif - fin_timeout])
5693OVS_VSWITCHD_START
b5c1a5df 5694ovs-appctl time/stop
0e553d9c
BP
5695AT_CHECK([ovs-ofctl add-flow br0 'idle_timeout=60,actions=fin_timeout(idle_timeout=5)'])
5696AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5697[NXST_FLOW reply:
5698 idle_timeout=60, actions=fin_timeout(idle_timeout=5)
5699])
31ef9f51 5700
0e553d9c
BP
5701# Check that a TCP SYN packet does not change the timeout. (Because
5702# flow stats updates are mainly what implements the fin_timeout
5703# feature, we warp forward a couple of times to ensure that flow stats
5704# run before re-checking the flow table.)
323cc924 5705AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f908004500003c2e2440004006465dac11370dac11370b828b0016751e267b00000000a00216d017360000020405b40402080a2d25085f0000000001030307])
0e553d9c
BP
5706AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
5707warped
5708])
cea4a6d7 5709AT_CHECK([ovs-appctl revalidator/purge], [0])
0e553d9c
BP
5710AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5711[NXST_FLOW reply:
5712 n_packets=1, n_bytes=74, idle_timeout=60, actions=fin_timeout(idle_timeout=5)
5713])
5714# Check that a TCP FIN packet does change the timeout.
323cc924 5715AT_CHECK([ovs-appctl netdev-dummy/receive br0 0021853763af0026b98cb0f90800451000342e3e40004006463bac11370dac11370b828b0016751e319dfc96399b801100717ae800000101080a2d250a9408579588])
0e553d9c
BP
5716AT_CHECK([ovs-appctl time/warp 1000 && ovs-appctl time/warp 1000], [0], [warped
5717warped
5718])
5719AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0],
5720[NXST_FLOW reply:
5721 n_packets=2, n_bytes=140, idle_timeout=5, actions=fin_timeout(idle_timeout=5)
5722])
5723OVS_VSWITCHD_STOP
5724AT_CLEANUP
27022416
JP
5725
5726AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-dps])
5727OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
5728ADD_OF_PORTS([br0], [1], [2])
5729ADD_OF_PORTS([br1], [3])
5730
5731AT_CHECK([ovs-appctl dpif/dump-dps], [0], [dnl
5732dummy@br0
5733dummy@br1
5734])
5735OVS_VSWITCHD_STOP
5736AT_CLEANUP
5737
5738AT_SETUP([ofproto-dpif - ovs-appctl dpif/show])
5739OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy])
5740ADD_OF_PORTS([br0], [1], [2])
5741ADD_OF_PORTS([br1], [3])
5742
5743AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36 5744dummy@ovs-dummy: hit:0 missed:0
e79a6c83 5745 br0:
dc54ef36
EJ
5746 br0 65534/100: (dummy)
5747 p1 1/1: (dummy)
5748 p2 2/2: (dummy)
e79a6c83 5749 br1:
dc54ef36
EJ
5750 br1 65534/101: (dummy)
5751 p3 3/3: (dummy)
27022416
JP
5752])
5753OVS_VSWITCHD_STOP
5754AT_CLEANUP
5755
5756AT_SETUP([ofproto-dpif - ovs-appctl dpif/dump-flows])
054e5aa6 5757# bump max-idle to avoid the flows being reclaimed behind us
27022416 5758OVS_VSWITCHD_START([add-br br1 -- \
054e5aa6
YT
5759 set bridge br1 datapath-type=dummy fail-mode=secure -- \
5760 set Open_vSwitch . other_config:max-idle=10000])
27022416
JP
5761ADD_OF_PORTS([br0], [1], [2])
5762ADD_OF_PORTS([br1], [3])
5763
323cc924
BP
5764AT_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)'])
5765AT_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)'])
5766AT_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)'])
27f57736 5767ovs-appctl revalidator/wait
70e5ed6f 5768AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
16194afd
DDP
5769recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
5770recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
27022416
JP
5771])
5772
70e5ed6f 5773AT_CHECK([ovs-appctl dpif/dump-flows br1 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
16194afd 5774recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
27022416
JP
5775])
5776
70e5ed6f 5777AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
16194afd
DDP
5778skb_priority(0/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),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
5779skb_priority(0/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),icmp(type=0/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
04b541df
GS
5780])
5781
70e5ed6f 5782AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
16194afd 5783skb_priority(0/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),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions:drop
818650e6
JS
5784])
5785
5786OVS_VSWITCHD_STOP
5787AT_CLEANUP
5788
5789AT_SETUP([ofproto-dpif - ovs-appctl dpif/get-flow])
5790
5791OVS_VSWITCHD_START([add-br br1 -- \
5792 set bridge br1 datapath-type=dummy fail-mode=secure -- \
5793 set Open_vSwitch . other_config:max-idle=10000])
5794ADD_OF_PORTS([br0], [1], [2])
5795
5796AT_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)'])
5797ovs-appctl revalidator/wait
5798AT_CHECK([ovs-appctl dpif/dump-flows -m br0], [0], [stdout])
5799
10e92b4f 5800UFID=`sed -n 's/\(ufid:[[-0-9a-fA-F]]*\).*/\1/p' stdout`
818650e6
JS
5801AT_CHECK([ovs-appctl dpctl/get-flow $UFID], [0], [dnl
5802recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:drop
04b541df
GS
5803])
5804
27022416
JP
5805OVS_VSWITCHD_STOP
5806AT_CLEANUP
5807
50c1efc9 5808AT_SETUP([ofproto-dpif - MPLS actions that result in a userspace action])
8bfd0fda
BP
5809OVS_VSWITCHD_START([dnl
5810 add-port br0 p1 -- set Interface p1 type=dummy
5811])
623540e4 5812AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
53eb8cb8 5813on_exit 'kill `cat ovs-ofctl.pid`'
8bfd0fda
BP
5814
5815AT_CAPTURE_FILE([ofctl_monitor.log])
5816AT_DATA([flows.txt], [dnl
5817dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
5818dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
5819])
5820AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5821
5822dnl Packet is sent to userspace because a MPLS push or pop action is applied to
47fb7f71 5823dnl a packet with 2 MPLS LSEs but dpif-netdev can't handle any labels.
8bfd0fda 5824dnl
47fb7f71 5825dnl The input is a frame with two MPLS labels which tcpdump -vve shows as:
8bfd0fda 5826dnl 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)
8bfd0fda
BP
5827dnl (label 20, exp 0, [S], ttl 32)
5828dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
5829dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
5830
5831for dl_src in 00 01; do
47fb7f71 5832 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"])
e3b9e3aa
YT
5833done
5834sleep 1 # wait for the datapath flow installed
70e5ed6f 5835AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
449b8131
JR
5836recirc_id=0,mpls,in_port=1,vlan_tci=0x0000,dl_src=60:66:66:66:66:00,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=0,mpls_lse1=82208, actions:userspace(pid=0,slow_path(controller))
5837recirc_id=0,mpls,in_port=1,vlan_tci=0x0000,dl_src=60:66:66:66:66:01,mpls_bos=0,mpls_lse1=82208, actions:userspace(pid=0,slow_path(controller))
8bfd0fda 5838])
8bfd0fda
BP
5839
5840OVS_VSWITCHD_STOP
5841AT_CLEANUP
5842
5843
50c1efc9 5844AT_SETUP([ofproto-dpif - MPLS actions that result in a drop])
8bfd0fda
BP
5845OVS_VSWITCHD_START([dnl
5846 add-port br0 p1 -- set Interface p1 type=dummy
5847])
623540e4 5848AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
53eb8cb8 5849on_exit 'kill `cat ovs-ofctl.pid`'
8bfd0fda
BP
5850
5851AT_CAPTURE_FILE([ofctl_monitor.log])
5852AT_DATA([flows.txt], [dnl
5853dl_src=60:66:66:66:66:00 actions=push_mpls:0x8847,controller
5854dl_src=60:66:66:66:66:01 actions=pop_mpls:0x8849,controller
5855])
5856AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
5857
5858dnl Packet is dropped because an MPLS PUSH action is applied to a packet with
5859dnl 4 MPLS LSEs but ovs-vswtichd can only handle up to 3 MPLS LSEs and thus
47fb7f71 5860dnl can't determine the resulting MPLS label after MPLS push/pop actions.
8bfd0fda
BP
5861dnl
5862dnl The input is a frame with two MPLS headers which tcpdump -vve shows as:
5863dnl 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)
5864dnl (label 20, exp 0, ttl 32)
5865dnl (label 20, exp 0, ttl 32)
5866dnl (label 20, exp 0, [S], ttl 32)
5867dnl (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto TCP (6), length 44, bad cksum 3b78 (->f978)!)
5868dnl 192.168.0.1.80 > 192.168.0.2.0: Flags [none], cksum 0x7744 (correct), seq 42:46, win 10000, length 4
8bfd0fda 5869
47fb7f71
JS
5870for dl_src in 00 01; do
5871 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"])
e3b9e3aa
YT
5872done
5873sleep 1 # wait for the datapath flow installed
70e5ed6f 5874AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
449b8131
JR
5875recirc_id=0,mpls,in_port=1,vlan_tci=0x0000,dl_src=60:66:66:66:66:00,mpls_label=20,mpls_tc=0,mpls_ttl=32,mpls_bos=0,mpls_lse1=82208, actions:userspace(pid=0,slow_path(controller))
5876recirc_id=0,mpls,in_port=1,vlan_tci=0x0000,dl_src=60:66:66:66:66:01,mpls_bos=0,mpls_lse1=82208, actions:userspace(pid=0,slow_path(controller))
8bfd0fda
BP
5877])
5878
5879OVS_VSWITCHD_STOP
5880AT_CLEANUP
5881
0a740f48
EJ
5882AT_SETUP([ofproto-dpif - patch ports])
5883OVS_VSWITCHD_START([add-br br1 \
5884-- set bridge br1 datapath-type=dummy fail-mode=secure \
5885-- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
5886-- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
5887
5888ADD_OF_PORTS([br0], [2])
5889ADD_OF_PORTS([br1], [3])
5890
64bb477f
JS
5891AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
5892], [])
aef0491b 5893AT_CHECK([ovs-appctl time/stop])
623540e4 5894AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
9fc0165a 5895
0a740f48
EJ
5896AT_CHECK([ovs-ofctl add-flow br0 actions=LOCAL,output:1,output:2])
5897AT_CHECK([ovs-ofctl add-flow br1 actions=LOCAL,output:1,output:3])
5898
5899for i in $(seq 1 10); do
5900 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)'
3b401f9b
BP
5901 if [[ $i -eq 1 ]]; then
5902 sleep 1
5903 fi
0a740f48
EJ
5904done
5905
5906for i in $(seq 1 5); do
5907 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)'
3b401f9b
BP
5908 if [[ $i -eq 1 ]]; then
5909 sleep 1
5910 fi
0a740f48
EJ
5911done
5912
0a8763fc
EJ
5913AT_CHECK([ovs-appctl time/warp 500], [0],
5914[warped
735d7efb 5915])
732207ad 5916sleep 1 # wait for log writer
735d7efb 5917
0a740f48 5918AT_CHECK([ovs-appctl dpif/show], [0], [dnl
dc54ef36 5919dummy@ovs-dummy: hit:13 missed:2
e79a6c83 5920 br0:
dc54ef36
EJ
5921 br0 65534/100: (dummy)
5922 p2 2/2: (dummy)
5923 pbr0 1/none: (patch: peer=pbr1)
e79a6c83 5924 br1:
dc54ef36
EJ
5925 br1 65534/101: (dummy)
5926 p3 3/3: (dummy)
5927 pbr1 1/none: (patch: peer=pbr0)
0a740f48
EJ
5928])
5929
70e5ed6f 5930AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
449b8131
JR
5931recirc_id=0,ip,in_port=100,vlan_tci=0x0000,nw_frag=no, actions:101,3,2
5932recirc_id=0,ip,in_port=101,vlan_tci=0x0000,nw_frag=no, actions:100,2,3
c2a77f33
JS
5933])
5934
70e5ed6f 5935AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' | STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
16194afd 5936skb_priority(0/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),icmp(type=8/0,code=0/0), packets:9, bytes:540, used:0.0s, actions:101,3,2
c2a77f33 5937])
70e5ed6f 5938AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' | STRIP_UFID | FILTER_FLOW_DUMP], [0], [dnl
16194afd 5939skb_priority(0/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),icmp(type=8/0,code=0/0), packets:4, bytes:240, used:0.0s, actions:100,2,3
0a740f48
EJ
5940])
5941
5942AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
5943OFPST_PORT reply (xid=0x4): 1 ports
5944 port 1: rx pkts=5, bytes=300, drop=0, errs=0, frame=0, over=0, crc=0
5945 tx pkts=10, bytes=600, drop=0, errs=0, coll=0
5946])
5947
5948AT_CHECK([ovs-ofctl dump-ports br1 pbr1], [0], [dnl
5949OFPST_PORT reply (xid=0x4): 1 ports
5950 port 1: rx pkts=10, bytes=600, drop=0, errs=0, frame=0, over=0, crc=0
5951 tx pkts=5, bytes=300, drop=0, errs=0, coll=0
5952])
5953
5954OVS_VSWITCHD_STOP
5955AT_CLEANUP
655ab909 5956
1774d762
JR
5957AT_SETUP([ofproto-dpif - patch ports - stack])
5958OVS_VSWITCHD_START([add-br br1 \
5959-- set bridge br1 datapath-type=dummy fail-mode=secure \
5960-- add-port br1 pbr1 -- set int pbr1 type=patch options:peer=pbr0 \
5961-- add-port br0 pbr0 -- set int pbr0 type=patch options:peer=pbr1])
5962
5963ADD_OF_PORTS([br0], [2])
5964ADD_OF_PORTS([br1], [3])
5965
5966AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
5967], [])
5968AT_CHECK([ovs-appctl time/stop])
5969AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
5970
5971AT_CHECK([ovs-ofctl add-flow br0 "ip actions=push:OXM_OF_IN_PORT[[0..31]],output:1,pop:OXM_OF_IPV4_SRC[[0..31]],output:2"])
5972# Try to pop from empty stack, and push and leave data to stack.
5973AT_CHECK([ovs-ofctl add-flow br1 "ip actions=pop:OXM_OF_IPV4_DST[[0..31]],push:NXM_NX_REG1[[0..31]],LOCAL"])
5974
5975ovs-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)'
5976
5977AT_CHECK([ovs-appctl time/warp 500], [0],
5978[warped
5979])
5980
5981OVS_WAIT_UNTIL([test `grep flow_add ovs-vswitchd.log | wc -l` -ge 1])
5982
5983AT_CHECK([ovs-appctl dpif/show], [0], [dnl
5984dummy@ovs-dummy: hit:0 missed:1
5985 br0:
5986 br0 65534/100: (dummy)
5987 p2 2/2: (dummy)
5988 pbr0 1/none: (patch: peer=pbr1)
5989 br1:
5990 br1 65534/101: (dummy)
5991 p3 3/3: (dummy)
5992 pbr1 1/none: (patch: peer=pbr0)
5993])
5994
5995AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
449b8131 5996recirc_id=0,ip,in_port=100,vlan_tci=0x0000,nw_src=192.168.0.1,nw_frag=no, actions:101,set(ipv4(src=255.255.255.254)),2
1774d762
JR
5997])
5998
5999AT_CHECK([cat ovs-vswitchd.log | grep -e '|nx_match|WARN|' | sed "s/^.*|WARN|//"], [0], [dnl
6000Failed to pop from an empty stack. On flow
6001])
6002
6003OVS_VSWITCHD_STOP(["/Failed to pop from an empty stack/d"])
6004AT_CLEANUP
6005
65e0be10
BP
6006AT_SETUP([ofproto-dpif - port duration])
6007OVS_VSWITCHD_START([set Bridge br0 protocols=OpenFlow13])
6008ADD_OF_PORTS([br0], 1, 2)
6009
31ef9f51 6010ovs-appctl time/stop
65e0be10
BP
6011ovs-appctl time/warp 10000
6012
6013AT_CHECK([ovs-ofctl -O openflow13 dump-ports br0], [0], [stdout])
125bf01d 6014AT_CHECK([sed -n 's/=[[0-9]][[0-9]]\(\.[[0-9]][[0-9]]*\)\{0,1\}s/=?s/p' stdout], [0],
65e0be10 6015[dnl
65e0be10 6016 duration=?s
65e0be10 6017 duration=?s
65e0be10
BP
6018 duration=?s
6019])
6020OVS_VSWITCHD_STOP
6021AT_CLEANUP
bcd2633a
JP
6022
6023dnl ----------------------------------------------------------------------
6024AT_BANNER([ofproto-dpif -- megaflows])
6025
bcd2633a
JP
6026AT_SETUP([ofproto-dpif megaflow - port classification])
6027OVS_VSWITCHD_START
623540e4 6028AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6029ADD_OF_PORTS([br0], [1], [2])
6030AT_DATA([flows.txt], [dnl
6031table=0 in_port=1 actions=output(2)
6032])
6033AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6034AT_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)'])
53555f51 6035sleep 1
bcd2633a 6036AT_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)'])
ae692725 6037sleep 1
c2a77f33 6038AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131 6039recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_frag=no, actions: <del>
bcd2633a
JP
6040])
6041OVS_VSWITCHD_STOP
6042AT_CLEANUP
6043
6044AT_SETUP([ofproto-dpif megaflow - L2 classification])
6045OVS_VSWITCHD_START
623540e4 6046AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6047ADD_OF_PORTS([br0], [1], [2])
6048AT_DATA([flows.txt], [dnl
6049table=0 in_port=1,dl_src=50:54:00:00:00:09 actions=output(2)
6050])
6051AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6052AT_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)'])
6053AT_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)'])
ae692725 6054sleep 1
c2a77f33 6055AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6056recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6057recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b/ff:ff:00:00:00:02,nw_frag=no, actions: <del>
bcd2633a
JP
6058])
6059OVS_VSWITCHD_STOP
6060AT_CLEANUP
6061
6062AT_SETUP([ofproto-dpif megaflow - L3 classification])
6063OVS_VSWITCHD_START
623540e4 6064AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a 6065ADD_OF_PORTS([br0], [1], [2])
13751fd8 6066AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
bcd2633a
JP
6067AT_DATA([flows.txt], [dnl
6068table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=output(2)
6069])
6070AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6071AT_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)'])
6072AT_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)'])
ae692725 6073sleep 1
c2a77f33 6074AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6075recirc_id=0,icmp,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_frag=no, actions: <del>
6076recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.2/0.0.0.2,nw_frag=no, actions: <del>
bcd2633a
JP
6077])
6078OVS_VSWITCHD_STOP
6079AT_CLEANUP
6080
13751fd8
JR
6081AT_SETUP([ofproto-dpif megaflow - IPv6 classification])
6082OVS_VSWITCHD_START
623540e4 6083AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
13751fd8
JR
6084ADD_OF_PORTS([br0], [1], [2])
6085AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=ipv6_dst,ipv6_src], [0], [ignore], [])
6086AT_DATA([flows.txt], [dnl
6087table=0 in_port=1,ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output(2)
6088])
6089AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6090AT_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)'])
6091AT_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)'])
ae692725 6092sleep 1
c2a77f33 6093AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6094recirc_id=0,ipv6,in_port=1,vlan_tci=0x0000,ipv6_src=2001:db8:3c4d:1:2:3:4:5,nw_frag=no, actions: <del>
6095recirc_id=0,ipv6,in_port=1,vlan_tci=0x0000,ipv6_src=2001:db8:3c4d:5:4:3:2:1/0:0:0:4::,nw_frag=no, actions: <del>
13751fd8
JR
6096])
6097OVS_VSWITCHD_STOP
6098AT_CLEANUP
6099
bcd2633a
JP
6100AT_SETUP([ofproto-dpif megaflow - L4 classification])
6101OVS_VSWITCHD_START
623540e4 6102AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6103ADD_OF_PORTS([br0], [1], [2])
6104AT_DATA([flows.txt], [dnl
6105table=0 in_port=1,icmp,icmp_type=8 actions=output(2)
6106])
6107AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6108AT_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)'])
53555f51 6109sleep 1
bcd2633a 6110AT_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)'])
53555f51 6111sleep 1
c2a77f33 6112AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131 6113recirc_id=0,icmp,in_port=1,vlan_tci=0x0000,nw_frag=no,icmp_type=0x8/0xff, actions: <del>
bcd2633a
JP
6114])
6115OVS_VSWITCHD_STOP
6116AT_CLEANUP
6117
6118AT_SETUP([ofproto-dpif megaflow - normal])
6119OVS_VSWITCHD_START
623540e4 6120AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6121ADD_OF_PORTS([br0], [1], [2])
6122AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6123AT_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)'])
6124AT_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)'])
ae692725 6125sleep 1
c2a77f33 6126AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
16194afd
DDP
6127recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
6128recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
bcd2633a
JP
6129])
6130OVS_VSWITCHD_STOP
6131AT_CLEANUP
6132
6133AT_SETUP([ofproto-dpif megaflow - mpls])
6134OVS_VSWITCHD_START
623540e4 6135AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6136ADD_OF_PORTS([br0], [1], [2])
6137AT_DATA([flows.txt], [dnl
6138table=0 dl_src=50:54:00:00:00:09 actions=push_mpls:0x8847,2
6139table=0 dl_src=50:54:00:00:00:0b actions=pop_mpls:0x0800,2
6140])
6141AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6142AT_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)'])
6143AT_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)'])
ae692725 6144sleep 1
c2a77f33 6145AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6146recirc_id=0,mpls,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,mpls_label=11,mpls_tc=3,mpls_ttl=64,mpls_bos=1, actions: <del>
6147recirc_id=0,mpls,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,mpls_bos=1, actions: <del>
bcd2633a
JP
6148])
6149OVS_VSWITCHD_STOP
6150AT_CLEANUP
6151
4819b3a5 6152# CHECK_MEGAFLOW_NETFLOW(LOOPBACK_ADDR)
e731d71b 6153m4_define([CHECK_MEGAFLOW_NETFLOW],
4819b3a5 6154 [OVS_VSWITCHD_START
623540e4 6155 AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
e731d71b
AS
6156 ADD_OF_PORTS([br0], [1], [2])
6157
6158 dnl NetFlow configuration disables wildcarding relevant fields
53eb8cb8 6159 on_exit 'kill `cat test-netflow.pid`'
eadd1644 6160 AT_CHECK([ovstest test-netflow --log-file --detach --no-chdir --pidfile 0:$1 > netflow.log], [0], [], [ignore])
e731d71b 6161 AT_CAPTURE_FILE([netflow.log])
fb28ef2d 6162 PARSE_LISTENING_PORT([test-netflow.log], [NETFLOW_PORT])
e731d71b
AS
6163 ovs-vsctl \
6164 set Bridge br0 netflow=@nf -- \
6165 --id=@nf create NetFlow targets=\"$1:$NETFLOW_PORT\" \
6166 engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false
6167
6168 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6169 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)'])
6170 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)'])
6171 sleep 1
c2a77f33 6172 AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
16194afd
DDP
6173recirc_id=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_frag=no,icmp_type=0x8/0xff,icmp_code=0x0/0xff, actions: <del>
6174recirc_id=0,icmp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_frag=no,icmp_type=0x8/0xff,icmp_code=0x0/0xff, actions: <del>
bcd2633a 6175])
4819b3a5 6176 OVS_VSWITCHD_STOP])
e731d71b 6177
4819b3a5 6178AT_SETUP([ofproto-dpif megaflow - netflow - IPv4 collector])
e731d71b 6179CHECK_MEGAFLOW_NETFLOW([127.0.0.1], [IPv4])
4819b3a5
BP
6180AT_CLEANUP
6181
6182AT_SETUP([ofproto-dpif megaflow - netflow - IPv6 collector])
6183AT_SKIP_IF([test $HAVE_IPV6 = no])
e731d71b 6184CHECK_MEGAFLOW_NETFLOW([[[::1]]], [IPv6])
4819b3a5 6185AT_CLEANUP
bcd2633a
JP
6186
6187AT_SETUP([ofproto-dpif megaflow - normal, active-backup bonding])
6188OVS_VSWITCHD_START(
6189 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
6190 add-bond br0 bond0 p2 p3 bond_mode=active-backup -- \
6191 set interface p2 type=dummy ofport_request=2 -- \
6192 set interface p3 type=dummy ofport_request=3])
6193AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6194])
623540e4 6195AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6196
6197AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6198AT_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)'])
6199AT_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)'])
ae692725 6200sleep 1
c2a77f33 6201AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
16194afd
DDP
6202recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
6203recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
bcd2633a
JP
6204])
6205OVS_VSWITCHD_STOP
6206AT_CLEANUP
6207
6208AT_SETUP([ofproto-dpif megaflow - normal, balance-slb bonding])
6209OVS_VSWITCHD_START(
6210 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 -- \
6211 add-bond br0 bond0 p2 p3 bond_mode=balance-slb -- \
6212 set interface p2 type=dummy ofport_request=2 -- \
6213 set interface p3 type=dummy ofport_request=3])
6214AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6215])
623540e4 6216AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6217
6218AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6219AT_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)'])
6220AT_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)'])
ae692725 6221sleep 1
c2a77f33 6222AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
16194afd
DDP
6223recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
6224recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
bcd2633a
JP
6225])
6226OVS_VSWITCHD_STOP
6227AT_CLEANUP
6228
6229AT_SETUP([ofproto-dpif megaflow - normal, balance-tcp bonding])
6230# Create bond0 on br0 with interfaces p0 and p1
6231# and bond1 on br1 with interfaces p2 and p3
6232# with p0 patched to p2 and p1 patched to p3.
6233OVS_VSWITCHD_START(
6234 [add-bond br0 bond0 p0 p1 bond_mode=balance-tcp lacp=active \
6235 other-config:lacp-time=fast \
6236 other-config:bond-rebalance-interval=0 -- \
6237 set interface p0 type=patch options:peer=p2 ofport_request=1 -- \
6238 set interface p1 type=patch options:peer=p3 ofport_request=2 -- \
6239 add-br br1 -- \
6240 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
6241 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
6242 fail-mode=secure -- \
6243 add-bond br1 bond1 p2 p3 bond_mode=balance-tcp lacp=active \
6244 other-config:lacp-time=fast \
6245 other-config:bond-rebalance-interval=0 -- \
6246 set interface p2 type=patch options:peer=p0 ofport_request=3 -- \
6247 set interface p3 type=patch options:peer=p1 ofport_request=4 --])
6248
6249AT_CHECK([ovs-appctl netdev-dummy/set-admin-state up], 0, [OK
6250])
623540e4 6251AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6252ADD_OF_PORTS([br0], [7])
6253AT_CHECK([ovs-ofctl add-flow br0 action=normal])
6254AT_CHECK([ovs-ofctl add-flow br1 action=normal])
31ef9f51 6255ovs-appctl time/stop
bcd2633a
JP
6256ovs-appctl time/warp 5000
6257AT_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)'])
6258AT_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)'])
53555f51 6259sleep 1
c2a77f33 6260AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
16194afd
DDP
6261recirc_id=0,ip,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions: <del>
6262recirc_id=0,ip,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions: <del>
bcd2633a
JP
6263])
6264OVS_VSWITCHD_STOP
6265AT_CLEANUP
6266
6267AT_SETUP([ofproto-dpif megaflow - resubmit port action])
6268OVS_VSWITCHD_START
623540e4 6269AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6270ADD_OF_PORTS([br0], [1], [2])
6271AT_DATA([flows.txt], [dnl
6272table=0 in_port=1,ip actions=resubmit(90)
6273table=0 in_port=90,dl_src=50:54:00:00:00:09 actions=output(2)
6274])
6275AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6276AT_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)'])
6277AT_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)'])
ae692725 6278sleep 1
c2a77f33 6279AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6280recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6281recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b/ff:ff:00:00:00:02,nw_frag=no, actions: <del>
bcd2633a
JP
6282])
6283OVS_VSWITCHD_STOP
6284AT_CLEANUP
6285
6286AT_SETUP([ofproto-dpif megaflow - resubmit table action])
6287OVS_VSWITCHD_START
623540e4 6288AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6289ADD_OF_PORTS([br0], [1], [2])
6290AT_DATA([flows.txt], [dnl
6291table=0 in_port=1,ip actions=resubmit(,1)
6292table=1 dl_src=50:54:00:00:00:09 actions=output(2)
6293])
6294AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6295AT_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)'])
6296AT_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=
62971,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
ae692725 6298sleep 1
c2a77f33 6299AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6300recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6301recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
bcd2633a
JP
6302])
6303OVS_VSWITCHD_STOP
6304AT_CLEANUP
6305
6306AT_SETUP([ofproto-dpif megaflow - goto_table action])
6307OVS_VSWITCHD_START
623540e4 6308AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6309ADD_OF_PORTS([br0], [1], [2])
6310AT_DATA([flows.txt], [dnl
6311table=0 in_port=1,ip actions=goto_table(1)
6312table=1 dl_src=50:54:00:00:00:09 actions=output(2)
6313])
6314AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
6315AT_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)'])
6316AT_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)'])
ae692725 6317sleep 1
c2a77f33 6318AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6319recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6320recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
bcd2633a
JP
6321])
6322OVS_VSWITCHD_STOP
6323AT_CLEANUP
6324
6325AT_SETUP([ofproto-dpif megaflow - mirroring, select_all])
6326OVS_VSWITCHD_START
623540e4 6327AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6328ADD_OF_PORTS([br0], [1], [2], [3])
6329ovs-vsctl \
6330 set Bridge br0 mirrors=@m --\
6331 --id=@p3 get Port p3 --\
6332 --id=@m create Mirror name=mymirror select_all=true output_port=@p3
6333
6334AT_DATA([flows.txt], [dnl
6335in_port=1 actions=output:2
6336])
6337AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6338AT_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)'])
53555f51 6339sleep 1
bcd2633a 6340AT_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)'])
ae692725 6341sleep 1
c2a77f33 6342AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131 6343recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_frag=no, actions: <del>
bcd2633a
JP
6344])
6345OVS_VSWITCHD_STOP
6346AT_CLEANUP
6347
6348AT_SETUP([ofproto-dpif megaflow - mirroring, select_vlan])
6349OVS_VSWITCHD_START
623540e4 6350AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6351ADD_OF_PORTS([br0], [1], [2], [3])
6352ovs-vsctl \
6353 set Bridge br0 mirrors=@m --\
6354 --id=@p2 get Port p2 -- --id=@p3 get Port p3 --\
6355 --id=@m create Mirror name=mymirror select_all=true select_vlan=11 output_port=@p3
6356
6357AT_DATA([flows.txt], [dnl
6358in_port=1 actions=output:2
6359])
6360AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6361AT_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))'])
6362AT_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)'])
ae692725 6363sleep 1
c2a77f33 6364AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
16194afd
DDP
6365recirc_id=0,ip,in_port=1,dl_vlan=11,nw_frag=no, actions: <del>
6366recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,nw_frag=no, actions: <del>
bcd2633a
JP
6367])
6368OVS_VSWITCHD_STOP
6369AT_CLEANUP
6370
6371AT_SETUP([ofproto-dpif megaflow - move action])
6372OVS_VSWITCHD_START
623540e4 6373AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6374ADD_OF_PORTS([br0], [1], [2])
6375AT_DATA([flows.txt], [dnl
6376table=0 in_port=1 ip,actions=move:NXM_OF_IP_SRC[[]]->NXM_NX_REG0[[]],resubmit(90)
6377table=0 in_port=90 ip,actions=move:NXM_NX_REG0[[]]->NXM_NX_REG1[[]],resubmit(91)
6378table=0 in_port=91 reg0=0x0a000002,actions=output(2)
6379])
6380AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6381AT_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)'])
6382AT_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)'])
ae692725 6383sleep 1
c2a77f33 6384AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6385recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.2,nw_frag=no, actions: <del>
6386recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_frag=no, actions: <del>
bcd2633a
JP
6387])
6388OVS_VSWITCHD_STOP
6389AT_CLEANUP
6390
6391AT_SETUP([ofproto-dpif megaflow - push action])
6392OVS_VSWITCHD_START
623540e4 6393AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6394ADD_OF_PORTS([br0], [1], [2])
6395AT_DATA([flows.txt], [dnl
6396table=0 in_port=1 ip,actions=push:NXM_OF_IP_SRC[[]],output(2)
6397])
6398AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6399AT_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)'])
6400AT_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)'])
ae692725 6401sleep 1
c2a77f33 6402AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6403recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.2,nw_frag=no, actions: <del>
6404recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_frag=no, actions: <del>
bcd2633a
JP
6405])
6406OVS_VSWITCHD_STOP
6407AT_CLEANUP
6408
6409AT_SETUP([ofproto-dpif megaflow - learning])
6410OVS_VSWITCHD_START
623540e4 6411AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
bcd2633a
JP
6412ADD_OF_PORTS([br0], [1], [2])
6413AT_DATA([flows.txt], [dnl
6414table=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
6415])
6416AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
31ef9f51 6417ovs-appctl time/stop
956f2bf0
BP
6418# We send each packet twice because the first packet in each flow causes the
6419# flow table to change and thus revalidations, which (depending on timing)
6420# can keep a megaflow from being installed. The revalidations are done by
6421# the second iteration, allowing the flows to be installed.
6422for i in 1 2; do
6423 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)'])
6424 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)'])
6425 ovs-appctl time/warp 100
6426done
ae692725 6427sleep 1
bcd2633a 6428dnl The original flow is missing due to a revalidation.
c2a77f33 6429AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
d8485a90
AW
6430recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:09,nw_frag=no, actions: <del>
6431recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=50:54:00:00:00:0b,nw_frag=no, actions: <del>
bcd2633a
JP
6432])
6433OVS_VSWITCHD_STOP
6434AT_CLEANUP
d4f4a9b2
JP
6435
6436AT_SETUP([ofproto-dpif megaflow - tunnels])
6437OVS_VSWITCHD_START(
2c0ea78f 6438 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
623540e4 6439AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
2c0ea78f
GS
6440AT_CHECK([ovs-vsctl add-port br0 p2 -- set Interface p2 type=gre \
6441 options:remote_ip=1.1.1.1 ofport_request=2 options:key=flow])
6442AT_CHECK([ovs-vsctl add-port br0 p3 -- set Interface p3 type=dummy \
6443 ofport_request=3])
6444AT_CHECK([ovs-vsctl add-port br0 p4 -- set Interface p4 type=gre \
6445 options:remote_ip=1.1.1.2 options:tos=inherit options:ttl=inherit \
6446 ofport_request=4 options:key=flow])
d4f4a9b2
JP
6447AT_DATA([flows.txt], [dnl
6448in_port=1,actions=output(2)
6449in_port=3,actions=output(4)
6450])
6451AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6452dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
6453dnl will cause the packet to be dropped.
6454AT_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)'])
53555f51 6455sleep 1
d4f4a9b2
JP
6456AT_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)'])
6457AT_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)'])
53555f51 6458sleep 1
d4f4a9b2 6459AT_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)'])
ae692725 6460sleep 1
c2a77f33 6461AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6462recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_ecn=1,nw_frag=no, actions: <del>
6463recirc_id=0,ip,in_port=3,vlan_tci=0x0000,nw_tos=0,nw_ecn=1,nw_ttl=64,nw_frag=no, actions: <del>
6464recirc_id=0,ip,in_port=3,vlan_tci=0x0000,nw_tos=252,nw_ecn=1,nw_ttl=128,nw_frag=no, actions: <del>
1dd35f8a
JP
6465])
6466OVS_VSWITCHD_STOP
6467AT_CLEANUP
6468
6469AT_SETUP([ofproto-dpif megaflow - dec_ttl])
6470OVS_VSWITCHD_START
623540e4 6471AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
1dd35f8a 6472ADD_OF_PORTS([br0], [1], [2])
13751fd8 6473AT_CHECK([ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=t0 prefixes=nw_dst,nw_src], [0], [ignore], [])
1dd35f8a
JP
6474AT_DATA([flows.txt], [dnl
6475table=0 in_port=1,icmp,nw_src=10.0.0.4 actions=dec_ttl,output(2)
6476])
6477AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6478AT_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)'])
6479AT_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)'])
ae692725 6480sleep 1
c2a77f33 6481AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
449b8131
JR
6482recirc_id=0,icmp,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.4,nw_ttl=64,nw_frag=no, actions: <del>
6483recirc_id=0,ip,in_port=1,vlan_tci=0x0000,nw_src=10.0.0.2/0.0.0.2,nw_frag=no, actions: <del>
d4f4a9b2
JP
6484])
6485OVS_VSWITCHD_STOP
6486AT_CLEANUP
74cc3969 6487
f74e7df7
JP
6488AT_SETUP([ofproto-dpif megaflow - set dl_dst])
6489OVS_VSWITCHD_START
623540e4 6490AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
f74e7df7
JP
6491ADD_OF_PORTS([br0], [1], [2])
6492AT_DATA([flows.txt], [dnl
6493table=0 in_port=1 actions=mod_dl_dst(50:54:00:00:00:0a),output(2)
6494])
6495AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6496AT_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)'])
6497AT_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)'])
ae692725 6498sleep 1
d23df9a8
JR
6499dnl The first packet is essentially a no-op, as the new destination MAC is the
6500dnl same as the original. The second entry actually updates the destination
6501dnl MAC.
70e5ed6f 6502AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
449b8131
JR
6503recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_dst=50:54:00:00:00:0a,nw_frag=no, actions:2
6504recirc_id=0,ip,in_port=1,vlan_tci=0x0000,dl_dst=50:54:00:00:00:0c,nw_frag=no, actions:set(eth(dst=50:54:00:00:00:0a)),2
f74e7df7
JP
6505])
6506OVS_VSWITCHD_STOP
6507AT_CLEANUP
6508
8c301900
JR
6509AT_SETUP([ofproto-dpif megaflow - disabled])
6510OVS_VSWITCHD_START
623540e4 6511AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
8c301900
JR
6512ADD_OF_PORTS([br0], [1], [2])
6513AT_DATA([flows.txt], [dnl
6514table=0 in_port=1,ip,nw_dst=10.0.0.1 actions=output(2)
6515table=0 in_port=1,ip,nw_dst=10.0.0.3 actions=drop
6516])
e79a6c83 6517AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
8c301900 6518], [])
64bb477f
JS
6519AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
6520], [])
8c301900
JR
6521AT_CHECK([ovs-appctl vlog/set dpif_netdev:dbg], [0], [], [])
6522AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
6523for i in 1 2 3 4; do
6524 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)'])
6525 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)'])
53555f51
YT
6526 if [[ $i -eq 1 ]]; then
6527 sleep 1
6528 fi
8c301900 6529done
ae692725 6530sleep 1
70e5ed6f 6531AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_INSTALL | STRIP_USED], [0], [dnl
9daf2348
JS
6532pkt_mark=0,recirc_id=0,dp_hash=0,skb_priority=0,ct_state=0,ct_zone=0,ct_mark=0,ct_label=0,icmp,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0, actions:2
6533pkt_mark=0,recirc_id=0,dp_hash=0,skb_priority=0,ct_state=0,ct_zone=0,ct_mark=0,ct_label=0,icmp,in_port=1,vlan_tci=0x0000,dl_src=50:54:00:00:00:0b,dl_dst=50:54:00:00:00:0c,nw_src=10.0.0.4,nw_dst=10.0.0.3,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=8,icmp_code=0, actions:drop
c2a77f33 6534])
70e5ed6f 6535AT_CHECK([cat ovs-vswitchd.log | STRIP_UFID | FILTER_FLOW_DUMP | grep 'packets:3'], [0], [dnl
7d170098 6536skb_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
7d170098 6537skb_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
8c301900
JR
6538])
6539OVS_VSWITCHD_STOP
6540AT_CLEANUP
6541
74cc3969
BP
6542AT_SETUP([ofproto-dpif - datapath port number change])
6543OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
6544ADD_OF_PORTS([br0], 1)
6545
6546# Trace a flow that should output to p1.
6547AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
6548 [0], [stdout])
6549AT_CHECK([tail -1 stdout], [0], [Datapath actions: 1
6550])
6551
6552# Change p1's port number to 5.
6553AT_CHECK([ovs-appctl dpif-dummy/change-port-number ovs-dummy p1 5])
6554
6555# Trace a flow that should output to p1 in its new location.
6556AT_CHECK([ovs-appctl ofproto/trace br0 in_port=LOCAL,dl_src=10:20:30:40:50:60],
6557 [0], [stdout])
6558AT_CHECK([tail -1 stdout], [0], [Datapath actions: 5
6559])
6560OVS_VSWITCHD_STOP
6561AT_CLEANUP
2d344ba5
AW
6562
6563# Tests the bundling with various bfd and cfm configurations.
6564AT_SETUP([ofproto - bundle with variable bfd/cfm config])
6565OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy -- \
6566 add-bond br0 br0bond p0 p2 bond-mode=active-backup -- \
6567 add-bond br1 br1bond p1 p3 bond-mode=active-backup -- \
6568 set Interface p1 type=patch options:peer=p0 ofport_request=2 -- \
6569 set Interface p3 type=patch options:peer=p2 ofport_request=4 -- \
6570 set Interface p0 type=patch options:peer=p1 ofport_request=1 -- \
6571 set Interface p2 type=patch options:peer=p3 ofport_request=3 -- \
6572 set Interface p0 bfd:enable=true bfd:min_tx=300 bfd:min_rx=300 -- \
6573 set Interface p0 cfm_mpid=1 -- \
6574 set Interface p1 bfd:enable=true bfd:min_tx=500 bfd:min_rx=500])
6575
6576ovs-appctl time/stop
6577# advance the clock to stablize everything.
bdba1947 6578ovs-appctl time/warp 5000 100
2d344ba5
AW
6579# cfm/show should show 'recv' fault.
6580AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6581 fault: recv
6582])
6583# bfd/show should show 'up'.
6584AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6585 Local Session State: up
6586 Remote Session State: up
6587 Local Session State: up
6588 Remote Session State: up
6589])
6590# bond/show should show 'may-enable: true' for all slaves.
6591AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6592 may_enable: true
6593 may_enable: true
6594 may_enable: true
6595 may_enable: true
6596])
6597
6598# now disable the bfd on p1.
6599AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=false])
6600# advance the clock to stablize everything.
bdba1947 6601ovs-appctl time/warp 5000 100
2d344ba5
AW
6602# cfm/show should show 'recv' fault.
6603AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6604 fault: recv
6605])
6606# bfd/show should show 'down'.
6607AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6608 Local Session State: down
6609 Remote Session State: down
6610])
6611# bond/show should show 'may-enable: false' for p0.
125bf01d 6612AT_CHECK([ovs-appctl bond/show br0bond | sed -n '/^.*may_enable:.*/p'], [0], [dnl
2d344ba5
AW
6613 may_enable: false
6614 may_enable: true
2d344ba5
AW
6615])
6616
6617# now enable the bfd on p1 and disable bfd on p0.
6618AT_CHECK([ovs-vsctl set Interface p1 bfd:enable=true])
6619AT_CHECK([ovs-vsctl set Interface p0 bfd:enable=false])
6620# advance the clock to stablize everything.
bdba1947 6621ovs-appctl time/warp 5000 100
2d344ba5
AW
6622# cfm/show should show 'recv' fault.
6623AT_CHECK([ovs-appctl cfm/show | sed -n '/^.*fault:.*/p'], [0], [dnl
6624 fault: recv
6625])
6626# bfd/show should show 'down'.
6627AT_CHECK([ovs-appctl bfd/show | sed -n '/^.*Session State:.*/p'], [0], [dnl
6628 Local Session State: down
6629 Remote Session State: down
6630])
6631# bond/show should show 'may-enable: false' for p0 and p1.
6632AT_CHECK([ovs-appctl bond/show | sed -n '/^.*may_enable:.*/p'], [0], [dnl
6633 may_enable: false
6634 may_enable: true
6635 may_enable: false
6636 may_enable: true
6637])
6638
e441a806
AW
6639OVS_VSWITCHD_STOP
6640AT_CLEANUP
6641
6642AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 1])
6643OVS_VSWITCHD_START([add-port br0 p0 -- set interface p0 type=gre options:remote_ip=1.2.3.4])
6644
6645# enable bfd on p0.
6646AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
6647# check log.
1335a8d5 6648OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
e441a806
AW
6649# disable bfd on p0.
6650AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
6651# check log.
1335a8d5 6652OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
e441a806
AW
6653AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
6654
6655# enable cfm on p0.
6656AT_CHECK([ovs-vsctl set interface p0 cfm_mpid=10])
6657# check log.
1335a8d5 6658OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
e441a806
AW
6659# disable cfm on p0.
6660AT_CHECK([ovs-vsctl remove interface p0 cfm_mpid 10])
6661# check log.
1335a8d5 6662OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
e441a806
AW
6663AT_CHECK([cat ovs-vswitchd.log | sed -e '/^.*ofproto_dpif_monitor.*$/d' > ovs-vswitchd.log])
6664
6665# enable both bfd and cfm on p0.
6666AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true cfm_mpid=10])
6667# check log.
1335a8d5 6668OVS_WAIT_UNTIL([grep "monitor thread created" ovs-vswitchd.log])
e441a806
AW
6669# disable bfd on p0.
6670AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false])
6671# check log, there should not be the log of thread terminated.
738cd849 6672AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* terminated\)$/\1/p" ovs-vswitchd.log], [0], [dnl
e441a806
AW
6673])
6674# reenable bfd on p0.
6675AT_CHECK([ovs-vsctl set interface p0 bfd:enable=true])
6676# check log, should still be on log of thread created.
738cd849 6677AT_CHECK([sed -n "s/^.*|ofproto_dpif_monitor(monitor[[0-9]]*)|INFO|\(.* created\)$/\1/p" ovs-vswitchd.log], [0], [dnl
e441a806
AW
6678monitor thread created
6679])
6680# disable bfd and cfm together.
6681AT_CHECK([ovs-vsctl set interface p0 bfd:enable=false -- remove interface p0 cfm_mpid 10])
6682# check log.
1335a8d5 6683OVS_WAIT_UNTIL([grep "monitor thread terminated" ovs-vswitchd.log])
e441a806
AW
6684
6685OVS_VSWITCHD_STOP
6686AT_CLEANUP
6687
6688# this test helps avoid the deadlock between the main thread and monitor thread.
6689AT_SETUP([ofproto-dpif - ofproto-dpif-monitor 2])
6690OVS_VSWITCHD_START
6691
6692for i in `seq 1 199`
6693do
6694 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])
6695done
6696
98cf638b
AW
6697OVS_VSWITCHD_STOP
6698AT_CLEANUP
98b07853
BP
6699\f
6700AT_BANNER([ofproto-dpif - flow translation resource limits])
6701
6702AT_SETUP([ofproto-dpif - infinite resubmit])
6703OVS_VSWITCHD_START
6704AT_CHECK([ovs-ofctl add-flow br0 actions=resubmit:1,resubmit:2,output:3])
222820c6 6705AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'eth_dst=ff:ff:ff:ff:ff:ff'],
98b07853 6706 [0], [stdout])
fff1b9c0
JR
6707AT_CHECK([tail -1 stdout], [0],
6708 [Translation failed (Recursion too deep), packet is dropped.
98b07853 6709])
fff1b9c0 6710AT_CHECK([grep -c 'resubmit actions recursed over 64 times' stdout],
98b07853
BP
6711 [0], [1
6712])
6713OVS_VSWITCHD_STOP(["/resubmit actions recursed/d"])
6714AT_CLEANUP
6715
6716AT_SETUP([ofproto-dpif - exponential resubmit chain])
6717OVS_VSWITCHD_START
6718ADD_OF_PORTS([br0], 1)
6719(for i in `seq 1 64`; do
6720 j=`expr $i + 1`
6721 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6722 done
6723 echo "in_port=65, actions=local") > flows
6724 AT_CHECK([ovs-ofctl add-flows br0 flows])
222820c6 6725AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
fff1b9c0
JR
6726AT_CHECK([tail -1 stdout], [0],
6727 [Translation failed (Too many resubmits), packet is dropped.
6728])
6729AT_CHECK([grep -c 'over 4096 resubmit actions' stdout], [0], [1
98b07853
BP
6730])
6731OVS_VSWITCHD_STOP(["/over.*resubmit actions/d"])
6732AT_CLEANUP
6733
6734AT_SETUP([ofproto-dpif - too many output actions])
6735OVS_VSWITCHD_START
6736ADD_OF_PORTS([br0], 1)
6737(for i in `seq 1 12`; do
6738 j=`expr $i + 1`
6739 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6740 done
6741 echo "in_port=13, actions=local,local,local,local,local,local,local,local") > flows
542024c4 6742AT_CHECK([ovs-ofctl add-flows br0 flows])
222820c6 6743AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
0f032e95
BP
6744AT_CHECK([grep -c -e '- Uses action(s) not supported by datapath' stdout],
6745 [0], [1
98b07853 6746])
fff1b9c0 6747AT_CHECK([grep -c 'resubmits yielded over 64 kB of actions' stdout], [0], [1
542024c4 6748])
0f032e95 6749OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of actions/d"])
98b07853
BP
6750AT_CLEANUP
6751
6752AT_SETUP([ofproto-dpif - stack too deep])
6753OVS_VSWITCHD_START
6754ADD_OF_PORTS([br0], 1)
6755(for i in `seq 1 12`; do
6756 j=`expr $i + 1`
6757 echo "in_port=$i, actions=resubmit:$j, resubmit:$j, local"
6758 done
6759 push="push:NXM_NX_REG0[[]]"
6760 echo "in_port=13, actions=$push,$push,$push,$push,$push,$push,$push,$push") > flows
6761 AT_CHECK([ovs-ofctl add-flows br0 flows])
222820c6 6762AT_CHECK([ovs-appctl -vpoll_loop:off ofproto/trace br0 'in_port=1'], [0], [stdout])
fff1b9c0
JR
6763AT_CHECK([tail -1 stdout], [0],
6764 [Translation failed (Stack too deep), packet is dropped.
6765])
6766AT_CHECK([grep -c 'resubmits yielded over 64 kB of stack' stdout], [0], [1
98b07853
BP
6767])
6768OVS_VSWITCHD_STOP(["/resubmits yielded over 64 kB of stack/d"])
6769AT_CLEANUP
d611866c
SH
6770
6771
2608616d 6772AT_SETUP([ofproto-dpif packet-out controller])
d611866c
SH
6773OVS_VSWITCHD_START
6774ADD_OF_PORTS([br0], 1, 2)
6775
6776AT_CHECK([ovs-ofctl add-flow br0 'dl_dst=50:54:00:00:00:0a actions=controller'])
6777
6778AT_CAPTURE_FILE([ofctl_monitor.log])
6779AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6780
6781for i in 1 2 3; do
6782 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER controller '50540000000a5054000000091234'])
6783done
6784
6785OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6786AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6787NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
e6d9ab56 6788vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6789dnl
6790NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
e6d9ab56 6791vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6792dnl
6793NXT_PACKET_IN (xid=0x0): total_len=14 in_port=CONTROLLER (via action) data_len=14 (unbuffered)
e6d9ab56 6794vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6795])
6796
6797AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sort], [0], [dnl
6798 dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6799NXST_FLOW reply:
6800])
6801
3c1bb396
BP
6802(echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6803 table 0:
8811fc0a
BP
6804 active=1, lookup=0, matched=0
6805
6806 table 1:
6807 active=0, lookup=0, matched=0
6808"
6809 for i in `seq 2 253`; do
6810 printf ' table %d: ditto\n' $i
d611866c
SH
6811 done) > expout
6812AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6813
6814OVS_VSWITCHD_STOP
6815AT_CLEANUP
6816
2608616d 6817AT_SETUP([ofproto-dpif packet-out controller (patch port)])
d611866c
SH
6818OVS_VSWITCHD_START(
6819 [-- \
6820 add-port br0 p1 -- \
6821 set interface p1 type=patch options:peer=p2 -- \
6822 add-br br1 -- \
6823 set bridge br1 datapath-type=dummy -- \
6824 set bridge br1 fail-mode=secure -- \
6825 set bridge br1 protocols='[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13]' -- \
6826 add-port br1 p2 -- \
6827 set interface p2 type=patch options:peer=p1 --])
6828
6829AT_CAPTURE_FILE([ofctl_monitor.log])
6830AT_CHECK([ovs-ofctl monitor br1 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6831
6832for i in 1 2 3; do
6833 AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 CONTROLLER output:1 '50540000000a5054000000091234'])
6834done
6835
6836OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6837AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6838NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
e6d9ab56 6839vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6840dnl
6841NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
e6d9ab56 6842vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6843dnl
6844NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=14 in_port=1 (via no_match) data_len=14 (unbuffered)
e6d9ab56 6845vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6846])
6847
8811fc0a
BP
6848(echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6849 table 0:
6850 active=0, lookup=0, matched=0
6851"
6852 for i in `seq 1 253`; do
6853 printf ' table %d: ditto\n' $i
d611866c
SH
6854 done) > expout
6855AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6856
3c1bb396
BP
6857(echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6858 table 0:
8811fc0a
BP
6859 active=0, lookup=3, matched=0
6860
6861 table 1:
6862 active=0, lookup=0, matched=0
6863"
6864 for i in `seq 2 253`; do
6865 printf ' table %d: ditto\n' $i
d611866c
SH
6866 done) > expout
6867AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br1 ], [0], [expout])
6868
6869OVS_VSWITCHD_STOP
6870AT_CLEANUP
6871
6872
2608616d 6873AT_SETUP([ofproto-dpif packet-out goto_table])
d611866c
SH
6874OVS_VSWITCHD_START
6875ADD_OF_PORTS([br0], 1, 2)
6876
6877AT_DATA([flows.txt], [dnl
6878table=0 dl_dst=50:54:00:00:00:0a actions=goto_table(1)
6879table=1 dl_dst=50:54:00:00:00:0a actions=controller
6880])
6881AT_CHECK([ovs-ofctl -O OpenFlow13 add-flows br0 flows.txt])
6882
6883AT_CAPTURE_FILE([ofctl_monitor.log])
6884AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6885
6886for i in 1 2 3; do
6887 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)'
6888done
6889
6890OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6891OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6892AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6893NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 6894vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6895dnl
6896NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 6897vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6898dnl
6899NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 6900vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6901])
6902
cea4a6d7 6903AT_CHECK([ovs-appctl revalidator/purge], [0])
d611866c
SH
6904AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip | sort], [0], [dnl
6905 n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=goto_table:1
6906 table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
6907OFPST_FLOW reply (OF1.3):
6908])
6909
3c1bb396
BP
6910(echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6911 table 0:
6912 active=1, lookup=3, matched=3
6913
8811fc0a
BP
6914 table 1: ditto
6915 table 2:
6916 active=0, lookup=0, matched=0
6917"
6918 for i in `seq 3 253`; do
6919 printf ' table %d: ditto\n' $i
d611866c
SH
6920 done) > expout
6921AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6922
6923OVS_VSWITCHD_STOP
6924AT_CLEANUP
6925
6926
2608616d 6927AT_SETUP([ofproto-dpif packet-out table-miss (continue)])
d611866c
SH
6928OVS_VSWITCHD_START
6929ADD_OF_PORTS([br0], 1, 2)
6930
3c1bb396
BP
6931AT_CHECK([ovs-ofctl -O OpenFlow11 add-flow br0 'table=1 dl_dst=50:54:00:00:00:0a actions=controller'])
6932AT_CHECK([ovs-ofctl -O OpenFlow11 mod-table br0 all continue])
d611866c
SH
6933
6934AT_CAPTURE_FILE([ofctl_monitor.log])
6935AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6936
6937for i in 1 2 3; do
6938 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)'
6939done
6940
6941OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 6])
6942OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6943AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6944NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 6945vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6946dnl
6947NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 6948vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6949dnl
6950NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x0 total_len=60 in_port=1 (via action) data_len=60 (unbuffered)
e6d9ab56 6951vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,dl_type=0x1234
d611866c
SH
6952])
6953
cea4a6d7 6954AT_CHECK([ovs-appctl revalidator/purge], [0])
3c1bb396 6955AT_CHECK([ovs-ofctl -O OpenFlow11 dump-flows br0 | ofctl_strip | sort], [0], [dnl
d611866c 6956 table=1, n_packets=3, n_bytes=180, dl_dst=50:54:00:00:00:0a actions=CONTROLLER:65535
3c1bb396 6957OFPST_FLOW reply (OF1.1):
d611866c
SH
6958])
6959
3c1bb396
BP
6960(echo "OFPST_TABLE reply (OF1.3) (xid=0x2):
6961 table 0:
6962 active=0, lookup=3, matched=0
6963
6964 table 1:
8811fc0a
BP
6965 active=1, lookup=3, matched=3
6966
6967 table 2:
6968 active=0, lookup=0, matched=0
6969"
6970 for i in `seq 3 253`; do
6971 printf ' table %d: ditto\n' $i
d611866c
SH
6972 done) > expout
6973AT_CHECK([ovs-ofctl -O OpenFlow13 dump-tables br0 ], [0], [expout])
6974
6975OVS_VSWITCHD_STOP
6976AT_CLEANUP
b0e2ec32
JR
6977
6978AT_SETUP([ofproto-dpif - ICMPv6])
6979OVS_VSWITCHD_START
6980ADD_OF_PORTS([br0], 1)
6981
6982AT_CAPTURE_FILE([ofctl_monitor.log])
6983
6984AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
6985
6986ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
6987
6988OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
6989
6990AT_CHECK([cat ofctl_monitor.log], [0], [dnl
6991NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via no_match) data_len=86 (unbuffered)
e6d9ab56 6992icmp6,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 icmp6_csum:68bd
b0e2ec32
JR
6993])
6994
6995OVS_VSWITCHD_STOP
6996AT_CLEANUP
e60e935b
SRCSA
6997
6998AT_SETUP([ofproto-dpif - Neighbor Discovery set-field with checksum update])
6999OVS_VSWITCHD_START
7000ADD_OF_PORTS([br0], 1)
7001AT_CHECK([ovs-ofctl add-flow br0 icmp6,icmpv6_type=135,action=set_field:fe80::1-\>nd_target,set_field:32:21:14:86:11:74-\>nd_sll,output:controller])
7002
7003AT_CAPTURE_FILE([ofctl_monitor.log])
7004
7005AT_CHECK([ovs-ofctl monitor br0 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log])
7006
7007ovs-appctl netdev-dummy/receive p1 '0060970769ea0000860580da86dd6000000000203afffe80000000000000020086fffe0580dafe80000000000000026097fffe0769ea870068bd00000000fe80000000000000026097fffe0769ea01010000860580da'
7008
7009OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit])
7010
7011AT_CHECK([cat ofctl_monitor.log], [0], [dnl
7012NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=86 in_port=1 (via action) data_len=86 (unbuffered)
e6d9ab56 7013icmp6,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::1,nd_sll=32:21:14:86:11:74,nd_tll=00:00:00:00:00:00 icmp6_csum:19d3
e60e935b
SRCSA
7014])
7015
7016OVS_VSWITCHD_STOP
7017AT_CLEANUP
7018
f171fa88
AW
7019# Tests the exact match of CFI bit in installed datapath flows matching VLAN.
7020AT_SETUP([ofproto-dpif - vlan matching])
7021OVS_VSWITCHD_START(
7022 [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
7023AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7024
7025AT_CHECK([ovs-ofctl del-flows br0])
7026AT_CHECK([ovs-ofctl add-flow br0 "vlan_tci=0x000a/0x0fff,action=output:local"])
7027
7028AT_CHECK([ovs-appctl netdev-dummy/receive p0 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=10,pcp=0),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))'])
7029
47567945 7030OVS_WAIT_UNTIL([grep flow_add: ovs-vswitchd.log])
f171fa88
AW
7031AT_CHECK([cat ovs-vswitchd.log | grep 'in_port=[[1]]' | FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
7032recirc_id=0,ip,in_port=1,dl_vlan=10,nw_frag=no, actions: <del>
7033])
7034OVS_VSWITCHD_STOP
7035AT_CLEANUP
43b2f131
EJ
7036
7037# Tests in place modification of installed datapath flows.
7038AT_SETUP([ofproto-dpif - in place modification])
7039OVS_VSWITCHD_START(
7040 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
7041AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7042
7043AT_CHECK([ovs-ofctl del-flows br0])
7044AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=mod_vlan_vid:3,output:local])
7045
7046ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
7047
7048ovs-appctl time/stop
7049
7050for i in 1 2 3; do
7051 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)'
7052done
7053
7054AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7055recirc_id(0),in_port(1),eth_type(0x1234), packets:2, bytes:120, used:0.0s, actions:push_vlan(vid=3,pcp=0),100
7056])
7057
7058AT_CHECK([ovs-ofctl add-flow br0 priority=60000,in_port=1,actions=mod_vlan_vid:4,output:local])
7059
7060ovs-appctl time/warp 500
7061ovs-appctl time/warp 500
7062
7063for i in 1 2 3; do
7064 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)'
7065done
7066
7067AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7068recirc_id(0),in_port(1),eth_type(0x1234), packets:5, bytes:300, used:0.0s, actions:push_vlan(vid=4,pcp=0),100
7069])
7070
7071AT_CHECK([cat ovs-vswitchd.log | grep 'modify' | STRIP_UFID ], [0], [dnl
7072dpif|DBG|dummy@ovs-dummy: put[[modify]] skb_priority(0/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(0x1234), actions:push_vlan(vid=4,pcp=0),100
7073])
7074OVS_VSWITCHD_STOP
7075AT_CLEANUP
449b8131
JR
7076
7077# Tests in place modification of installed datapath flows with vlans.
7078AT_SETUP([ofproto-dpif - in place modification (vlan)])
7079OVS_VSWITCHD_START(
7080 [add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1])
7081AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
7082
7083AT_CHECK([ovs-ofctl del-flows br0])
7084AT_CHECK([ovs-ofctl add-flow br0 in_port=1,actions=output:local])
7085
7086ovs-appctl vlog/set PATTERN:ANY:'%c|%p|%m'
7087
7088ovs-appctl time/stop
7089
7090# Check that a correct datapath flow is created.
7091for i in 1 2 3; do
7092 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)'
7093done
7094
7095AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7096recirc_id(0),in_port(1),eth_type(0x1234), packets:2, bytes:120, used:0.0s, actions:100
7097])
7098
7099# Delete the flow. Then check that the datapath flow is modified to
7100# drop the packets. A modified flow inherits the stats, a new
7101# datapath flow would start from sero.
7102AT_CHECK([ovs-ofctl del-flows br0])
7103
7104ovs-appctl time/warp 500
7105ovs-appctl time/warp 500
7106
7107for i in 1 2 3; do
7108 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)'
7109done
7110
7111AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7112recirc_id(0),in_port(1),eth_type(0x1234), packets:5, bytes:300, used:0.0s, actions:drop
7113])
7114
7115# Add a flow that matches the non-presence of a vlan tag, and check
7116# that the datapath flow is modified accordingly.
7117AT_CHECK([ovs-ofctl add-flow br0 in_port=1,vlan_tci=0x0000/0x1fff,actions=output:local])
7118
7119ovs-appctl time/warp 500
7120ovs-appctl time/warp 500
7121
7122for i in 1 2 3; do
7123 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)'
7124done
7125
7126AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7127recirc_id(0),in_port(1),eth_type(0x1234), packets:8, bytes:480, used:0.0s, actions:100
7128])
7129
7130# Check that VLAN packets will not hit the same datapath megaflow.
7131for i in 1 2 3; do
7132 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=99,pcp=7),encap(eth_type(0x1234))'
7133done
7134
7135AT_CHECK([ovs-appctl dpif/dump-flows br0 | STRIP_UFID | STRIP_USED | sort], [0], [dnl
7136recirc_id(0),in_port(1),eth_type(0x1234), packets:8, bytes:480, used:0.0s, actions:100
7137recirc_id(0),in_port(1),eth_type(0x8100),vlan(vid=99/0x0,pcp=7/0x0),encap(eth_type(0x1234)), packets:2, bytes:120, used:0.0s, actions:drop
7138])
7139
7140# Check that the new flow matches the CFI bit, while both vid and pcp
7141# are wildcarded.
7142AT_CHECK([cat ovs-vswitchd.log | grep '\(modify\)\|\(flow_add\)' | STRIP_UFID ], [0], [dnl
7143dpif_netdev|DBG|flow_add: recirc_id=0,in_port=1,vlan_tci=0x0000,dl_type=0x1234, actions:100
7144dpif|DBG|dummy@ovs-dummy: put[[modify]] skb_priority(0/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(0x1234)
7145dpif|DBG|dummy@ovs-dummy: put[[modify]] skb_priority(0/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(0x1234), actions:100
7146dpif_netdev|DBG|flow_add: recirc_id=0,in_port=1,vlan_tci=0xf063/0x1000,dl_type=0x1234, actions:drop
7147])
7148OVS_VSWITCHD_STOP
7149AT_CLEANUP