router_scale.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. ROUTER_NUM_NETIFS=4
  4. : ${TIMEOUT:=20000} # ms
  5. router_h1_create()
  6. {
  7. simple_if_init $h1 192.0.1.1/24
  8. }
  9. router_h1_destroy()
  10. {
  11. simple_if_fini $h1 192.0.1.1/24
  12. }
  13. router_h2_create()
  14. {
  15. simple_if_init $h2 192.0.2.1/24
  16. tc qdisc add dev $h2 handle ffff: ingress
  17. }
  18. router_h2_destroy()
  19. {
  20. tc qdisc del dev $h2 handle ffff: ingress
  21. simple_if_fini $h2 192.0.2.1/24
  22. }
  23. router_create()
  24. {
  25. ip link set dev $rp1 up
  26. ip link set dev $rp2 up
  27. ip address add 192.0.1.2/24 dev $rp1
  28. ip address add 192.0.2.2/24 dev $rp2
  29. }
  30. router_destroy()
  31. {
  32. ip address del 192.0.2.2/24 dev $rp2
  33. ip address del 192.0.1.2/24 dev $rp1
  34. ip link set dev $rp2 down
  35. ip link set dev $rp1 down
  36. }
  37. router_setup_prepare()
  38. {
  39. h1=${NETIFS[p1]}
  40. rp1=${NETIFS[p2]}
  41. rp2=${NETIFS[p3]}
  42. h2=${NETIFS[p4]}
  43. h1mac=$(mac_get $h1)
  44. rp1mac=$(mac_get $rp1)
  45. vrf_prepare
  46. router_h1_create
  47. router_h2_create
  48. router_create
  49. }
  50. wait_for_routes()
  51. {
  52. local t0=$1; shift
  53. local route_count=$1; shift
  54. local t1=$(ip route | grep 'offload' | grep -v 'offload_failed' | wc -l)
  55. local delta=$((t1 - t0))
  56. echo $delta
  57. [[ $delta -ge $route_count ]]
  58. }
  59. router_routes_create()
  60. {
  61. local route_count=$1
  62. local count=0
  63. ROUTE_FILE="$(mktemp)"
  64. for i in {0..255}
  65. do
  66. for j in {0..255}
  67. do
  68. for k in {0..255}
  69. do
  70. if [[ $count -eq $route_count ]]; then
  71. break 3
  72. fi
  73. echo route add 193.${i}.${j}.${k}/32 dev $rp2 \
  74. >> $ROUTE_FILE
  75. ((count++))
  76. done
  77. done
  78. done
  79. ip -b $ROUTE_FILE &> /dev/null
  80. }
  81. router_routes_destroy()
  82. {
  83. if [[ -v ROUTE_FILE ]]; then
  84. rm -f $ROUTE_FILE
  85. fi
  86. }
  87. router_test()
  88. {
  89. local route_count=$1
  90. local should_fail=$2
  91. local delta
  92. RET=0
  93. local t0=$(ip route | grep -o 'offload' | wc -l)
  94. router_routes_create $route_count
  95. delta=$(busywait "$TIMEOUT" wait_for_routes $t0 $route_count)
  96. check_err_fail $should_fail $? "Offload routes: Expected $route_count, got $delta."
  97. if [[ $RET -ne 0 ]] || [[ $should_fail -eq 1 ]]; then
  98. return
  99. fi
  100. router_routes_destroy
  101. }
  102. router_cleanup()
  103. {
  104. pre_cleanup
  105. router_routes_destroy
  106. router_destroy
  107. router_h2_destroy
  108. router_h1_destroy
  109. vrf_cleanup
  110. }