From bf9392c6e932080156e70c0436977fd5dbcdb0cd Mon Sep 17 00:00:00 2001 From: paul Date: Fri, 6 Jun 2003 23:23:36 +0000 Subject: 2003-06-7 kamatchi soundaram * (ospf_spf.c): Fix consideration of costs for PtP nexthops in ospf_nexthop_calculation(). --- ospfd/ospf_spf.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'ospfd/ospf_spf.c') diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c index 33616d83..5d873fbb 100644 --- a/ospfd/ospf_spf.c +++ b/ospfd/ospf_spf.c @@ -340,6 +340,37 @@ ospf_get_next_link (struct vertex *v, struct vertex *w, return NULL; } +/* Consider supplied next-hop for inclusion to the supplied list + * of next-hops, adjust list as neccessary + */ +void +ospf_spf_consider_nexthop (struct list *nexthops, struct vertex_nexthop *newhop) +{ + struct listnode *nnode; + struct vertex_nexthop *hop; + + LIST_LOOP (nexthops, hop, nnode) + { + assert (hop->oi); + /* weed out hops with higher cost than the newhop */ + if (hop->oi->output_cost > newhop->oi->output_cost) + { + /* delete the existing nexthop */ + listnode_delete (nexthops, hop); + vertex_nexthop_free (hop); + } + else if ( hop->oi->output_cost < newhop->oi->output_cost) + { + return; + } + } + + /* new hop is <= existing hops, add it */ + listnode_add (nexthops, newhop); + + return; +} + /* Calculate nexthop from root to vertex W. */ void ospf_nexthop_calculation (struct ospf_area *area, @@ -407,7 +438,7 @@ ospf_nexthop_calculation (struct ospf_area *area, nh = vertex_nexthop_new (v); nh->oi = oi; nh->router = l2->link_data; - listnode_add (w->nexthop, nh); + ospf_spf_consider_nexthop (w->nexthop, nh); } } } -- cgit v1.2.1