84 lines
1.5 KiB
Bash
84 lines
1.5 KiB
Bash
|
#!/bin/bash
|
||
|
# SPDX-License-Identifier: GPL-2.0
|
||
|
#
|
||
|
source lib.sh
|
||
|
|
||
|
timeout=4m
|
||
|
ret=0
|
||
|
tmp=$(mktemp)
|
||
|
cleanup() {
|
||
|
cleanup_all_ns
|
||
|
rm -f "$tmp"
|
||
|
}
|
||
|
|
||
|
trap cleanup EXIT
|
||
|
|
||
|
maxpolicies=100000
|
||
|
[ "$KSFT_MACHINE_SLOW" = "yes" ] && maxpolicies=10000
|
||
|
|
||
|
do_dummies4() {
|
||
|
local dir="$1"
|
||
|
local max="$2"
|
||
|
|
||
|
local policies
|
||
|
local pfx
|
||
|
pfx=30
|
||
|
policies=0
|
||
|
|
||
|
ip netns exec "$ns" ip xfrm policy flush
|
||
|
|
||
|
for i in $(seq 1 100);do
|
||
|
local s
|
||
|
local d
|
||
|
for j in $(seq 1 255);do
|
||
|
s=$((i+0))
|
||
|
d=$((i+100))
|
||
|
|
||
|
for a in $(seq 1 8 255); do
|
||
|
policies=$((policies+1))
|
||
|
[ "$policies" -gt "$max" ] && return
|
||
|
echo xfrm policy add src 10.$s.$j.0/30 dst 10.$d.$j.$a/$pfx dir $dir action block
|
||
|
done
|
||
|
for a in $(seq 1 8 255); do
|
||
|
policies=$((policies+1))
|
||
|
[ "$policies" -gt "$max" ] && return
|
||
|
echo xfrm policy add src 10.$s.$j.$a/30 dst 10.$d.$j.0/$pfx dir $dir action block
|
||
|
done
|
||
|
done
|
||
|
done
|
||
|
}
|
||
|
|
||
|
setup_ns ns
|
||
|
|
||
|
do_bench()
|
||
|
{
|
||
|
local max="$1"
|
||
|
|
||
|
start=$(date +%s%3N)
|
||
|
do_dummies4 "out" "$max" > "$tmp"
|
||
|
if ! timeout "$timeout" ip netns exec "$ns" ip -batch "$tmp";then
|
||
|
echo "WARNING: policy insertion cancelled after $timeout"
|
||
|
ret=1
|
||
|
fi
|
||
|
stop=$(date +%s%3N)
|
||
|
|
||
|
result=$((stop-start))
|
||
|
|
||
|
policies=$(wc -l < "$tmp")
|
||
|
printf "Inserted %-06s policies in $result ms\n" $policies
|
||
|
|
||
|
have=$(ip netns exec "$ns" ip xfrm policy show | grep "action block" | wc -l)
|
||
|
if [ "$have" -ne "$policies" ]; then
|
||
|
echo "WARNING: mismatch, have $have policies, expected $policies"
|
||
|
ret=1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
p=100
|
||
|
while [ $p -le "$maxpolicies" ]; do
|
||
|
do_bench "$p"
|
||
|
p="${p}0"
|
||
|
done
|
||
|
|
||
|
exit $ret
|