bond-lladdr-target.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. # Regression Test:
  4. # Verify bond interface could up when set IPv6 link local address target.
  5. #
  6. # +----------------+
  7. # | br0 |
  8. # | | | sw
  9. # | veth0 veth1 |
  10. # +---+-------+----+
  11. # | |
  12. # +---+-------+----+
  13. # | veth0 veth1 |
  14. # | | | host
  15. # | bond0 |
  16. # +----------------+
  17. #
  18. # We use veths instead of physical interfaces
  19. REQUIRE_MZ=no
  20. NUM_NETIFS=0
  21. lib_dir=$(dirname "$0")
  22. source "$lib_dir"/../../../net/forwarding/lib.sh
  23. sw="sw-$(mktemp -u XXXXXX)"
  24. host="ns-$(mktemp -u XXXXXX)"
  25. cleanup()
  26. {
  27. ip netns del $sw
  28. ip netns del $host
  29. }
  30. wait_lladdr_dad()
  31. {
  32. $@ | grep fe80 | grep -qv tentative
  33. }
  34. wait_bond_up()
  35. {
  36. $@ | grep -q 'state UP'
  37. }
  38. trap cleanup 0 1 2
  39. ip netns add $sw
  40. ip netns add $host
  41. ip -n $host link add veth0 type veth peer name veth0 netns $sw
  42. ip -n $host link add veth1 type veth peer name veth1 netns $sw
  43. ip -n $sw link add br0 type bridge
  44. ip -n $sw link set br0 up
  45. sw_lladdr=$(ip -n $sw addr show br0 | awk '/fe80/{print $2}' | cut -d'/' -f1)
  46. # wait some time to make sure bridge lladdr pass DAD
  47. slowwait 2 wait_lladdr_dad ip -n $sw addr show br0
  48. ip -n $host link add bond0 type bond mode 1 ns_ip6_target ${sw_lladdr} \
  49. arp_validate 3 arp_interval 1000
  50. # add a lladdr for bond to make sure there is a route to target
  51. ip -n $host addr add fe80::beef/64 dev bond0
  52. ip -n $host link set bond0 up
  53. ip -n $host link set veth0 master bond0
  54. ip -n $host link set veth1 master bond0
  55. ip -n $sw link set veth0 master br0
  56. ip -n $sw link set veth1 master br0
  57. ip -n $sw link set veth0 up
  58. ip -n $sw link set veth1 up
  59. slowwait 5 wait_bond_up ip -n $host link show bond0
  60. rc=0
  61. if ip -n $host link show bond0 | grep -q LOWER_UP; then
  62. echo "PASS"
  63. else
  64. echo "FAIL"
  65. rc=1
  66. fi
  67. exit $rc