xfrm_policy_add_speed.sh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. #
  4. source lib.sh
  5. timeout=4m
  6. ret=0
  7. tmp=$(mktemp)
  8. cleanup() {
  9. cleanup_all_ns
  10. rm -f "$tmp"
  11. }
  12. trap cleanup EXIT
  13. maxpolicies=100000
  14. [ "$KSFT_MACHINE_SLOW" = "yes" ] && maxpolicies=10000
  15. do_dummies4() {
  16. local dir="$1"
  17. local max="$2"
  18. local policies
  19. local pfx
  20. pfx=30
  21. policies=0
  22. ip netns exec "$ns" ip xfrm policy flush
  23. for i in $(seq 1 100);do
  24. local s
  25. local d
  26. for j in $(seq 1 255);do
  27. s=$((i+0))
  28. d=$((i+100))
  29. for a in $(seq 1 8 255); do
  30. policies=$((policies+1))
  31. [ "$policies" -gt "$max" ] && return
  32. echo xfrm policy add src 10.$s.$j.0/30 dst 10.$d.$j.$a/$pfx dir $dir action block
  33. done
  34. for a in $(seq 1 8 255); do
  35. policies=$((policies+1))
  36. [ "$policies" -gt "$max" ] && return
  37. echo xfrm policy add src 10.$s.$j.$a/30 dst 10.$d.$j.0/$pfx dir $dir action block
  38. done
  39. done
  40. done
  41. }
  42. setup_ns ns
  43. do_bench()
  44. {
  45. local max="$1"
  46. start=$(date +%s%3N)
  47. do_dummies4 "out" "$max" > "$tmp"
  48. if ! timeout "$timeout" ip netns exec "$ns" ip -batch "$tmp";then
  49. echo "WARNING: policy insertion cancelled after $timeout"
  50. ret=1
  51. fi
  52. stop=$(date +%s%3N)
  53. result=$((stop-start))
  54. policies=$(wc -l < "$tmp")
  55. printf "Inserted %-06s policies in $result ms\n" $policies
  56. have=$(ip netns exec "$ns" ip xfrm policy show | grep "action block" | wc -l)
  57. if [ "$have" -ne "$policies" ]; then
  58. echo "WARNING: mismatch, have $have policies, expected $policies"
  59. ret=1
  60. fi
  61. }
  62. p=100
  63. while [ $p -le "$maxpolicies" ]; do
  64. do_bench "$p"
  65. p="${p}0"
  66. done
  67. exit $ret