]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospfd: Respect loopback's cost that is set and set loopback costs to 0
authorDonald Sharp <sharpd@nvidia.com>
Tue, 9 May 2023 17:10:35 +0000 (13:10 -0400)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Wed, 10 May 2023 16:13:57 +0000 (16:13 +0000)
When setting an loopback's cost, set the value to 0, unless the operator
has assigned a value for the loopback's cost.

RFC states:

If the state of the interface is Loopback, add a Type 3
link (stub network) as long as this is not an interface
to an unnumbered point-to-point network. The Link ID
should be set to the IP interface address, the Link Data
set to the mask 0xffffffff (indicating a host route),
and the cost set to 0.

FRR is going to allow this to be overridden if the operator specifically
sets a value too.

Fixes: #13472
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit dd2bc4fb406cc9284d35ef623ebb8838cb158bc8)

ospfd/ospf_interface.c
ospfd/ospf_lsa.c

index 61497cdb9cd26b9fd2cf6cb7e47a5846791da437..f71d222e98dd4dab427dc5bdea43b8b6bfa78c34 100644 (file)
@@ -115,6 +115,9 @@ int ospf_if_get_output_cost(struct ospf_interface *oi)
                        cost = 1;
                else if (cost > 65535)
                        cost = 65535;
+
+               if (if_is_loopback(oi->ifp))
+                       cost = 0;
        }
 
        return cost;
index 109229f9097291733f195de2e8cc13ac62cfe18b..3ca8427d88c4ea4319eb939b4549999440a3328b 100644 (file)
@@ -603,7 +603,8 @@ static int lsa_link_loopback_set(struct stream **s, struct ospf_interface *oi)
 
        mask.s_addr = 0xffffffff;
        id.s_addr = oi->address->u.prefix4.s_addr;
-       return link_info_set(s, id, mask, LSA_LINK_TYPE_STUB, 0, 0);
+       return link_info_set(s, id, mask, LSA_LINK_TYPE_STUB, 0,
+                            oi->output_cost);
 }
 
 /* Describe Virtual Link. */