| #!/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 |