diff options
Diffstat (limited to 'ospfd')
-rw-r--r-- | ospfd/ChangeLog | 6 | ||||
-rw-r--r-- | ospfd/ospf_spf.c | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index bb0e9083..422208e8 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -1,3 +1,9 @@ +2007-08-07 Atis Elsts <atis@mikrotik.com> + + * ospf_spf.c: (ospf_spf_next) Sort heap in correct direction + after vertex cost is changed, thus fixing incorrect SPF + calculation on certain topologies. + 2007-08-06 Paul Jakma <paul.jakma@sun.com> * ospf_lsa.c: (router_lsa_flags) Bug #331, NSSA regression caused diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c index 51e33832..41288f1e 100644 --- a/ospfd/ospf_spf.c +++ b/ospfd/ospf_spf.c @@ -896,9 +896,12 @@ ospf_spf_next (struct vertex *v, struct ospf_area *area, * will flush the old parents */ if (ospf_nexthop_calculation (area, v, w, l, distance)) - /* Decrease the key of the node in the heap, - * re-sort the heap. */ - trickle_down (w_lsa->stat, candidate); + /* Decrease the key of the node in the heap. + * trickle-sort it up towards root, just in case this + * node should now be the new root due the cost change. + * (pqueu_{de,en}queue + */ + trickle_up (w_lsa->stat, candidate); } } /* end W is already on the candidate list */ } /* end loop over the links in V's LSA */ |