summaryrefslogtreecommitdiff
path: root/ospfd
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd')
-rw-r--r--ospfd/ospf_flood.c11
-rw-r--r--ospfd/ospf_lsa.c5
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);