summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2023-10-23 11:24:12 +0300
committerMergify <37929162+mergify[bot]@users.noreply.github.com>2023-10-30 04:20:36 +0000
commit2172fb9f67730e78100a4723246b246cebf4cdf0 (patch)
tree5f9751377bbfb1195fd76b05614104ced762c56a
parent0653c10c20edec90a5333b03d58e38872df6c635 (diff)
ospf6d: Set loopback interface cost to 0
https://www.rfc-editor.org/rfc/rfc5340.html#page-37 states: If the interface type is point- to-multipoint or the interface is in the state Loopback, the global scope IPv6 addresses associated with the interface (if any) are copied into the intra-area-prefix-LSA with the PrefixOptions LA-bit set, the PrefixLength set to 128, and the metric set to 0. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org> (cherry picked from commit 80dfa9e012ebdb3e88cbd6de3101ae6dd9109ad2)
-rw-r--r--ospf6d/ospf6_interface.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c
index a20ddf6c10..2a6b816844 100644
--- a/ospf6d/ospf6_interface.c
+++ b/ospf6d/ospf6_interface.c
@@ -128,9 +128,19 @@ static uint8_t ospf6_default_iftype(struct interface *ifp)
static uint32_t ospf6_interface_get_cost(struct ospf6_interface *oi)
{
/* If all else fails, use default OSPF cost */
- uint32_t cost;
+ uint32_t cost = 0;
uint32_t bw, refbw;
struct ospf6 *ospf6;
+
+ /* If the interface type is point-to-multipoint or the interface
+ * is in the state Loopback, the global scope IPv6 addresses
+ * associated with the interface (if any) are copied into the
+ * intra-area-prefix-LSA with the PrefixOptions LA-bit set, the
+ * PrefixLength set to 128, and the metric set to 0.
+ */
+ if (if_is_loopback(oi->interface))
+ return cost;
+
/* interface speed and bw can be 0 in some platforms,
* use ospf default bw. If bw is configured then it would
* be used.