Skip to content

Commit 4cec852

Browse files
pmachatadavem330
authored andcommitted
selftests: forwarding: Add Q-in-VNI test
Add test to check Q-in-VNI traffic. Signed-off-by: Petr Machata <[email protected]> Signed-off-by: Ido Schimmel <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 745f73d commit 4cec852

File tree

1 file changed

+347
-0
lines changed

1 file changed

+347
-0
lines changed
Lines changed: 347 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,347 @@
1+
#!/bin/bash
2+
# SPDX-License-Identifier: GPL-2.0
3+
4+
# +-----------------------+ +------------------------+
5+
# | H1 (vrf) | | H2 (vrf) |
6+
# | + $h1.10 | | + $h2.10 |
7+
# | | 192.0.2.1/28 | | | 192.0.2.2/28 |
8+
# | | | | | |
9+
# | | + $h1.20 | | | + $h2.20 |
10+
# | \ | 198.51.100.1/24 | | \ | 198.51.100.2/24 |
11+
# | \| | | \| |
12+
# | + $h1 | | + $h2 |
13+
# +----|------------------+ +----|-------------------+
14+
# | |
15+
# +----|--------------------------------------------------|-------------------+
16+
# | SW | | |
17+
# | +--|--------------------------------------------------|-----------------+ |
18+
# | | + $swp1 BR1 (802.1ad) + $swp2 | |
19+
# | | vid 100 pvid untagged vid 100 pvid | |
20+
# | | untagged | |
21+
# | | + vx100 (vxlan) | |
22+
# | | local 192.0.2.17 | |
23+
# | | remote 192.0.2.34 192.0.2.50 | |
24+
# | | id 1000 dstport $VXPORT | |
25+
# | | vid 100 pvid untagged | |
26+
# | +-----------------------------------------------------------------------+ |
27+
# | |
28+
# | 192.0.2.32/28 via 192.0.2.18 |
29+
# | 192.0.2.48/28 via 192.0.2.18 |
30+
# | |
31+
# | + $rp1 |
32+
# | | 192.0.2.17/28 |
33+
# +----|----------------------------------------------------------------------+
34+
# |
35+
# +----|--------------------------------------------------------+
36+
# | | VRP2 (vrf) |
37+
# | + $rp2 |
38+
# | 192.0.2.18/28 |
39+
# | | (maybe) HW
40+
# =============================================================================
41+
# | | (likely) SW
42+
# | + v1 (veth) + v3 (veth) |
43+
# | | 192.0.2.33/28 | 192.0.2.49/28 |
44+
# +----|---------------------------------------|----------------+
45+
# | |
46+
# +----|------------------------------+ +----|------------------------------+
47+
# | + v2 (veth) NS1 (netns) | | + v4 (veth) NS2 (netns) |
48+
# | 192.0.2.34/28 | | 192.0.2.50/28 |
49+
# | | | |
50+
# | 192.0.2.16/28 via 192.0.2.33 | | 192.0.2.16/28 via 192.0.2.49 |
51+
# | 192.0.2.50/32 via 192.0.2.33 | | 192.0.2.34/32 via 192.0.2.49 |
52+
# | | | |
53+
# | +-------------------------------+ | | +-------------------------------+ |
54+
# | | BR2 (802.1ad) | | | | BR2 (802.1ad) | |
55+
# | | + vx100 (vxlan) | | | | + vx100 (vxlan) | |
56+
# | | local 192.0.2.34 | | | | local 192.0.2.50 | |
57+
# | | remote 192.0.2.17 | | | | remote 192.0.2.17 | |
58+
# | | remote 192.0.2.50 | | | | remote 192.0.2.34 | |
59+
# | | id 1000 dstport $VXPORT | | | | id 1000 dstport $VXPORT | |
60+
# | | vid 100 pvid untagged | | | | vid 100 pvid untagged | |
61+
# | | | | | | | |
62+
# | | + w1 (veth) | | | | + w1 (veth) | |
63+
# | | | vid 100 pvid untagged | | | | | vid 100 pvid untagged | |
64+
# | +--|----------------------------+ | | +--|----------------------------+ |
65+
# | | | | | |
66+
# | +--|----------------------------+ | | +--|----------------------------+ |
67+
# | | | VW2 (vrf) | | | | | VW2 (vrf) | |
68+
# | | + w2 (veth) | | | | + w2 (veth) | |
69+
# | | |\ | | | | |\ | |
70+
# | | | + w2.10 | | | | | + w2.10 | |
71+
# | | | 192.0.2.3/28 | | | | | 192.0.2.4/28 | |
72+
# | | | | | | | | | |
73+
# | | + w2.20 | | | | + w2.20 | |
74+
# | | 198.51.100.3/24 | | | | 198.51.100.4/24 | |
75+
# | +-------------------------------+ | | +-------------------------------+ |
76+
# +-----------------------------------+ +-----------------------------------+
77+
78+
: ${VXPORT:=4789}
79+
export VXPORT
80+
81+
: ${ALL_TESTS:="
82+
ping_ipv4
83+
"}
84+
85+
NUM_NETIFS=6
86+
source lib.sh
87+
88+
h1_create()
89+
{
90+
simple_if_init $h1
91+
tc qdisc add dev $h1 clsact
92+
vlan_create $h1 10 v$h1 192.0.2.1/28
93+
vlan_create $h1 20 v$h1 198.51.100.1/24
94+
}
95+
96+
h1_destroy()
97+
{
98+
vlan_destroy $h1 20
99+
vlan_destroy $h1 10
100+
tc qdisc del dev $h1 clsact
101+
simple_if_fini $h1
102+
}
103+
104+
h2_create()
105+
{
106+
simple_if_init $h2
107+
tc qdisc add dev $h2 clsact
108+
vlan_create $h2 10 v$h2 192.0.2.2/28
109+
vlan_create $h2 20 v$h2 198.51.100.2/24
110+
}
111+
112+
h2_destroy()
113+
{
114+
vlan_destroy $h2 20
115+
vlan_destroy $h2 10
116+
tc qdisc del dev $h2 clsact
117+
simple_if_fini $h2
118+
}
119+
120+
rp1_set_addr()
121+
{
122+
ip address add dev $rp1 192.0.2.17/28
123+
124+
ip route add 192.0.2.32/28 nexthop via 192.0.2.18
125+
ip route add 192.0.2.48/28 nexthop via 192.0.2.18
126+
}
127+
128+
rp1_unset_addr()
129+
{
130+
ip route del 192.0.2.48/28 nexthop via 192.0.2.18
131+
ip route del 192.0.2.32/28 nexthop via 192.0.2.18
132+
133+
ip address del dev $rp1 192.0.2.17/28
134+
}
135+
136+
switch_create()
137+
{
138+
ip link add name br1 type bridge vlan_filtering 1 vlan_protocol 802.1ad \
139+
vlan_default_pvid 0 mcast_snooping 0
140+
# Make sure the bridge uses the MAC address of the local port and not
141+
# that of the VxLAN's device.
142+
ip link set dev br1 address $(mac_get $swp1)
143+
ip link set dev br1 up
144+
145+
ip link set dev $rp1 up
146+
rp1_set_addr
147+
148+
ip link add name vx100 type vxlan id 1000 \
149+
local 192.0.2.17 dstport "$VXPORT" \
150+
nolearning noudpcsum tos inherit ttl 100
151+
ip link set dev vx100 up
152+
153+
ip link set dev vx100 master br1
154+
bridge vlan add vid 100 dev vx100 pvid untagged
155+
156+
ip link set dev $swp1 master br1
157+
ip link set dev $swp1 up
158+
bridge vlan add vid 100 dev $swp1 pvid untagged
159+
160+
ip link set dev $swp2 master br1
161+
ip link set dev $swp2 up
162+
bridge vlan add vid 100 dev $swp2 pvid untagged
163+
164+
bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.34 self
165+
bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.50 self
166+
}
167+
168+
switch_destroy()
169+
{
170+
bridge fdb del dev vx100 00:00:00:00:00:00 dst 192.0.2.50 self
171+
bridge fdb del dev vx100 00:00:00:00:00:00 dst 192.0.2.34 self
172+
173+
bridge vlan del vid 100 dev $swp2
174+
ip link set dev $swp2 down
175+
ip link set dev $swp2 nomaster
176+
177+
bridge vlan del vid 100 dev $swp1
178+
ip link set dev $swp1 down
179+
ip link set dev $swp1 nomaster
180+
181+
ip link set dev vx100 nomaster
182+
ip link set dev vx100 down
183+
ip link del dev vx100
184+
185+
rp1_unset_addr
186+
ip link set dev $rp1 down
187+
188+
ip link set dev br1 down
189+
ip link del dev br1
190+
}
191+
192+
vrp2_create()
193+
{
194+
simple_if_init $rp2 192.0.2.18/28
195+
__simple_if_init v1 v$rp2 192.0.2.33/28
196+
__simple_if_init v3 v$rp2 192.0.2.49/28
197+
tc qdisc add dev v1 clsact
198+
}
199+
200+
vrp2_destroy()
201+
{
202+
tc qdisc del dev v1 clsact
203+
__simple_if_fini v3 192.0.2.49/28
204+
__simple_if_fini v1 192.0.2.33/28
205+
simple_if_fini $rp2 192.0.2.18/28
206+
}
207+
208+
ns_init_common()
209+
{
210+
local in_if=$1; shift
211+
local in_addr=$1; shift
212+
local other_in_addr=$1; shift
213+
local nh_addr=$1; shift
214+
local host_addr1=$1; shift
215+
local host_addr2=$1; shift
216+
217+
ip link set dev $in_if up
218+
ip address add dev $in_if $in_addr/28
219+
tc qdisc add dev $in_if clsact
220+
221+
ip link add name br2 type bridge vlan_filtering 1 vlan_protocol 802.1ad \
222+
vlan_default_pvid 0
223+
ip link set dev br2 up
224+
225+
ip link add name w1 type veth peer name w2
226+
227+
ip link set dev w1 master br2
228+
ip link set dev w1 up
229+
bridge vlan add vid 100 dev w1 pvid untagged
230+
231+
ip link add name vx100 type vxlan id 1000 local $in_addr \
232+
dstport "$VXPORT"
233+
ip link set dev vx100 up
234+
bridge fdb append dev vx100 00:00:00:00:00:00 dst 192.0.2.17 self
235+
bridge fdb append dev vx100 00:00:00:00:00:00 dst $other_in_addr self
236+
237+
ip link set dev vx100 master br2
238+
tc qdisc add dev vx100 clsact
239+
240+
bridge vlan add vid 100 dev vx100 pvid untagged
241+
242+
simple_if_init w2
243+
vlan_create w2 10 vw2 $host_addr1/28
244+
vlan_create w2 20 vw2 $host_addr2/24
245+
246+
ip route add 192.0.2.16/28 nexthop via $nh_addr
247+
ip route add $other_in_addr/32 nexthop via $nh_addr
248+
}
249+
export -f ns_init_common
250+
251+
ns1_create()
252+
{
253+
ip netns add ns1
254+
ip link set dev v2 netns ns1
255+
in_ns ns1 \
256+
ns_init_common v2 192.0.2.34 192.0.2.50 192.0.2.33 \
257+
192.0.2.3 198.51.100.3
258+
}
259+
260+
ns1_destroy()
261+
{
262+
ip netns exec ns1 ip link set dev v2 netns 1
263+
ip netns del ns1
264+
}
265+
266+
ns2_create()
267+
{
268+
ip netns add ns2
269+
ip link set dev v4 netns ns2
270+
in_ns ns2 \
271+
ns_init_common v4 192.0.2.50 192.0.2.34 192.0.2.49 \
272+
192.0.2.4 198.51.100.4
273+
}
274+
275+
ns2_destroy()
276+
{
277+
ip netns exec ns2 ip link set dev v4 netns 1
278+
ip netns del ns2
279+
}
280+
281+
setup_prepare()
282+
{
283+
h1=${NETIFS[p1]}
284+
swp1=${NETIFS[p2]}
285+
286+
swp2=${NETIFS[p3]}
287+
h2=${NETIFS[p4]}
288+
289+
rp1=${NETIFS[p5]}
290+
rp2=${NETIFS[p6]}
291+
292+
vrf_prepare
293+
forwarding_enable
294+
295+
h1_create
296+
h2_create
297+
switch_create
298+
299+
ip link add name v1 type veth peer name v2
300+
ip link add name v3 type veth peer name v4
301+
vrp2_create
302+
ns1_create
303+
ns2_create
304+
305+
r1_mac=$(in_ns ns1 mac_get w2)
306+
r2_mac=$(in_ns ns2 mac_get w2)
307+
h2_mac=$(mac_get $h2)
308+
}
309+
310+
cleanup()
311+
{
312+
pre_cleanup
313+
314+
ns2_destroy
315+
ns1_destroy
316+
vrp2_destroy
317+
ip link del dev v3
318+
ip link del dev v1
319+
320+
switch_destroy
321+
h2_destroy
322+
h1_destroy
323+
324+
forwarding_restore
325+
vrf_cleanup
326+
}
327+
328+
ping_ipv4()
329+
{
330+
ping_test $h1 192.0.2.2 ": local->local"
331+
ping_test $h1 192.0.2.3 ": local->remote 1"
332+
ping_test $h1 192.0.2.4 ": local->remote 2"
333+
}
334+
335+
test_all()
336+
{
337+
echo "Running tests with UDP port $VXPORT"
338+
tests_run
339+
}
340+
341+
trap cleanup EXIT
342+
343+
setup_prepare
344+
setup_wait
345+
test_all
346+
347+
exit $EXIT_STATUS

0 commit comments

Comments
 (0)