summaryrefslogtreecommitdiff
path: root/proto/ospf
diff options
context:
space:
mode:
Diffstat (limited to 'proto/ospf')
-rw-r--r--proto/ospf/lsupd.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/proto/ospf/lsupd.c b/proto/ospf/lsupd.c
index b6037419..d9babc95 100644
--- a/proto/ospf/lsupd.c
+++ b/proto/ospf/lsupd.c
@@ -301,9 +301,36 @@ ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p,
{
struct ospf_iface *ift=NULL;
void *body;
+ struct ospf_iface *nifa;
+ int self=0;
DBG("PG143(5): Received LSA is newer\n");
+ if(lsatmp.rt==p->cf->global->router_id) self=1;
+
+ if(lsatmp.type==LSA_T_NET)
+ {
+ WALK_LIST(nifa,po->iface_list)
+ {
+ if(ipa_compare(nifa->iface->addr->ip,ipa_from_u32(lsatmp.id))==0)
+ {
+ self=1;
+ break;
+ }
+ }
+ }
+
+ if(self)
+ {
+ lsa->age=(htons(LSA_MAXAGE));
+ lsatmp.age=LSA_MAXAGE;
+ debug("Premature aging self originated lsa.\n");
+ flood_lsa(NULL,lsa,&lsatmp,po,NULL,oa);
+ continue;
+ }
+
+
+
/* pg 144 (5a) */
if(lsadb && ((now-lsadb->inst_t)<MINLSARRIVAL))
{
@@ -344,8 +371,6 @@ ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p,
lsadb=lsa_install_new(&lsatmp,body, oa, p);
DBG("New LSA installed in DB\n");
- /* FIXME 145 (5f) self originated? */
-
continue;
}