175 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# +-------------------------+ +-------------------------+5# | H1 | | H2 |6# | $h1 + | | $h2 + |7# | 192.0.2.2/24 | | | 198.51.100.2/24 | |8# | 2001:db8:1::2/64 | | | 2001:db8:2::2/64 | |9# +-------------------|-----+ +-------------------|-----+10# | |11# +-------------------|----------------------------|-----+12# | R1 | | |13# | $rp1 + $rp2 + |14# | 192.0.2.1/24 198.51.100.1/24 |15# | 2001:db8:1::1/64 2001:db8:2::1/64 |16# +------------------------------------------------------+17 18ALL_TESTS="19 ping_ipv420 ping_ipv621"22 23NUM_NETIFS=424source lib.sh25source tc_common.sh26 27h1_create()28{29 vrf_create "vrf-h1"30 ip link set dev $h1 master vrf-h131 32 ip link set dev vrf-h1 up33 ip link set dev $h1 up34 35 ip address add 192.0.2.2/24 dev $h136 ip address add 2001:db8:1::2/64 dev $h137 38 ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.139 ip route add 2001:db8:2::/64 vrf vrf-h1 nexthop via 2001:db8:1::140}41 42h1_destroy()43{44 ip route del 2001:db8:2::/64 vrf vrf-h145 ip route del 198.51.100.0/24 vrf vrf-h146 47 ip address del 2001:db8:1::2/64 dev $h148 ip address del 192.0.2.2/24 dev $h149 50 ip link set dev $h1 down51 vrf_destroy "vrf-h1"52}53 54h2_create()55{56 vrf_create "vrf-h2"57 ip link set dev $h2 master vrf-h258 59 ip link set dev vrf-h2 up60 ip link set dev $h2 up61 62 ip address add 198.51.100.2/24 dev $h263 ip address add 2001:db8:2::2/64 dev $h264 65 ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.166 ip route add 2001:db8:1::/64 vrf vrf-h2 nexthop via 2001:db8:2::167}68 69h2_destroy()70{71 ip route del 2001:db8:1::/64 vrf vrf-h272 ip route del 192.0.2.0/24 vrf vrf-h273 74 ip address del 2001:db8:2::2/64 dev $h275 ip address del 198.51.100.2/24 dev $h276 77 ip link set dev $h2 down78 vrf_destroy "vrf-h2"79}80 81router_create()82{83 ip link set dev $rp1 up84 ip link set dev $rp2 up85 86 tc qdisc add dev $rp2 clsact87 88 ip address add 192.0.2.1/24 dev $rp189 ip address add 2001:db8:1::1/64 dev $rp190 91 ip address add 198.51.100.1/24 dev $rp292 ip address add 2001:db8:2::1/64 dev $rp293}94 95router_destroy()96{97 ip address del 2001:db8:2::1/64 dev $rp298 ip address del 198.51.100.1/24 dev $rp299 100 ip address del 2001:db8:1::1/64 dev $rp1101 ip address del 192.0.2.1/24 dev $rp1102 103 tc qdisc del dev $rp2 clsact104 105 ip link set dev $rp2 down106 ip link set dev $rp1 down107}108 109routing_nh_obj()110{111 # Create the nexthops as AF_INET6, so that IPv4 and IPv6 routes could112 # use them.113 ip -6 nexthop add id 101 dev $rp1114 ip -6 nexthop add id 102 dev $rp2115 116 ip route replace 192.0.2.0/24 nhid 101117 ip route replace 2001:db8:1::/64 nhid 101118 ip route replace 198.51.100.0/24 nhid 102119 ip route replace 2001:db8:2::/64 nhid 102120}121 122setup_prepare()123{124 h1=${NETIFS[p1]}125 rp1=${NETIFS[p2]}126 127 rp2=${NETIFS[p3]}128 h2=${NETIFS[p4]}129 130 rp1mac=$(mac_get $rp1)131 132 vrf_prepare133 134 h1_create135 h2_create136 137 router_create138 139 forwarding_enable140}141 142cleanup()143{144 pre_cleanup145 146 forwarding_restore147 148 router_destroy149 150 h2_destroy151 h1_destroy152 153 vrf_cleanup154}155 156ping_ipv4()157{158 ping_test $h1 198.51.100.2159}160 161ping_ipv6()162{163 ping6_test $h1 2001:db8:2::2164}165 166trap cleanup EXIT167 168setup_prepare169setup_wait170routing_nh_obj171 172tests_run173 174exit $EXIT_STATUS175