]> git.puffer.fish Git - mirror/frr.git/commitdiff
Section 16.0 of rfc2328 (OSPF) specifies that the short-path
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 20 May 2015 00:24:44 +0000 (17:24 -0700)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 20 May 2015 00:24:44 +0000 (17:24 -0700)
calculation to a node should be constructed with the sum of all path
costs (metrics) to the node (pretty simple huh).  There is a usage of
metric typified by the "max-metric router-lsa" command in many
networking stacks that allows a router to gracefully "remove" itself
from a topology by advertising the maximum value of metric in it's
router LSAs (16 bits of "1").  In this case, the router will continue
to forward any traffic sent to it while these "max-metric" LSAs are
propagated through the network; at which point, the router can be
taken out of service.

The correct handling of this in ospfd would use this metric as part of
the calculation, disuading other routers from using it for transit
traffic (assuming a better path exits).  Unfortunately, the ospfd
behavior is to remove these links from the SPF calculation.  This
patch changes the behavior to omit this exception handling.

Signed-off-by: JR Rivers <jrrivers@cumulusnetworks.com>
ospfd/ospf_spf.c

index a7155bc64a70ffc501f4bad03c5139515a9d3ea7..0148316296a9f9687d10a87afaf0a26bec98432e 100644 (file)
@@ -838,13 +838,6 @@ ospf_spf_next (struct vertex *v, struct ospf_area *area,
           if ((type = l->m[0].type) == LSA_LINK_TYPE_STUB)
             continue;
           
-          /* Infinite distance links shouldn't be followed, except
-           * for local links (a stub-routed router still wants to
-           * calculate tree, so must follow its own links).
-           */
-          if ((v != area->spf) && l->m[0].metric >= OSPF_OUTPUT_COST_INFINITE)
-            continue;
-
           /* (b) Otherwise, W is a transit vertex (router or transit
              network).  Look up the vertex W's LSA (router-LSA or
              network-LSA) in Area A's link state database. */