Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 ALL_TESTS="
0005         ping_ipv4
0006         ping_ipv6
0007 "
0008 
0009 NUM_NETIFS=4
0010 source lib.sh
0011 source tc_common.sh
0012 
0013 h1_create()
0014 {
0015         vrf_create "vrf-h1"
0016         ip link set dev $h1 master vrf-h1
0017 
0018         ip link set dev vrf-h1 up
0019         ip link set dev $h1 up
0020 
0021         ip address add 192.0.2.2/24 dev $h1
0022         ip address add 2001:db8:1::2/64 dev $h1
0023 
0024         ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.1
0025         ip route add 2001:db8:2::/64 vrf vrf-h1 nexthop via 2001:db8:1::1
0026 }
0027 
0028 h1_destroy()
0029 {
0030         ip route del 2001:db8:2::/64 vrf vrf-h1
0031         ip route del 198.51.100.0/24 vrf vrf-h1
0032 
0033         ip address del 2001:db8:1::2/64 dev $h1
0034         ip address del 192.0.2.2/24 dev $h1
0035 
0036         ip link set dev $h1 down
0037         vrf_destroy "vrf-h1"
0038 }
0039 
0040 h2_create()
0041 {
0042         vrf_create "vrf-h2"
0043         ip link set dev $h2 master vrf-h2
0044 
0045         ip link set dev vrf-h2 up
0046         ip link set dev $h2 up
0047 
0048         ip address add 198.51.100.2/24 dev $h2
0049         ip address add 2001:db8:2::2/64 dev $h2
0050 
0051         ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.1
0052         ip route add 2001:db8:1::/64 vrf vrf-h2 nexthop via 2001:db8:2::1
0053 }
0054 
0055 h2_destroy()
0056 {
0057         ip route del 2001:db8:1::/64 vrf vrf-h2
0058         ip route del 192.0.2.0/24 vrf vrf-h2
0059 
0060         ip address del 2001:db8:2::2/64 dev $h2
0061         ip address del 198.51.100.2/24 dev $h2
0062 
0063         ip link set dev $h2 down
0064         vrf_destroy "vrf-h2"
0065 }
0066 
0067 router_create()
0068 {
0069         ip link set dev $rp1 up
0070         ip link set dev $rp2 up
0071 
0072         tc qdisc add dev $rp2 clsact
0073 
0074         ip address add 192.0.2.1/24 dev $rp1
0075         ip address add 2001:db8:1::1/64 dev $rp1
0076 
0077         ip address add 198.51.100.1/24 dev $rp2
0078         ip address add 2001:db8:2::1/64 dev $rp2
0079 }
0080 
0081 router_destroy()
0082 {
0083         ip address del 2001:db8:2::1/64 dev $rp2
0084         ip address del 198.51.100.1/24 dev $rp2
0085 
0086         ip address del 2001:db8:1::1/64 dev $rp1
0087         ip address del 192.0.2.1/24 dev $rp1
0088 
0089         tc qdisc del dev $rp2 clsact
0090 
0091         ip link set dev $rp2 down
0092         ip link set dev $rp1 down
0093 }
0094 
0095 routing_nh_obj()
0096 {
0097         # Create the nexthops as AF_INET6, so that IPv4 and IPv6 routes could
0098         # use them.
0099         ip -6 nexthop add id 101 dev $rp1
0100         ip -6 nexthop add id 102 dev $rp2
0101 
0102         ip route replace 192.0.2.0/24 nhid 101
0103         ip route replace 2001:db8:1::/64 nhid 101
0104         ip route replace 198.51.100.0/24 nhid 102
0105         ip route replace 2001:db8:2::/64 nhid 102
0106 }
0107 
0108 setup_prepare()
0109 {
0110         h1=${NETIFS[p1]}
0111         rp1=${NETIFS[p2]}
0112 
0113         rp2=${NETIFS[p3]}
0114         h2=${NETIFS[p4]}
0115 
0116         rp1mac=$(mac_get $rp1)
0117 
0118         vrf_prepare
0119 
0120         h1_create
0121         h2_create
0122 
0123         router_create
0124 
0125         forwarding_enable
0126 }
0127 
0128 cleanup()
0129 {
0130         pre_cleanup
0131 
0132         forwarding_restore
0133 
0134         router_destroy
0135 
0136         h2_destroy
0137         h1_destroy
0138 
0139         vrf_cleanup
0140 }
0141 
0142 ping_ipv4()
0143 {
0144         ping_test $h1 198.51.100.2
0145 }
0146 
0147 ping_ipv6()
0148 {
0149         ping6_test $h1 2001:db8:2::2
0150 }
0151 
0152 trap cleanup EXIT
0153 
0154 setup_prepare
0155 setup_wait
0156 routing_nh_obj
0157 
0158 tests_run
0159 
0160 exit $EXIT_STATUS