84 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4source lib.sh5 6timeout=4m7ret=08tmp=$(mktemp)9cleanup() {10 cleanup_all_ns11 rm -f "$tmp"12}13 14trap cleanup EXIT15 16maxpolicies=10000017[ "$KSFT_MACHINE_SLOW" = "yes" ] && maxpolicies=1000018 19do_dummies4() {20 local dir="$1"21 local max="$2"22 23 local policies24 local pfx25 pfx=3026 policies=027 28 ip netns exec "$ns" ip xfrm policy flush29 30 for i in $(seq 1 100);do31 local s32 local d33 for j in $(seq 1 255);do34 s=$((i+0))35 d=$((i+100))36 37 for a in $(seq 1 8 255); do38 policies=$((policies+1))39 [ "$policies" -gt "$max" ] && return40 echo xfrm policy add src 10.$s.$j.0/30 dst 10.$d.$j.$a/$pfx dir $dir action block41 done42 for a in $(seq 1 8 255); do43 policies=$((policies+1))44 [ "$policies" -gt "$max" ] && return45 echo xfrm policy add src 10.$s.$j.$a/30 dst 10.$d.$j.0/$pfx dir $dir action block46 done47 done48 done49}50 51setup_ns ns52 53do_bench()54{55 local max="$1"56 57 start=$(date +%s%3N)58 do_dummies4 "out" "$max" > "$tmp"59 if ! timeout "$timeout" ip netns exec "$ns" ip -batch "$tmp";then60 echo "WARNING: policy insertion cancelled after $timeout"61 ret=162 fi63 stop=$(date +%s%3N)64 65 result=$((stop-start))66 67 policies=$(wc -l < "$tmp")68 printf "Inserted %-06s policies in $result ms\n" $policies69 70 have=$(ip netns exec "$ns" ip xfrm policy show | grep "action block" | wc -l)71 if [ "$have" -ne "$policies" ]; then72 echo "WARNING: mismatch, have $have policies, expected $policies"73 ret=174 fi75}76 77p=10078while [ $p -le "$maxpolicies" ]; do79 do_bench "$p"80 p="${p}0"81done82 83exit $ret84