test_xdp_features.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. readonly NS="ns1-$(mktemp -u XXXXXX)"
  4. readonly V0_IP4=10.10.0.11
  5. readonly V1_IP4=10.10.0.1
  6. readonly V0_IP6=2001:db8::11
  7. readonly V1_IP6=2001:db8::1
  8. ret=1
  9. setup() {
  10. {
  11. ip netns add ${NS}
  12. ip link add v1 type veth peer name v0 netns ${NS}
  13. ip link set v1 up
  14. ip addr add $V1_IP4/24 dev v1
  15. ip addr add $V1_IP6/64 nodad dev v1
  16. ip -n ${NS} link set dev v0 up
  17. ip -n ${NS} addr add $V0_IP4/24 dev v0
  18. ip -n ${NS} addr add $V0_IP6/64 nodad dev v0
  19. # Enable XDP mode and disable checksum offload
  20. ethtool -K v1 gro on
  21. ethtool -K v1 tx-checksumming off
  22. ip netns exec ${NS} ethtool -K v0 gro on
  23. ip netns exec ${NS} ethtool -K v0 tx-checksumming off
  24. } > /dev/null 2>&1
  25. }
  26. cleanup() {
  27. ip link del v1 2> /dev/null
  28. ip netns del ${NS} 2> /dev/null
  29. [ "$(pidof xdp_features)" = "" ] || kill $(pidof xdp_features) 2> /dev/null
  30. }
  31. wait_for_dut_server() {
  32. while sleep 1; do
  33. ss -tlp | grep -q xdp_features
  34. [ $? -eq 0 ] && break
  35. done
  36. }
  37. test_xdp_features() {
  38. setup
  39. ## XDP_PASS
  40. ./xdp_features -f XDP_PASS -D $V1_IP6 -T $V0_IP6 v1 &
  41. wait_for_dut_server
  42. ip netns exec ${NS} ./xdp_features -t -f XDP_PASS \
  43. -D $V1_IP6 -C $V1_IP6 \
  44. -T $V0_IP6 v0
  45. [ $? -ne 0 ] && exit
  46. ## XDP_DROP
  47. ./xdp_features -f XDP_DROP -D ::ffff:$V1_IP4 -T ::ffff:$V0_IP4 v1 &
  48. wait_for_dut_server
  49. ip netns exec ${NS} ./xdp_features -t -f XDP_DROP \
  50. -D ::ffff:$V1_IP4 \
  51. -C ::ffff:$V1_IP4 \
  52. -T ::ffff:$V0_IP4 v0
  53. [ $? -ne 0 ] && exit
  54. ## XDP_ABORTED
  55. ./xdp_features -f XDP_ABORTED -D $V1_IP6 -T $V0_IP6 v1 &
  56. wait_for_dut_server
  57. ip netns exec ${NS} ./xdp_features -t -f XDP_ABORTED \
  58. -D $V1_IP6 -C $V1_IP6 \
  59. -T $V0_IP6 v0
  60. [ $? -ne 0 ] && exit
  61. ## XDP_TX
  62. ./xdp_features -f XDP_TX -D ::ffff:$V1_IP4 -T ::ffff:$V0_IP4 v1 &
  63. wait_for_dut_server
  64. ip netns exec ${NS} ./xdp_features -t -f XDP_TX \
  65. -D ::ffff:$V1_IP4 \
  66. -C ::ffff:$V1_IP4 \
  67. -T ::ffff:$V0_IP4 v0
  68. [ $? -ne 0 ] && exit
  69. ## XDP_REDIRECT
  70. ./xdp_features -f XDP_REDIRECT -D $V1_IP6 -T $V0_IP6 v1 &
  71. wait_for_dut_server
  72. ip netns exec ${NS} ./xdp_features -t -f XDP_REDIRECT \
  73. -D $V1_IP6 -C $V1_IP6 \
  74. -T $V0_IP6 v0
  75. [ $? -ne 0 ] && exit
  76. ## XDP_NDO_XMIT
  77. ./xdp_features -f XDP_NDO_XMIT -D ::ffff:$V1_IP4 -T ::ffff:$V0_IP4 v1 &
  78. wait_for_dut_server
  79. ip netns exec ${NS} ./xdp_features -t -f XDP_NDO_XMIT \
  80. -D ::ffff:$V1_IP4 \
  81. -C ::ffff:$V1_IP4 \
  82. -T ::ffff:$V0_IP4 v0
  83. ret=$?
  84. cleanup
  85. }
  86. set -e
  87. trap cleanup 2 3 6 9
  88. test_xdp_features
  89. exit $ret