1 #!/bin/bash 2 # SPDX-License-Identifier: GPL-2.0 3 4 ROUTER_NUM_NETIFS=4 5 : ${TIMEOUT:=20000} # ms 6 7 router_h1_create() 8 { 9 simple_if_init $h1 192.0.1.1/24 10 } 11 12 router_h1_destroy() 13 { 14 simple_if_fini $h1 192.0.1.1/24 15 } 16 17 router_h2_create() 18 { 19 simple_if_init $h2 192.0.2.1/24 20 tc qdisc add dev $h2 handle ffff: ingress 21 } 22 23 router_h2_destroy() 24 { 25 tc qdisc del dev $h2 handle ffff: ingress 26 simple_if_fini $h2 192.0.2.1/24 27 } 28 29 router_create() 30 { 31 ip link set dev $rp1 up 32 ip link set dev $rp2 up 33 34 ip address add 192.0.1.2/24 dev $rp1 35 ip address add 192.0.2.2/24 dev $rp2 36 } 37 38 router_destroy() 39 { 40 ip address del 192.0.2.2/24 dev $rp2 41 ip address del 192.0.1.2/24 dev $rp1 42 43 ip link set dev $rp2 down 44 ip link set dev $rp1 down 45 } 46 47 router_setup_prepare() 48 { 49 h1=${NETIFS[p1]} 50 rp1=${NETIFS[p2]} 51 52 rp2=${NETIFS[p3]} 53 h2=${NETIFS[p4]} 54 55 h1mac=$(mac_get $h1) 56 rp1mac=$(mac_get $rp1) 57 58 vrf_prepare 59 60 router_h1_create 61 router_h2_create 62 63 router_create 64 } 65 66 wait_for_routes() 67 { 68 local t0=$1; shift 69 local route_count=$1; shift 70 71 local t1=$(ip route | grep 'offload' | grep -v 'offload_failed' | wc -l) 72 local delta=$((t1 - t0)) 73 echo $delta 74 [[ $delta -ge $route_count ]] 75 } 76 77 router_routes_create() 78 { 79 local route_count=$1 80 local count=0 81 82 ROUTE_FILE="$(mktemp)" 83 84 for i in {0..255} 85 do 86 for j in {0..255} 87 do 88 for k in {0..255} 89 do 90 if [[ $count -eq $route_count ]]; then 91 break 3 92 fi 93 94 echo route add 193.${i}.${j}.${k}/32 dev $rp2 \ 95 >> $ROUTE_FILE 96 ((count++)) 97 done 98 done 99 done 100 101 ip -b $ROUTE_FILE &> /dev/null 102 } 103 104 router_routes_destroy() 105 { 106 if [[ -v ROUTE_FILE ]]; then 107 rm -f $ROUTE_FILE 108 fi 109 } 110 111 router_test() 112 { 113 local route_count=$1 114 local should_fail=$2 115 local delta 116 117 RET=0 118 119 local t0=$(ip route | grep -o 'offload' | wc -l) 120 router_routes_create $route_count 121 delta=$(busywait "$TIMEOUT" wait_for_routes $t0 $route_count) 122 123 check_err_fail $should_fail $? "Offload routes: Expected $route_count, got $delta." 124 if [[ $RET -ne 0 ]] || [[ $should_fail -eq 1 ]]; then 125 return 126 fi 127 128 router_routes_destroy 129 } 130 131 router_cleanup() 132 { 133 pre_cleanup 134 135 router_routes_destroy 136 router_destroy 137 138 router_h2_destroy 139 router_h1_destroy 140 141 vrf_cleanup 142 }
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.