summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOndrej Filip <feela@network.cz>2000-06-05 07:06:22 +0200
committerOndrej Filip <feela@network.cz>2000-06-05 07:06:22 +0200
commitdc2548d2ccc45722f0dcaa861dd3b45a397d2cac (patch)
treefbe3011730bdfde0f30a7ab3fabaffb477cb10ce
parent88048fb3c970842a16c65b1566ba817871a04eb5 (diff)
downloadbird-dc2548d2ccc45722f0dcaa861dd3b45a397d2cac.tar
bird-dc2548d2ccc45722f0dcaa861dd3b45a397d2cac.zip
Premature age LSA if you're NOT dr.
-rw-r--r--proto/ospf/iface.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/proto/ospf/iface.c b/proto/ospf/iface.c
index f7be7eb..f34d249 100644
--- a/proto/ospf/iface.c
+++ b/proto/ospf/iface.c
@@ -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;
+ }
}
}
}