0001
0002
0003
0004 ROUTER_NUM_NETIFS=4
0005 : ${TIMEOUT:=20000}
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 }