router_bridge.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. # +------------------------+ +----------------------+
  4. # | H1 (vrf) | | H2 (vrf) |
  5. # | + $h1 | | + $h2 |
  6. # | | 192.0.2.1/28 | | | 192.0.2.130/28 |
  7. # | | 2001:db8:1::1/64 | | | 2001:db8:2::2/64 |
  8. # | | | | | |
  9. # +----|-------------------+ +--|-------------------+
  10. # | |
  11. # +----|--------------------------------------------------|-------------------+
  12. # | SW | | |
  13. # | +--|-----------------------------+ + $swp2 |
  14. # | | + $swp1 BR1 (802.1q) | 192.0.2.129/28 |
  15. # | | 192.0.2.2/28 | 2001:db8:2::1/64 |
  16. # | | 2001:db8:1::1/64 | |
  17. # | | | |
  18. # | +--------------------------------+ |
  19. # +---------------------------------------------------------------------------+
  20. ALL_TESTS="
  21. ping_ipv4
  22. ping_ipv6
  23. config_remaster
  24. ping_ipv4
  25. ping_ipv6
  26. config_remove_pvid
  27. ping_ipv4_fails
  28. ping_ipv6_fails
  29. config_add_pvid
  30. ping_ipv4
  31. ping_ipv6
  32. config_late_pvid
  33. ping_ipv4
  34. ping_ipv6
  35. "
  36. NUM_NETIFS=4
  37. source lib.sh
  38. h1_create()
  39. {
  40. simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64
  41. ip -4 route add 192.0.2.128/28 vrf v$h1 nexthop via 192.0.2.2
  42. ip -6 route add 2001:db8:2::/64 vrf v$h1 nexthop via 2001:db8:1::2
  43. }
  44. h1_destroy()
  45. {
  46. ip -6 route del 2001:db8:2::/64 vrf v$h1
  47. ip -4 route del 192.0.2.128/28 vrf v$h1
  48. simple_if_fini $h1 192.0.2.1/28 2001:db8:1::1/64
  49. }
  50. h2_create()
  51. {
  52. simple_if_init $h2 192.0.2.130/28 2001:db8:2::2/64
  53. ip -4 route add 192.0.2.0/28 vrf v$h2 nexthop via 192.0.2.129
  54. ip -6 route add 2001:db8:1::/64 vrf v$h2 nexthop via 2001:db8:2::1
  55. }
  56. h2_destroy()
  57. {
  58. ip -6 route del 2001:db8:1::/64 vrf v$h2
  59. ip -4 route del 192.0.2.0/28 vrf v$h2
  60. simple_if_fini $h2 192.0.2.130/28 2001:db8:2::2/64
  61. }
  62. router_create()
  63. {
  64. ip link add name br1 address $(mac_get $swp1) \
  65. type bridge vlan_filtering 1
  66. ip link set dev br1 up
  67. ip link set dev $swp1 master br1
  68. ip link set dev $swp1 up
  69. __addr_add_del br1 add 192.0.2.2/28 2001:db8:1::2/64
  70. ip link set dev $swp2 up
  71. __addr_add_del $swp2 add 192.0.2.129/28 2001:db8:2::1/64
  72. }
  73. router_destroy()
  74. {
  75. __addr_add_del $swp2 del 192.0.2.129/28 2001:db8:2::1/64
  76. ip link set dev $swp2 down
  77. __addr_add_del br1 del 192.0.2.2/28 2001:db8:1::2/64
  78. ip link set dev $swp1 down
  79. ip link set dev $swp1 nomaster
  80. ip link del dev br1
  81. }
  82. config_remaster()
  83. {
  84. log_info "Remaster bridge slave"
  85. ip link set dev $swp1 nomaster
  86. sleep 2
  87. ip link set dev $swp1 master br1
  88. }
  89. config_remove_pvid()
  90. {
  91. log_info "Remove PVID from the bridge"
  92. bridge vlan add dev br1 vid 1 self
  93. sleep 2
  94. }
  95. config_add_pvid()
  96. {
  97. log_info "Add PVID to the bridge"
  98. bridge vlan add dev br1 vid 1 self pvid untagged
  99. sleep 2
  100. }
  101. config_late_pvid()
  102. {
  103. log_info "Add bridge PVID after enslaving port"
  104. ip link set dev $swp1 nomaster
  105. ip link set dev br1 type bridge vlan_default_pvid 0
  106. sleep 2
  107. ip link set dev $swp1 master br1
  108. ip link set dev br1 type bridge vlan_default_pvid 1
  109. }
  110. setup_prepare()
  111. {
  112. h1=${NETIFS[p1]}
  113. swp1=${NETIFS[p2]}
  114. swp2=${NETIFS[p3]}
  115. h2=${NETIFS[p4]}
  116. vrf_prepare
  117. h1_create
  118. h2_create
  119. router_create
  120. forwarding_enable
  121. }
  122. cleanup()
  123. {
  124. pre_cleanup
  125. forwarding_restore
  126. router_destroy
  127. h2_destroy
  128. h1_destroy
  129. vrf_cleanup
  130. }
  131. ping_ipv4()
  132. {
  133. ping_test $h1 192.0.2.130
  134. }
  135. ping_ipv6()
  136. {
  137. ping6_test $h1 2001:db8:2::2
  138. }
  139. ping_ipv4_fails()
  140. {
  141. ping_test_fails $h1 192.0.2.130
  142. }
  143. ping_ipv6_fails()
  144. {
  145. ping6_test_fails $h1 2001:db8:2::2
  146. }
  147. trap cleanup EXIT
  148. setup_prepare
  149. setup_wait
  150. tests_run
  151. exit $EXIT_STATUS