NAU_Instance
NAU_CreateNtsInstance(IPSockAddr *nts_address, const char *name, uint32_t cert_set,
- uint16_t ntp_port)
+ uint16_t ntp_port, int max_retry_interval2)
{
NAU_Instance instance = create_instance(NTP_AUTH_NTS);
- instance->nts = NNC_CreateInstance(nts_address, name, cert_set, ntp_port);
+ instance->nts = NNC_CreateInstance(nts_address, name, cert_set, ntp_port,
+ max_retry_interval2);
return instance;
}
extern NAU_Instance NAU_CreateNoneInstance(void);
extern NAU_Instance NAU_CreateSymmetricInstance(uint32_t key_id);
extern NAU_Instance NAU_CreateNtsInstance(IPSockAddr *nts_address, const char *name,
- uint32_t cert_set, uint16_t ntp_port);
+ uint32_t cert_set, uint16_t ntp_port,
+ int max_retry_interval2);
/* Destroy an instance */
extern void NAU_DestroyInstance(NAU_Instance instance);
nts_address.port = params->nts_port;
result->auth = NAU_CreateNtsInstance(&nts_address, name, params->cert_set,
- result->remote_addr.port);
+ result->remote_addr.port, 19);
} else if (params->authkey != INACTIVE_AUTHKEY) {
result->auth = NAU_CreateSymmetricInstance(params->authkey);
} else {
#define NKE_RETRY_FACTOR2_CONNECT 4
#define NKE_RETRY_FACTOR2_TLS 10
-#define NKE_MAX_RETRY_INTERVAL2 19
+#define NKE_MIN_MAX_RETRY_INTERVAL2 6
+#define NKE_MAX_MAX_RETRY_INTERVAL2 24
typedef struct {
int length;
uint32_t cert_set;
/* Configured NTP port */
uint16_t default_ntp_port;
+ /* Configured maximum NTS-KE retry interval */
+ int32_t max_retry_interval2;
/* Address of NTP server (can be negotiated in NTS-KE) */
IPSockAddr ntp_address;
/* ================================================== */
NNC_Instance
-NNC_CreateInstance(IPSockAddr *nts_address, const char *name, uint32_t cert_set, uint16_t ntp_port)
+NNC_CreateInstance(IPSockAddr *nts_address, const char *name, uint32_t cert_set,
+ uint16_t ntp_port, int max_retry_interval2)
{
NNC_Instance inst;
inst->name = Strdup(name);
inst->cert_set = cert_set;
inst->default_ntp_port = ntp_port;
+ inst->max_retry_interval2 = CLAMP(NKE_MIN_MAX_RETRY_INTERVAL2, max_retry_interval2,
+ NKE_MAX_MAX_RETRY_INTERVAL2);
inst->ntp_address.ip_addr = nts_address->ip_addr;
inst->ntp_address.port = ntp_port;
inst->siv = NULL;
return;
factor = NKC_GetRetryFactor(inst->nke);
- interval = MIN(factor + inst->nke_attempts - 1, NKE_MAX_RETRY_INTERVAL2);
+ interval = MIN(factor + inst->nke_attempts - 1, inst->max_retry_interval2);
inst->next_nke_attempt = now + UTI_Log2ToDouble(interval);
}
typedef struct NNC_Instance_Record *NNC_Instance;
extern NNC_Instance NNC_CreateInstance(IPSockAddr *nts_address, const char *name,
- uint32_t cert_set, uint16_t ntp_port);
+ uint32_t cert_set, uint16_t ntp_port,
+ int max_retry_interval2);
extern void NNC_DestroyInstance(NNC_Instance inst);
extern int NNC_PrepareForAuth(NNC_Instance inst);
extern int NNC_GenerateRequestAuth(NNC_Instance inst, NTP_Packet *packet,
NNC_Instance
NNC_CreateInstance(IPSockAddr *nts_address, const char *name, uint32_t cert_set,
- uint16_t ntp_port)
+ uint16_t ntp_port, int max_retry_interval2)
{
return NULL;
}
can_auth_res = can_auth_req;
break;
case 2:
- inst = NAU_CreateNtsInstance(&nts_addr, "test", 0, 0);
+ inst = NAU_CreateNtsInstance(&nts_addr, "test", 0, 0, 0);
TEST_CHECK(NAU_IsAuthEnabled(inst));
TEST_CHECK(NAU_GetSuggestedNtpVersion(inst) == 4);
mode = NTP_AUTH_NTS;
SCK_GetLoopbackIPAddress(AF_INET, &addr.ip_addr);
addr.port = 0;
- inst = NNC_CreateInstance(&addr, "test", 0, 0);
+ inst = NNC_CreateInstance(&addr, "test", 0, 0, 0);
TEST_CHECK(inst);
for (i = 0; i < 100000; i++) {