Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 ROUTER_NUM_NETIFS=4
0005 : ${TIMEOUT:=20000} # ms
0006 
0007 router_h1_create()
0008 {
0009         simple_if_init $h1 192.0.1.1/24
0010 }
0011 
0012 router_h1_destroy()
0013 {
0014         simple_if_fini $h1 192.0.1.1/24
0015 }
0016 
0017 router_h2_create()
0018 {
0019         simple_if_init $h2 192.0.2.1/24
0020         tc qdisc add dev $h2 handle ffff: ingress
0021 }
0022 
0023 router_h2_destroy()
0024 {
0025         tc qdisc del dev $h2 handle ffff: ingress
0026         simple_if_fini $h2 192.0.2.1/24
0027 }
0028 
0029 router_create()
0030 {
0031         ip link set dev $rp1 up
0032         ip link set dev $rp2 up
0033 
0034         ip address add 192.0.1.2/24 dev $rp1
0035         ip address add 192.0.2.2/24 dev $rp2
0036 }
0037 
0038 router_destroy()
0039 {
0040         ip address del 192.0.2.2/24 dev $rp2
0041         ip address del 192.0.1.2/24 dev $rp1
0042 
0043         ip link set dev $rp2 down
0044         ip link set dev $rp1 down
0045 }
0046 
0047 router_setup_prepare()
0048 {
0049         h1=${NETIFS[p1]}
0050         rp1=${NETIFS[p2]}
0051 
0052         rp2=${NETIFS[p3]}
0053         h2=${NETIFS[p4]}
0054 
0055         h1mac=$(mac_get $h1)
0056         rp1mac=$(mac_get $rp1)
0057 
0058         vrf_prepare
0059 
0060         router_h1_create
0061         router_h2_create
0062 
0063         router_create
0064 }
0065 
0066 wait_for_routes()
0067 {
0068         local t0=$1; shift
0069         local route_count=$1; shift
0070 
0071         local t1=$(ip route | grep 'offload' | grep -v 'offload_failed' | wc -l)
0072         local delta=$((t1 - t0))
0073         echo $delta
0074         [[ $delta -ge $route_count ]]
0075 }
0076 
0077 router_routes_create()
0078 {
0079         local route_count=$1
0080         local count=0
0081 
0082         ROUTE_FILE="$(mktemp)"
0083 
0084         for i in {0..255}
0085         do
0086                 for j in {0..255}
0087                 do
0088                         for k in {0..255}
0089                         do
0090                                 if [[ $count -eq $route_count ]]; then
0091                                         break 3
0092                                 fi
0093 
0094                                 echo route add 193.${i}.${j}.${k}/32 dev $rp2 \
0095                                         >> $ROUTE_FILE
0096                                 ((count++))
0097                         done
0098                 done
0099         done
0100 
0101         ip -b $ROUTE_FILE &> /dev/null
0102 }
0103 
0104 router_routes_destroy()
0105 {
0106         if [[ -v ROUTE_FILE ]]; then
0107                 rm -f $ROUTE_FILE
0108         fi
0109 }
0110 
0111 router_test()
0112 {
0113         local route_count=$1
0114         local should_fail=$2
0115         local delta
0116 
0117         RET=0
0118 
0119         local t0=$(ip route | grep -o 'offload' | wc -l)
0120         router_routes_create $route_count
0121         delta=$(busywait "$TIMEOUT" wait_for_routes $t0 $route_count)
0122 
0123         check_err_fail $should_fail $? "Offload routes: Expected $route_count, got $delta."
0124         if [[ $RET -ne 0 ]] || [[ $should_fail -eq 1 ]]; then
0125                 return
0126         fi
0127 
0128         router_routes_destroy
0129 }
0130 
0131 router_cleanup()
0132 {
0133         pre_cleanup
0134 
0135         router_routes_destroy
0136         router_destroy
0137 
0138         router_h2_destroy
0139         router_h1_destroy
0140 
0141         vrf_cleanup
0142 }