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