rif_bridge.sh 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. lib_dir=$(dirname $0)/../../../net/forwarding
  4. ALL_TESTS="
  5. bridge_rif_add
  6. bridge_rif_nomaster
  7. bridge_rif_remaster
  8. bridge_rif_nomaster_addr
  9. bridge_rif_nomaster_port
  10. bridge_rif_remaster_port
  11. "
  12. NUM_NETIFS=2
  13. source $lib_dir/lib.sh
  14. source $lib_dir/devlink_lib.sh
  15. setup_prepare()
  16. {
  17. swp1=${NETIFS[p1]}
  18. swp2=${NETIFS[p2]}
  19. team_create lag1 lacp
  20. ip link set dev lag1 addrgenmode none
  21. ip link set dev lag1 address $(mac_get $swp1)
  22. team_create lag2 lacp
  23. ip link set dev lag2 addrgenmode none
  24. ip link set dev lag2 address $(mac_get $swp2)
  25. ip link add name br1 type bridge vlan_filtering 1
  26. ip link set dev br1 addrgenmode none
  27. ip link set dev br1 address $(mac_get lag1)
  28. ip link set dev br1 up
  29. ip link set dev lag1 master br1
  30. ip link set dev $swp1 master lag1
  31. ip link set dev $swp1 up
  32. ip link set dev $swp2 master lag2
  33. ip link set dev $swp2 up
  34. }
  35. cleanup()
  36. {
  37. pre_cleanup
  38. ip link set dev $swp2 nomaster
  39. ip link set dev $swp2 down
  40. ip link set dev $swp1 nomaster
  41. ip link set dev $swp1 down
  42. ip link del dev lag2
  43. ip link set dev lag1 nomaster
  44. ip link del dev lag1
  45. ip link del dev br1
  46. }
  47. bridge_rif_add()
  48. {
  49. RET=0
  50. local rifs_occ_t0=$(devlink_resource_occ_get rifs)
  51. __addr_add_del br1 add 192.0.2.2/28
  52. sleep 1
  53. local rifs_occ_t1=$(devlink_resource_occ_get rifs)
  54. local expected_rifs=$((rifs_occ_t0 + 1))
  55. ((expected_rifs == rifs_occ_t1))
  56. check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
  57. log_test "Add RIF for bridge on address addition"
  58. }
  59. bridge_rif_nomaster()
  60. {
  61. RET=0
  62. local rifs_occ_t0=$(devlink_resource_occ_get rifs)
  63. ip link set dev lag1 nomaster
  64. sleep 1
  65. local rifs_occ_t1=$(devlink_resource_occ_get rifs)
  66. local expected_rifs=$((rifs_occ_t0 - 1))
  67. ((expected_rifs == rifs_occ_t1))
  68. check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
  69. log_test "Drop RIF for bridge on LAG deslavement"
  70. }
  71. bridge_rif_remaster()
  72. {
  73. RET=0
  74. local rifs_occ_t0=$(devlink_resource_occ_get rifs)
  75. ip link set dev lag1 master br1
  76. sleep 1
  77. local rifs_occ_t1=$(devlink_resource_occ_get rifs)
  78. local expected_rifs=$((rifs_occ_t0 + 1))
  79. ((expected_rifs == rifs_occ_t1))
  80. check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
  81. log_test "Add RIF for bridge on LAG reenslavement"
  82. }
  83. bridge_rif_nomaster_addr()
  84. {
  85. local rifs_occ_t0=$(devlink_resource_occ_get rifs)
  86. # Adding an address while the LAG is enslaved shouldn't generate a RIF.
  87. __addr_add_del lag1 add 192.0.2.65/28
  88. sleep 1
  89. local rifs_occ_t1=$(devlink_resource_occ_get rifs)
  90. local expected_rifs=$((rifs_occ_t0))
  91. ((expected_rifs == rifs_occ_t1))
  92. check_err $? "After adding IP: Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
  93. # Removing the LAG from the bridge should drop RIF for the bridge (as
  94. # tested in bridge_rif_lag_nomaster), but since the LAG now has an
  95. # address, it should gain a RIF.
  96. ip link set dev lag1 nomaster
  97. sleep 1
  98. local rifs_occ_t2=$(devlink_resource_occ_get rifs)
  99. local expected_rifs=$((rifs_occ_t0))
  100. ((expected_rifs == rifs_occ_t2))
  101. check_err $? "After deslaving: Expected $expected_rifs RIFs, $rifs_occ_t2 are used"
  102. log_test "Add RIF for LAG on deslavement from bridge"
  103. __addr_add_del lag1 del 192.0.2.65/28
  104. ip link set dev lag1 master br1
  105. sleep 1
  106. }
  107. bridge_rif_nomaster_port()
  108. {
  109. RET=0
  110. local rifs_occ_t0=$(devlink_resource_occ_get rifs)
  111. ip link set dev $swp1 nomaster
  112. sleep 1
  113. local rifs_occ_t1=$(devlink_resource_occ_get rifs)
  114. local expected_rifs=$((rifs_occ_t0 - 1))
  115. ((expected_rifs == rifs_occ_t1))
  116. check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
  117. log_test "Drop RIF for bridge on deslavement of port from LAG"
  118. }
  119. bridge_rif_remaster_port()
  120. {
  121. RET=0
  122. local rifs_occ_t0=$(devlink_resource_occ_get rifs)
  123. ip link set dev $swp1 down
  124. ip link set dev $swp1 master lag1
  125. ip link set dev $swp1 up
  126. setup_wait_dev $swp1
  127. local rifs_occ_t1=$(devlink_resource_occ_get rifs)
  128. local expected_rifs=$((rifs_occ_t0 + 1))
  129. ((expected_rifs == rifs_occ_t1))
  130. check_err $? "Expected $expected_rifs RIFs, $rifs_occ_t1 are used"
  131. log_test "Add RIF for bridge on reenslavement of port to LAG"
  132. }
  133. trap cleanup EXIT
  134. setup_prepare
  135. setup_wait
  136. tests_run
  137. exit $EXIT_STATUS