From d0f789425bb71422190b03f23ed375dc0959990d Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Fri, 14 Jul 2017 12:43:26 +0200 Subject: [PATCH] ntp: ignore saved remote poll when peer is not responding When a peer stops responding, allow our actual polling interval to be longer than poll saved from the last valid response. --- ntp_core.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ntp_core.c b/ntp_core.c index f916fffa..35ef9f3b 100644 --- a/ntp_core.c +++ b/ntp_core.c @@ -260,6 +260,9 @@ static ARR_Instance broadcasts; /* Maximum poll interval set by KoD RATE */ #define MAX_KOD_RATE_POLL SRC_DEFAULT_MAXPOLL +/* Maximum number of missed responses to follow peer's polling interval */ +#define MAX_PEER_POLL_TX 8 + /* Invalid socket, different from the one in ntp_io.c */ #define INVALID_SOCK_FD -2 @@ -781,10 +784,8 @@ get_transmit_delay(NCR_Instance inst, int on_tx, double last_tx) /* Use shorter of the local and remote poll interval, but not shorter than the allowed minimum */ poll_to_use = inst->local_poll; - if (poll_to_use > inst->remote_poll) - poll_to_use = inst->remote_poll; - if (poll_to_use < inst->minpoll) - poll_to_use = inst->minpoll; + if (poll_to_use > inst->remote_poll && inst->tx_count < MAX_PEER_POLL_TX) + poll_to_use = MAX(inst->remote_poll, inst->minpoll); delay_time = UTI_Log2ToDouble(poll_to_use); -- 2.47.3