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