143 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4ROUTER_NUM_NETIFS=45: ${TIMEOUT:=20000} # ms6 7router_h1_create()8{9 simple_if_init $h1 192.0.1.1/2410}11 12router_h1_destroy()13{14 simple_if_fini $h1 192.0.1.1/2415}16 17router_h2_create()18{19 simple_if_init $h2 192.0.2.1/2420 tc qdisc add dev $h2 handle ffff: ingress21}22 23router_h2_destroy()24{25 tc qdisc del dev $h2 handle ffff: ingress26 simple_if_fini $h2 192.0.2.1/2427}28 29router_create()30{31 ip link set dev $rp1 up32 ip link set dev $rp2 up33 34 ip address add 192.0.1.2/24 dev $rp135 ip address add 192.0.2.2/24 dev $rp236}37 38router_destroy()39{40 ip address del 192.0.2.2/24 dev $rp241 ip address del 192.0.1.2/24 dev $rp142 43 ip link set dev $rp2 down44 ip link set dev $rp1 down45}46 47router_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_prepare59 60 router_h1_create61 router_h2_create62 63 router_create64}65 66wait_for_routes()67{68 local t0=$1; shift69 local route_count=$1; shift70 71 local t1=$(ip route | grep 'offload' | grep -v 'offload_failed' | wc -l)72 local delta=$((t1 - t0))73 echo $delta74 [[ $delta -ge $route_count ]]75}76 77router_routes_create()78{79 local route_count=$180 local count=081 82 ROUTE_FILE="$(mktemp)"83 84 for i in {0..255}85 do86 for j in {0..255}87 do88 for k in {0..255}89 do90 if [[ $count -eq $route_count ]]; then91 break 392 fi93 94 echo route add 193.${i}.${j}.${k}/32 dev $rp2 \95 >> $ROUTE_FILE96 ((count++))97 done98 done99 done100 101 ip -b $ROUTE_FILE &> /dev/null102}103 104router_routes_destroy()105{106 if [[ -v ROUTE_FILE ]]; then107 rm -f $ROUTE_FILE108 fi109}110 111router_test()112{113 local route_count=$1114 local should_fail=$2115 local delta116 117 RET=0118 119 local t0=$(ip route | grep -o 'offload' | wc -l)120 router_routes_create $route_count121 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 ]]; then125 return126 fi127 128 router_routes_destroy129}130 131router_cleanup()132{133 pre_cleanup134 135 router_routes_destroy136 router_destroy137 138 router_h2_destroy139 router_h1_destroy140 141 vrf_cleanup142}143