| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- #!/bin/bash
- # SPDX-License-Identifier: GPL-2.0
- ROUTER_NUM_NETIFS=4
- : ${TIMEOUT:=20000} # ms
- router_h1_create()
- {
- simple_if_init $h1 192.0.1.1/24
- }
- router_h1_destroy()
- {
- simple_if_fini $h1 192.0.1.1/24
- }
- router_h2_create()
- {
- simple_if_init $h2 192.0.2.1/24
- tc qdisc add dev $h2 handle ffff: ingress
- }
- router_h2_destroy()
- {
- tc qdisc del dev $h2 handle ffff: ingress
- simple_if_fini $h2 192.0.2.1/24
- }
- router_create()
- {
- ip link set dev $rp1 up
- ip link set dev $rp2 up
- ip address add 192.0.1.2/24 dev $rp1
- ip address add 192.0.2.2/24 dev $rp2
- }
- router_destroy()
- {
- ip address del 192.0.2.2/24 dev $rp2
- ip address del 192.0.1.2/24 dev $rp1
- ip link set dev $rp2 down
- ip link set dev $rp1 down
- }
- router_setup_prepare()
- {
- h1=${NETIFS[p1]}
- rp1=${NETIFS[p2]}
- rp2=${NETIFS[p3]}
- h2=${NETIFS[p4]}
- h1mac=$(mac_get $h1)
- rp1mac=$(mac_get $rp1)
- vrf_prepare
- router_h1_create
- router_h2_create
- router_create
- }
- wait_for_routes()
- {
- local t0=$1; shift
- local route_count=$1; shift
- local t1=$(ip route | grep 'offload' | grep -v 'offload_failed' | wc -l)
- local delta=$((t1 - t0))
- echo $delta
- [[ $delta -ge $route_count ]]
- }
- router_routes_create()
- {
- local route_count=$1
- local count=0
- ROUTE_FILE="$(mktemp)"
- for i in {0..255}
- do
- for j in {0..255}
- do
- for k in {0..255}
- do
- if [[ $count -eq $route_count ]]; then
- break 3
- fi
- echo route add 193.${i}.${j}.${k}/32 dev $rp2 \
- >> $ROUTE_FILE
- ((count++))
- done
- done
- done
- ip -b $ROUTE_FILE &> /dev/null
- }
- router_routes_destroy()
- {
- if [[ -v ROUTE_FILE ]]; then
- rm -f $ROUTE_FILE
- fi
- }
- router_test()
- {
- local route_count=$1
- local should_fail=$2
- local delta
- RET=0
- local t0=$(ip route | grep -o 'offload' | wc -l)
- router_routes_create $route_count
- delta=$(busywait "$TIMEOUT" wait_for_routes $t0 $route_count)
- check_err_fail $should_fail $? "Offload routes: Expected $route_count, got $delta."
- if [[ $RET -ne 0 ]] || [[ $should_fail -eq 1 ]]; then
- return
- fi
- router_routes_destroy
- }
- router_cleanup()
- {
- pre_cleanup
- router_routes_destroy
- router_destroy
- router_h2_destroy
- router_h1_destroy
- vrf_cleanup
- }
|