]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Bug in (B)DR election fixed.
authorOndrej Filip <feela@network.cz>
Wed, 10 May 2000 11:48:21 +0000 (11:48 +0000)
committerOndrej Filip <feela@network.cz>
Wed, 10 May 2000 11:48:21 +0000 (11:48 +0000)
proto/ospf/neighbor.c

index 96449d19337c90ca0f1effa60de02e08f0f0cfb0..c959ab873d92fe16d3d850aa4d20f4679ae63aca 100644 (file)
@@ -349,11 +349,31 @@ bdr_election(struct ospf_iface *ifa, struct proto *p)
   doadj=0;
   if((ifa->drid!=ndrid) || (ifa->bdrid!=nbdrid)) doadj=1;
   ifa->drid=ndrid;
-  if((tmp=find_neigh(ifa,ndrid))==NULL) die("Error i BDR election.\n");
-  ifa->drip=tmp->ip;
-  ifa->bdrid=nbdrid;
-  if((tmp=find_neigh(ifa,nbdrid))==NULL) die("Error i BDR election.\n");
-  ifa->bdrip=tmp->ip;
+  if(ndrid==0)
+  {
+    ifa->drid=0;
+    ifa->drip=ipa_from_u32(0);
+  }
+  else
+  {
+    if((tmp=find_neigh(ifa,ndrid))==NULL)
+      die("Error in DR election.\n");
+    ifa->drid=ndrid;
+    ifa->drip=tmp->ip;
+  }
+
+  if(nbdrid==0)
+  {
+    ifa->bdrid=0;
+    ifa->bdrip=ipa_from_u32(0);
+  }
+  else
+  {
+    if((tmp=find_neigh(ifa,nbdrid))==NULL)
+      die("Error in BDR election.\n");
+    ifa->bdrid=nbdrid;
+    ifa->bdrip=tmp->ip;
+  }
 
   DBG("%s: DR=%I, BDR=%I\n",p->name, ifa->drid, ifa->bdrid);