OSPFd: Update timestamps when we MaxAge LSAs.
When an LSA is flushed we need to update the timestamps for them. This
allows for the node to give the neighbor sufficient time to send back
an acknowledgement before retransmission kicks in.
Signed-off-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
Reviewed-by: Scott Feldman <sfeldma@cumulusnetworks.com>
Reviewed-by: James Li <jli@cumulusnetworks.com>
Reviewed-by: Paul Jakma <paul@opensourcerouting.org>
diff --git a/ospfd/ospf_flood.c b/ospfd/ospf_flood.c
index 2c33b00..d18314a 100644
--- a/ospfd/ospf_flood.c
+++ b/ospfd/ospf_flood.c
@@ -980,7 +980,12 @@
void
ospf_lsa_flush_area (struct ospf_lsa *lsa, struct ospf_area *area)
{
+ /* Reset the lsa origination time such that it gives
+ more time for the ACK to be received and avoid
+ retransmissions */
lsa->data->ls_age = htons (OSPF_LSA_MAXAGE);
+ lsa->tv_recv = recent_relative_time ();
+ lsa->tv_orig = lsa->tv_recv;
ospf_flood_through_area (area, NULL, lsa);
ospf_lsa_maxage (area->ospf, lsa);
}
@@ -988,7 +993,12 @@
void
ospf_lsa_flush_as (struct ospf *ospf, struct ospf_lsa *lsa)
{
+ /* Reset the lsa origination time such that it gives
+ more time for the ACK to be received and avoid
+ retransmissions */
lsa->data->ls_age = htons (OSPF_LSA_MAXAGE);
+ lsa->tv_recv = recent_relative_time ();
+ lsa->tv_orig = lsa->tv_recv;
ospf_flood_through_as (ospf, NULL, lsa);
ospf_lsa_maxage (ospf, lsa);
}