summaryrefslogtreecommitdiff
path: root/ospfd/ospf_lsa.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospf_lsa.c')
-rw-r--r--ospfd/ospf_lsa.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index d209ae053c..cc1b2919c0 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -2954,6 +2954,32 @@ static int ospf_maxage_lsa_remover(struct thread *thread)
return 0;
}
+/* This function checks whether an LSA with initial sequence number should be
+ * originated after a wrap in sequence number
+ */
+void ospf_check_and_gen_init_seq_lsa(struct ospf_interface *oi,
+ struct ospf_lsa *recv_lsa)
+{
+ struct ospf_lsa *lsa = NULL;
+ struct ospf *ospf = oi->ospf;
+
+ lsa = ospf_lsa_lookup_by_header(oi->area, recv_lsa->data);
+
+ if ((lsa == NULL) || (!CHECK_FLAG(lsa->flags, OSPF_LSA_PREMATURE_AGE))
+ || (lsa->retransmit_counter != 0)) {
+ if (IS_DEBUG_OSPF(lsa, LSA))
+ zlog_debug(
+ "Do not generate LSA with initial seqence number.");
+ return;
+ }
+
+ ospf_lsa_maxage_delete(ospf, lsa);
+
+ lsa->data->ls_seqnum = lsa_seqnum_increment(lsa);
+
+ ospf_lsa_refresh(ospf, lsa);
+}
+
void ospf_lsa_maxage_delete(struct ospf *ospf, struct ospf_lsa *lsa)
{
struct route_node *rn;