1*e96fa54bSIdo Schimmel#!/bin/bash
2*e96fa54bSIdo Schimmel# SPDX-License-Identifier: GPL-2.0
3*e96fa54bSIdo Schimmel
4*e96fa54bSIdo SchimmelALL_TESTS="
5*e96fa54bSIdo Schimmel	ping_ipv4
6*e96fa54bSIdo Schimmel	ping_ipv6
7*e96fa54bSIdo Schimmel"
8*e96fa54bSIdo Schimmel
9*e96fa54bSIdo SchimmelNUM_NETIFS=4
10*e96fa54bSIdo Schimmelsource lib.sh
11*e96fa54bSIdo Schimmelsource tc_common.sh
12*e96fa54bSIdo Schimmel
13*e96fa54bSIdo Schimmelh1_create()
14*e96fa54bSIdo Schimmel{
15*e96fa54bSIdo Schimmel	vrf_create "vrf-h1"
16*e96fa54bSIdo Schimmel	ip link set dev $h1 master vrf-h1
17*e96fa54bSIdo Schimmel
18*e96fa54bSIdo Schimmel	ip link set dev vrf-h1 up
19*e96fa54bSIdo Schimmel	ip link set dev $h1 up
20*e96fa54bSIdo Schimmel
21*e96fa54bSIdo Schimmel	ip address add 192.0.2.2/24 dev $h1
22*e96fa54bSIdo Schimmel	ip address add 2001:db8:1::2/64 dev $h1
23*e96fa54bSIdo Schimmel
24*e96fa54bSIdo Schimmel	ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.1
25*e96fa54bSIdo Schimmel	ip route add 2001:db8:2::/64 vrf vrf-h1 nexthop via 2001:db8:1::1
26*e96fa54bSIdo Schimmel}
27*e96fa54bSIdo Schimmel
28*e96fa54bSIdo Schimmelh1_destroy()
29*e96fa54bSIdo Schimmel{
30*e96fa54bSIdo Schimmel	ip route del 2001:db8:2::/64 vrf vrf-h1
31*e96fa54bSIdo Schimmel	ip route del 198.51.100.0/24 vrf vrf-h1
32*e96fa54bSIdo Schimmel
33*e96fa54bSIdo Schimmel	ip address del 2001:db8:1::2/64 dev $h1
34*e96fa54bSIdo Schimmel	ip address del 192.0.2.2/24 dev $h1
35*e96fa54bSIdo Schimmel
36*e96fa54bSIdo Schimmel	ip link set dev $h1 down
37*e96fa54bSIdo Schimmel	vrf_destroy "vrf-h1"
38*e96fa54bSIdo Schimmel}
39*e96fa54bSIdo Schimmel
40*e96fa54bSIdo Schimmelh2_create()
41*e96fa54bSIdo Schimmel{
42*e96fa54bSIdo Schimmel	vrf_create "vrf-h2"
43*e96fa54bSIdo Schimmel	ip link set dev $h2 master vrf-h2
44*e96fa54bSIdo Schimmel
45*e96fa54bSIdo Schimmel	ip link set dev vrf-h2 up
46*e96fa54bSIdo Schimmel	ip link set dev $h2 up
47*e96fa54bSIdo Schimmel
48*e96fa54bSIdo Schimmel	ip address add 198.51.100.2/24 dev $h2
49*e96fa54bSIdo Schimmel	ip address add 2001:db8:2::2/64 dev $h2
50*e96fa54bSIdo Schimmel
51*e96fa54bSIdo Schimmel	ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.1
52*e96fa54bSIdo Schimmel	ip route add 2001:db8:1::/64 vrf vrf-h2 nexthop via 2001:db8:2::1
53*e96fa54bSIdo Schimmel}
54*e96fa54bSIdo Schimmel
55*e96fa54bSIdo Schimmelh2_destroy()
56*e96fa54bSIdo Schimmel{
57*e96fa54bSIdo Schimmel	ip route del 2001:db8:1::/64 vrf vrf-h2
58*e96fa54bSIdo Schimmel	ip route del 192.0.2.0/24 vrf vrf-h2
59*e96fa54bSIdo Schimmel
60*e96fa54bSIdo Schimmel	ip address del 2001:db8:2::2/64 dev $h2
61*e96fa54bSIdo Schimmel	ip address del 198.51.100.2/24 dev $h2
62*e96fa54bSIdo Schimmel
63*e96fa54bSIdo Schimmel	ip link set dev $h2 down
64*e96fa54bSIdo Schimmel	vrf_destroy "vrf-h2"
65*e96fa54bSIdo Schimmel}
66*e96fa54bSIdo Schimmel
67*e96fa54bSIdo Schimmelrouter_create()
68*e96fa54bSIdo Schimmel{
69*e96fa54bSIdo Schimmel	ip link set dev $rp1 up
70*e96fa54bSIdo Schimmel	ip link set dev $rp2 up
71*e96fa54bSIdo Schimmel
72*e96fa54bSIdo Schimmel	tc qdisc add dev $rp2 clsact
73*e96fa54bSIdo Schimmel
74*e96fa54bSIdo Schimmel	ip address add 192.0.2.1/24 dev $rp1
75*e96fa54bSIdo Schimmel	ip address add 2001:db8:1::1/64 dev $rp1
76*e96fa54bSIdo Schimmel
77*e96fa54bSIdo Schimmel	ip address add 198.51.100.1/24 dev $rp2
78*e96fa54bSIdo Schimmel	ip address add 2001:db8:2::1/64 dev $rp2
79*e96fa54bSIdo Schimmel}
80*e96fa54bSIdo Schimmel
81*e96fa54bSIdo Schimmelrouter_destroy()
82*e96fa54bSIdo Schimmel{
83*e96fa54bSIdo Schimmel	ip address del 2001:db8:2::1/64 dev $rp2
84*e96fa54bSIdo Schimmel	ip address del 198.51.100.1/24 dev $rp2
85*e96fa54bSIdo Schimmel
86*e96fa54bSIdo Schimmel	ip address del 2001:db8:1::1/64 dev $rp1
87*e96fa54bSIdo Schimmel	ip address del 192.0.2.1/24 dev $rp1
88*e96fa54bSIdo Schimmel
89*e96fa54bSIdo Schimmel	tc qdisc del dev $rp2 clsact
90*e96fa54bSIdo Schimmel
91*e96fa54bSIdo Schimmel	ip link set dev $rp2 down
92*e96fa54bSIdo Schimmel	ip link set dev $rp1 down
93*e96fa54bSIdo Schimmel}
94*e96fa54bSIdo Schimmel
95*e96fa54bSIdo Schimmelrouting_nh_obj()
96*e96fa54bSIdo Schimmel{
97*e96fa54bSIdo Schimmel	# Create the nexthops as AF_INET6, so that IPv4 and IPv6 routes could
98*e96fa54bSIdo Schimmel	# use them.
99*e96fa54bSIdo Schimmel	ip -6 nexthop add id 101 dev $rp1
100*e96fa54bSIdo Schimmel	ip -6 nexthop add id 102 dev $rp2
101*e96fa54bSIdo Schimmel
102*e96fa54bSIdo Schimmel	ip route replace 192.0.2.0/24 nhid 101
103*e96fa54bSIdo Schimmel	ip route replace 2001:db8:1::/64 nhid 101
104*e96fa54bSIdo Schimmel	ip route replace 198.51.100.0/24 nhid 102
105*e96fa54bSIdo Schimmel	ip route replace 2001:db8:2::/64 nhid 102
106*e96fa54bSIdo Schimmel}
107*e96fa54bSIdo Schimmel
108*e96fa54bSIdo Schimmelsetup_prepare()
109*e96fa54bSIdo Schimmel{
110*e96fa54bSIdo Schimmel	h1=${NETIFS[p1]}
111*e96fa54bSIdo Schimmel	rp1=${NETIFS[p2]}
112*e96fa54bSIdo Schimmel
113*e96fa54bSIdo Schimmel	rp2=${NETIFS[p3]}
114*e96fa54bSIdo Schimmel	h2=${NETIFS[p4]}
115*e96fa54bSIdo Schimmel
116*e96fa54bSIdo Schimmel	rp1mac=$(mac_get $rp1)
117*e96fa54bSIdo Schimmel
118*e96fa54bSIdo Schimmel	vrf_prepare
119*e96fa54bSIdo Schimmel
120*e96fa54bSIdo Schimmel	h1_create
121*e96fa54bSIdo Schimmel	h2_create
122*e96fa54bSIdo Schimmel
123*e96fa54bSIdo Schimmel	router_create
124*e96fa54bSIdo Schimmel
125*e96fa54bSIdo Schimmel	forwarding_enable
126*e96fa54bSIdo Schimmel}
127*e96fa54bSIdo Schimmel
128*e96fa54bSIdo Schimmelcleanup()
129*e96fa54bSIdo Schimmel{
130*e96fa54bSIdo Schimmel	pre_cleanup
131*e96fa54bSIdo Schimmel
132*e96fa54bSIdo Schimmel	forwarding_restore
133*e96fa54bSIdo Schimmel
134*e96fa54bSIdo Schimmel	router_destroy
135*e96fa54bSIdo Schimmel
136*e96fa54bSIdo Schimmel	h2_destroy
137*e96fa54bSIdo Schimmel	h1_destroy
138*e96fa54bSIdo Schimmel
139*e96fa54bSIdo Schimmel	vrf_cleanup
140*e96fa54bSIdo Schimmel}
141*e96fa54bSIdo Schimmel
142*e96fa54bSIdo Schimmelping_ipv4()
143*e96fa54bSIdo Schimmel{
144*e96fa54bSIdo Schimmel	ping_test $h1 198.51.100.2
145*e96fa54bSIdo Schimmel}
146*e96fa54bSIdo Schimmel
147*e96fa54bSIdo Schimmelping_ipv6()
148*e96fa54bSIdo Schimmel{
149*e96fa54bSIdo Schimmel	ping6_test $h1 2001:db8:2::2
150*e96fa54bSIdo Schimmel}
151*e96fa54bSIdo Schimmel
152*e96fa54bSIdo Schimmeltrap cleanup EXIT
153*e96fa54bSIdo Schimmel
154*e96fa54bSIdo Schimmelsetup_prepare
155*e96fa54bSIdo Schimmelsetup_wait
156*e96fa54bSIdo Schimmelrouting_nh_obj
157*e96fa54bSIdo Schimmel
158*e96fa54bSIdo Schimmeltests_run
159*e96fa54bSIdo Schimmel
160*e96fa54bSIdo Schimmelexit $EXIT_STATUS
161