]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Hope, bug in next hop calculation for stub routes fixed.
authorOndrej Filip <feela@network.cz>
Tue, 21 Aug 2001 15:00:29 +0000 (15:00 +0000)
committerOndrej Filip <feela@network.cz>
Tue, 21 Aug 2001 15:00:29 +0000 (15:00 +0000)
proto/ospf/rt.c

index 6298695641ee6015aff6844bb8e2b38b8d0e6574..f48f604d5ebf4b2bf34dce76d076d687c9ca9cc0 100644 (file)
@@ -235,7 +235,15 @@ again:
         a0.flags=0;
         a0.aflags=0;
         a0.iface=en->nhi;
-        a0.gw=en->nh;
+        if(ipa_in_net(en->nh,en->nhi->addr->ip,en->nhi->addr->pxlen))
+        {
+           a0.gw=IPA_NONE;
+        }
+        else
+        {
+           a0.gw=en->nh;
+        }
+        
         ne=net_get(p->table, nf->fn.prefix, nf->fn.pxlen);
         e=rte_get_temp(&a0);
         e->u.ospf.metric1=nf->metric;
@@ -604,13 +612,12 @@ calc_next_hop(struct top_hash_entry *en, struct top_hash_entry *par,
   u32 myrid=p->cf->global->router_id;
 
   DBG("     Next hop called.\n");
-  if(ipa_to_u32(par->nh)==0)
+  if(ipa_equal(par->nh,IPA_NONE))
   {
     neighbor *nn;
     DBG("     Next hop calculating for id: %I rt: %I type: %u\n",
       en->lsa.id,en->lsa.rt,en->lsa.type);
 
-/* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx */
     if(par==oa->rt)
     {
       if(en->lsa.type==LSA_T_NET)
@@ -637,6 +644,7 @@ calc_next_hop(struct top_hash_entry *en, struct top_hash_entry *par,
       {
         if((neigh=find_neigh_noifa(po,en->lsa.rt))==NULL) return;
         en->nhi=neigh->ifa->iface;
+        en->nh=neigh->ip;      /* Yes, neighbor is it's own next hop */
         return;
       }
     }
@@ -651,6 +659,7 @@ calc_next_hop(struct top_hash_entry *en, struct top_hash_entry *par,
     else       /* Parent is some RT neighbor */
     {
       /* FIXME: I should probably hold ospf_iface in top_hash_entry */
+      /* FIXME: Isn't this useless */
       neigh=NULL;
       WALK_LIST(ifa,po->iface_list)
       {