2003-06-7 kamatchi soundaram <kamatchi@tdd.sj.nec.com>

	* (ospf_spf.c): Fix consideration of costs for PtP nexthops in
	  ospf_nexthop_calculation().
diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c
index 33616d8..5d873fb 100644
--- a/ospfd/ospf_spf.c
+++ b/ospfd/ospf_spf.c
@@ -340,6 +340,37 @@
   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 @@
 		      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);
 		    }
 		}
 	    }