]> git.puffer.fish Git - mirror/frr.git/commitdiff
2003-06-7 kamatchi soundaram <kamatchi@tdd.sj.nec.com>
authorpaul <paul>
Fri, 6 Jun 2003 23:23:36 +0000 (23:23 +0000)
committerpaul <paul>
Fri, 6 Jun 2003 23:23:36 +0000 (23:23 +0000)
* (ospf_spf.c): Fix consideration of costs for PtP nexthops in
  ospf_nexthop_calculation().

ospfd/ospf_spf.c

index 33616d8375e36035778bfbf97df0996da3d4664a..5d873fbbdd2e83942bb0fc7ce07a761120759f14 100644 (file)
@@ -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);
                    }
                }
            }