nts: use shorter NTS-KE retry interval when network is down
When chronyd configured with an NTS source not specified as offline and resolvable without network was started before the network was up, it was using an unnecessarily long NTS-KE retry interval, same as if the server was refusing the connections. When the network is down, the connect() call made from NKC_Start() on the non-blocking TCP socket should fail with a different error than EINPROGRESS and cause NKC_Start() to return with failure. Add a constant 2-second retry interval (matching default iburst) for this case.
This commit is contained in:
parent
a1406eded3
commit
1daa40a2f7
1 changed files with 12 additions and 4 deletions
|
@ -46,6 +46,9 @@
|
|||
/* Maximum length of all cookies to avoid IP fragmentation */
|
||||
#define MAX_TOTAL_COOKIE_LENGTH (8 * 108)
|
||||
|
||||
/* Retry interval for NTS-KE start (which doesn't generate network traffic) */
|
||||
#define RETRY_INTERVAL_KE_START 2.0
|
||||
|
||||
/* Magic string of files containing keys and cookies */
|
||||
#define DUMP_IDENTIFIER "NNC0\n"
|
||||
|
||||
|
@ -203,10 +206,15 @@ set_ntp_address(NNC_Instance inst, NTP_Remote_Address *negotiated_address)
|
|||
/* ================================================== */
|
||||
|
||||
static void
|
||||
update_next_nke_attempt(NNC_Instance inst, double now)
|
||||
update_next_nke_attempt(NNC_Instance inst, int failed_start, double now)
|
||||
{
|
||||
int factor, interval;
|
||||
|
||||
if (failed_start) {
|
||||
inst->next_nke_attempt = now + RETRY_INTERVAL_KE_START;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!inst->nke)
|
||||
return;
|
||||
|
||||
|
@ -221,8 +229,8 @@ static int
|
|||
get_cookies(NNC_Instance inst)
|
||||
{
|
||||
NTP_Remote_Address ntp_address;
|
||||
int got_data, failed_start = 0;
|
||||
double now;
|
||||
int got_data;
|
||||
|
||||
assert(inst->num_cookies == 0);
|
||||
|
||||
|
@ -241,10 +249,10 @@ get_cookies(NNC_Instance inst)
|
|||
inst->nke_attempts++;
|
||||
|
||||
if (!NKC_Start(inst->nke))
|
||||
;
|
||||
failed_start = 1;
|
||||
}
|
||||
|
||||
update_next_nke_attempt(inst, now);
|
||||
update_next_nke_attempt(inst, failed_start, now);
|
||||
|
||||
/* Wait until the session stops */
|
||||
if (NKC_IsActive(inst->nke))
|
||||
|
|
Loading…
Reference in a new issue