143 lines
2.1 KiB
Bash
143 lines
2.1 KiB
Bash
|
#!/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
|
||
|
}
|