bond_macvlan.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. #
  4. # Test macvlan over balance-alb
  5. lib_dir=$(dirname "$0")
  6. source ${lib_dir}/bond_topo_2d1c.sh
  7. m1_ns="m1-$(mktemp -u XXXXXX)"
  8. m2_ns="m1-$(mktemp -u XXXXXX)"
  9. m1_ip4="192.0.2.11"
  10. m1_ip6="2001:db8::11"
  11. m2_ip4="192.0.2.12"
  12. m2_ip6="2001:db8::12"
  13. cleanup()
  14. {
  15. ip -n ${m1_ns} link del macv0
  16. ip netns del ${m1_ns}
  17. ip -n ${m2_ns} link del macv0
  18. ip netns del ${m2_ns}
  19. client_destroy
  20. server_destroy
  21. gateway_destroy
  22. }
  23. check_connection()
  24. {
  25. local ns=${1}
  26. local target=${2}
  27. local message=${3:-"macvlan_over_bond"}
  28. RET=0
  29. ip netns exec ${ns} ping ${target} -c 4 -i 0.1 &>/dev/null
  30. check_err $? "ping failed"
  31. log_test "$mode: $message"
  32. }
  33. macvlan_over_bond()
  34. {
  35. local param="$1"
  36. RET=0
  37. # setup new bond mode
  38. bond_reset "${param}"
  39. ip -n ${s_ns} link add link bond0 name macv0 type macvlan mode bridge
  40. ip -n ${s_ns} link set macv0 netns ${m1_ns}
  41. ip -n ${m1_ns} link set dev macv0 up
  42. ip -n ${m1_ns} addr add ${m1_ip4}/24 dev macv0
  43. ip -n ${m1_ns} addr add ${m1_ip6}/24 dev macv0
  44. ip -n ${s_ns} link add link bond0 name macv0 type macvlan mode bridge
  45. ip -n ${s_ns} link set macv0 netns ${m2_ns}
  46. ip -n ${m2_ns} link set dev macv0 up
  47. ip -n ${m2_ns} addr add ${m2_ip4}/24 dev macv0
  48. ip -n ${m2_ns} addr add ${m2_ip6}/24 dev macv0
  49. sleep 2
  50. check_connection "${c_ns}" "${s_ip4}" "IPv4: client->server"
  51. check_connection "${c_ns}" "${s_ip6}" "IPv6: client->server"
  52. check_connection "${c_ns}" "${m1_ip4}" "IPv4: client->macvlan_1"
  53. check_connection "${c_ns}" "${m1_ip6}" "IPv6: client->macvlan_1"
  54. check_connection "${c_ns}" "${m2_ip4}" "IPv4: client->macvlan_2"
  55. check_connection "${c_ns}" "${m2_ip6}" "IPv6: client->macvlan_2"
  56. check_connection "${m1_ns}" "${m2_ip4}" "IPv4: macvlan_1->macvlan_2"
  57. check_connection "${m1_ns}" "${m2_ip6}" "IPv6: macvlan_1->macvlan_2"
  58. sleep 5
  59. check_connection "${s_ns}" "${c_ip4}" "IPv4: server->client"
  60. check_connection "${s_ns}" "${c_ip6}" "IPv6: server->client"
  61. check_connection "${m1_ns}" "${c_ip4}" "IPv4: macvlan_1->client"
  62. check_connection "${m1_ns}" "${c_ip6}" "IPv6: macvlan_1->client"
  63. check_connection "${m2_ns}" "${c_ip4}" "IPv4: macvlan_2->client"
  64. check_connection "${m2_ns}" "${c_ip6}" "IPv6: macvlan_2->client"
  65. check_connection "${m2_ns}" "${m1_ip4}" "IPv4: macvlan_2->macvlan_2"
  66. check_connection "${m2_ns}" "${m1_ip6}" "IPv6: macvlan_2->macvlan_2"
  67. ip -n ${c_ns} neigh flush dev eth0
  68. }
  69. trap cleanup EXIT
  70. setup_prepare
  71. ip netns add ${m1_ns}
  72. ip netns add ${m2_ns}
  73. modes="active-backup balance-tlb balance-alb"
  74. for mode in $modes; do
  75. macvlan_over_bond "mode $mode"
  76. done
  77. exit $EXIT_STATUS