Premature age LSA if you're NOT dr.
This commit is contained in:
parent
88048fb3c9
commit
dc2548d2cc
1 changed files with 10 additions and 2 deletions
|
@ -19,13 +19,15 @@ char *ospf_it[]={ "broadcast", "nbma", "point-to-point", "virtual link" };
|
||||||
void
|
void
|
||||||
iface_chstate(struct ospf_iface *ifa, u8 state)
|
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)
|
if(ifa->state!=state)
|
||||||
{
|
{
|
||||||
p=(struct proto *)(ifa->proto);
|
|
||||||
debug("%s: Changing state of iface: %s from \"%s\" into \"%s\".\n",
|
debug("%s: Changing state of iface: %s from \"%s\" into \"%s\".\n",
|
||||||
p->name, ifa->iface->name, ospf_is[ifa->state], ospf_is[state]);
|
p->name, ifa->iface->name, ospf_is[ifa->state], ospf_is[state]);
|
||||||
|
oldstate=ifa->state;
|
||||||
ifa->state=state;
|
ifa->state=state;
|
||||||
if(ifa->iface->flags & IF_MULTICAST)
|
if(ifa->iface->flags & IF_MULTICAST)
|
||||||
{
|
{
|
||||||
|
@ -62,6 +64,12 @@ iface_chstate(struct ospf_iface *ifa, u8 state)
|
||||||
ifa->dr_sk=NULL;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue