]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospf6d: Let the user override interface cost for a loopback
authorDonatas Abraitis <donatas@opensourcerouting.org>
Mon, 13 Nov 2023 19:06:20 +0000 (21:06 +0200)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Tue, 14 Nov 2023 13:57:10 +0000 (13:57 +0000)
Fixes: 80dfa9e012eb ("ospf6d: Set loopback interface cost to 0")
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit d46c4e94022ae26eb69e5990b1254f8c24b29958)

ospf6d/ospf6_interface.c

index 2a6b816844120fb4e5d077d56901a027b52b4877..a79f993473618e339ca55c3b810e202d7a3a915b 100644 (file)
@@ -128,19 +128,10 @@ 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 = 0;
+       uint32_t cost;
        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.
@@ -162,6 +153,15 @@ static uint32_t ospf6_interface_get_cost(struct ospf6_interface *oi)
                cost = (uint32_t)((double)refbw / (double)bw + (double)0.5);
                if (cost < 1)
                        cost = 1;
+
+               /* 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))
+                       cost = 0;
        }
 
        return cost;