diff options
Diffstat (limited to 'ospfd')
-rw-r--r-- | ospfd/ospf_flood.c | 11 | ||||
-rw-r--r-- | ospfd/ospf_lsa.c | 5 |
2 files changed, 8 insertions, 8 deletions
diff --git a/ospfd/ospf_flood.c b/ospfd/ospf_flood.c index 0f485fe3..41661da2 100644 --- a/ospfd/ospf_flood.c +++ b/ospfd/ospf_flood.c @@ -133,10 +133,8 @@ ospf_process_self_originated_lsa (struct ospf *ospf, { case OSPF_ROUTER_LSA: /* Originate a new instance and schedule flooding */ - /* It shouldn't be necessary, but anyway */ - ospf_lsa_unlock (&area->router_lsa_self); - area->router_lsa_self = ospf_lsa_lock (new); - + if (area->router_lsa_self) + area->router_lsa_self->data->ls_seqnum = new->data->ls_seqnum; ospf_router_lsa_timer_add (area); return; case OSPF_NETWORK_LSA: @@ -170,9 +168,8 @@ ospf_process_self_originated_lsa (struct ospf *ospf, } #endif /* HAVE_OPAQUE_LSA */ - ospf_lsa_unlock (&oi->network_lsa_self); - oi->network_lsa_self = ospf_lsa_lock (new); - + if (oi->network_lsa_self) + oi->network_lsa_self->data->ls_seqnum = new->data->ls_seqnum; /* Schedule network-LSA origination. */ ospf_network_lsa_timer_add (oi); return; diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c index 18eed79e..15a6a4c4 100644 --- a/ospfd/ospf_lsa.c +++ b/ospfd/ospf_lsa.c @@ -2451,7 +2451,10 @@ ospf_router_lsa_install (struct ospf *ospf, if (rt_recalc) ospf_spf_calculate_schedule (ospf); - if (IS_LSA_SELF (new)) + /* Only install LSA if it is originated/refreshed by us. + * If LSA was received by flooding, the RECEIVED flag is set so do + * not link the LSA */ + if (IS_LSA_SELF (new) && !CHECK_FLAG (new->flags, OSPF_LSA_RECEIVED)) { /* Set router-LSA refresh timer. */ OSPF_TIMER_OFF (area->t_router_lsa_self); |