Skip to content

Commit

Permalink
ospfd: Fix assert in LSA refresh interval setting
Browse files Browse the repository at this point in the history
Under certain timing conditions, the current logic asserts in
ospf_lsa_refresh_delay(). While this isn't readily reproducible,
the only explanation is that the conversion from struct timeval
to milliseconds is 0 due to rounding off the microseconds.

Signed-off-by: Acee <[email protected]>
  • Loading branch information
Acee committed Nov 5, 2024
1 parent 960462a commit 64c67c1
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions ospfd/ospf_lsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ int tv2msec(struct timeval tv)
int msecs;

msecs = tv.tv_sec * 1000;
msecs += tv.tv_usec / 1000;
msecs += (tv.tv_usec + 1000) / 1000;

return msecs;
}
Expand All @@ -126,7 +126,12 @@ int ospf_lsa_refresh_delay(struct ospf *ospf, struct ospf_lsa *lsa)
zlog_debug("LSA[Type%d:%pI4]: Refresh timer delay %d milliseconds",
lsa->data->type, &lsa->data->id, delay);

assert(delay > 0);
if (delay <= 0) {
zlog_warn("LSA[Type%d:%pI4]: Invalid refresh timer delay %d milliseconds Seq: 0x%x Age:%u",
lsa->data->type, &lsa->data->id, delay,
ntohl(lsa->data->ls_seqnum), ntohs(lsa->data->ls_age));
delay = 0;
}
}

return delay;
Expand Down

0 comments on commit 64c67c1

Please sign in to comment.