]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Premature age LSA if you're NOT dr.
authorOndrej Filip <feela@network.cz>
Mon, 5 Jun 2000 05:06:22 +0000 (05:06 +0000)
committerOndrej Filip <feela@network.cz>
Mon, 5 Jun 2000 05:06:22 +0000 (05:06 +0000)
proto/ospf/iface.c

index f7be7ebd7abffeca4bd18e76e266b840d1d69942..f34d249dcaec2946da050eff52c0cc582ba30dea 100644 (file)
@@ -19,13 +19,15 @@ char *ospf_it[]={ "broadcast", "nbma", "point-to-point", "virtual link" };
 void
 iface_chstate(struct ospf_iface *ifa, u8 state)
 {
-  struct proto *p;
+  struct proto_ospf *po=ifa->proto;
+  struct proto *p=&po->proto;
+  u8 oldstate;
 
   if(ifa->state!=state)
   {
-    p=(struct proto *)(ifa->proto);
     debug("%s: Changing state of iface: %s from \"%s\" into \"%s\".\n",
       p->name, ifa->iface->name, ospf_is[ifa->state], ospf_is[state]);
+    oldstate=ifa->state;
     ifa->state=state;
     if(ifa->iface->flags & IF_MULTICAST)
     {
@@ -62,6 +64,12 @@ iface_chstate(struct ospf_iface *ifa, u8 state)
          ifa->dr_sk=NULL;
        }
       }
+      if(oldstate==OSPF_IS_DR)
+      {
+        net_flush_lsa(ifa->nlsa,po,ifa->oa);
+        if(can_flush_lsa(ifa->oa)) flush_lsa(ifa->nlsa,ifa->oa);
+        ifa->nlsa=NULL;
+      }
     }
   }
 }