router_nh.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. # +-------------------------+ +-------------------------+
  4. # | H1 | | H2 |
  5. # | $h1 + | | $h2 + |
  6. # | 192.0.2.2/24 | | | 198.51.100.2/24 | |
  7. # | 2001:db8:1::2/64 | | | 2001:db8:2::2/64 | |
  8. # +-------------------|-----+ +-------------------|-----+
  9. # | |
  10. # +-------------------|----------------------------|-----+
  11. # | R1 | | |
  12. # | $rp1 + $rp2 + |
  13. # | 192.0.2.1/24 198.51.100.1/24 |
  14. # | 2001:db8:1::1/64 2001:db8:2::1/64 |
  15. # +------------------------------------------------------+
  16. ALL_TESTS="
  17. ping_ipv4
  18. ping_ipv6
  19. "
  20. NUM_NETIFS=4
  21. source lib.sh
  22. source tc_common.sh
  23. h1_create()
  24. {
  25. vrf_create "vrf-h1"
  26. ip link set dev $h1 master vrf-h1
  27. ip link set dev vrf-h1 up
  28. ip link set dev $h1 up
  29. ip address add 192.0.2.2/24 dev $h1
  30. ip address add 2001:db8:1::2/64 dev $h1
  31. ip route add 198.51.100.0/24 vrf vrf-h1 nexthop via 192.0.2.1
  32. ip route add 2001:db8:2::/64 vrf vrf-h1 nexthop via 2001:db8:1::1
  33. }
  34. h1_destroy()
  35. {
  36. ip route del 2001:db8:2::/64 vrf vrf-h1
  37. ip route del 198.51.100.0/24 vrf vrf-h1
  38. ip address del 2001:db8:1::2/64 dev $h1
  39. ip address del 192.0.2.2/24 dev $h1
  40. ip link set dev $h1 down
  41. vrf_destroy "vrf-h1"
  42. }
  43. h2_create()
  44. {
  45. vrf_create "vrf-h2"
  46. ip link set dev $h2 master vrf-h2
  47. ip link set dev vrf-h2 up
  48. ip link set dev $h2 up
  49. ip address add 198.51.100.2/24 dev $h2
  50. ip address add 2001:db8:2::2/64 dev $h2
  51. ip route add 192.0.2.0/24 vrf vrf-h2 nexthop via 198.51.100.1
  52. ip route add 2001:db8:1::/64 vrf vrf-h2 nexthop via 2001:db8:2::1
  53. }
  54. h2_destroy()
  55. {
  56. ip route del 2001:db8:1::/64 vrf vrf-h2
  57. ip route del 192.0.2.0/24 vrf vrf-h2
  58. ip address del 2001:db8:2::2/64 dev $h2
  59. ip address del 198.51.100.2/24 dev $h2
  60. ip link set dev $h2 down
  61. vrf_destroy "vrf-h2"
  62. }
  63. router_create()
  64. {
  65. ip link set dev $rp1 up
  66. ip link set dev $rp2 up
  67. tc qdisc add dev $rp2 clsact
  68. ip address add 192.0.2.1/24 dev $rp1
  69. ip address add 2001:db8:1::1/64 dev $rp1
  70. ip address add 198.51.100.1/24 dev $rp2
  71. ip address add 2001:db8:2::1/64 dev $rp2
  72. }
  73. router_destroy()
  74. {
  75. ip address del 2001:db8:2::1/64 dev $rp2
  76. ip address del 198.51.100.1/24 dev $rp2
  77. ip address del 2001:db8:1::1/64 dev $rp1
  78. ip address del 192.0.2.1/24 dev $rp1
  79. tc qdisc del dev $rp2 clsact
  80. ip link set dev $rp2 down
  81. ip link set dev $rp1 down
  82. }
  83. routing_nh_obj()
  84. {
  85. # Create the nexthops as AF_INET6, so that IPv4 and IPv6 routes could
  86. # use them.
  87. ip -6 nexthop add id 101 dev $rp1
  88. ip -6 nexthop add id 102 dev $rp2
  89. ip route replace 192.0.2.0/24 nhid 101
  90. ip route replace 2001:db8:1::/64 nhid 101
  91. ip route replace 198.51.100.0/24 nhid 102
  92. ip route replace 2001:db8:2::/64 nhid 102
  93. }
  94. setup_prepare()
  95. {
  96. h1=${NETIFS[p1]}
  97. rp1=${NETIFS[p2]}
  98. rp2=${NETIFS[p3]}
  99. h2=${NETIFS[p4]}
  100. rp1mac=$(mac_get $rp1)
  101. vrf_prepare
  102. h1_create
  103. h2_create
  104. router_create
  105. forwarding_enable
  106. }
  107. cleanup()
  108. {
  109. pre_cleanup
  110. forwarding_restore
  111. router_destroy
  112. h2_destroy
  113. h1_destroy
  114. vrf_cleanup
  115. }
  116. ping_ipv4()
  117. {
  118. ping_test $h1 198.51.100.2
  119. }
  120. ping_ipv6()
  121. {
  122. ping6_test $h1 2001:db8:2::2
  123. }
  124. trap cleanup EXIT
  125. setup_prepare
  126. setup_wait
  127. routing_nh_obj
  128. tests_run
  129. exit $EXIT_STATUS